Const объекты

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

DCoder

Гость
#1
Имеем иерархию классов:
<!--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&.
Я что-то не так понимаю? Как с этим бороться?
 

SunSanych

Well-Known Member
28.06.2006
71
0
#2
В функцию 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]