Const объекты

  • Автор темы DCoder
  • Дата начала
D

DCoder

Имеем иерархию классов:
<!--shcode--><pre><code class='CPP'>class A {
public:
void foo();
};

class B : public A {

}[/CODE]
Также есть функция:

<!--shcode--><pre><code class='CPP'>void foo1(const B& objB){
objB.foo();
}[/CODE]

На данный код компилятор ругается, потому что не может преобразовать тип указателя this из const B в A&.
Я что-то не так понимаю? Как с этим бороться?
 
S

SunSanych

В функцию foo1 передаётся ссылка на константный объект objB. Это означает, что функция foo1 обязуется не изменять состояние объекта objB. т.е. не изменять открытые члены класса и вызывать только константные методы класса. В данном случае компилятор подсказывает, что функция foo1 не может вызывать метод foo() класса A так как метод не является константным.
Решения два. Либо убрать const из объявления функции foo1:

<!--shcode--><pre><code class='CPP'>void foo1(B& objB){
objB.foo();
}[/CODE]

Либо добавить const в объявление метода foo класса А:

<!--shcode--><pre><code class='CPP'>class A {
public:
void foo() const;
};[/CODE]
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!