Const объекты

Тема в разделе "Общие вопросы по С и С++", создана пользователем DCoder, 29 ноя 2009.

  1. DCoder

    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&.
    Я что-то не так понимаю? Как с этим бороться?
     
  2. SunSanych

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    В функцию 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]
     
Загрузка...

Поделиться этой страницей