• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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]
 
Мы в соцсетях:

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