• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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&.
Я что-то не так понимаю? Как с этим бороться?
 
В функцию 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]
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы