Почему следующая программа выводит B
, ведь функция bar
вызывает private
функцию?
#include <iostream>
struct A {
virtual void foo() const { std::cout << "A"; }
};
struct B : A {
private:
void foo() const override { std::cout << "B"; }
};
void bar(const A& a) { a.foo(); }
int main() {
bar(B{});
}
Это абсолютно нормальная ситуация. 10.8.5 Access to virtual functions [class.access.virt]:
Правила доступа для виртуальных функций определяются по их объявлению и не зависят от того как функция переопределена
class B {
public:
virtual int f();
};
class D : public B {
private:
int f();
};
void f() {
D d;
B* pb = &d;
D* pd = &d;
pb->f(); // OK: B::f() - public, D::f() вызвана
pd->f(); // error: D::f() - private
}
Доступность проверяется в месте вызова используя тип выражения. Какой модификатор доступа у переопределнной функции неизвестно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите вынести функции rangeCheck() и errorMessege() в отдельный класс MyError что бы не нарушить функционал, ибо я уже всё что мне известно перепробовал:(
Здрасьте! Пишу плагин для создания простой полилинииКогда я жму кнопку "Создать", создается полилиния по заранее введенным координатам
Более развернуто вопрос звучит так: Написать метод пересечения строк, результат должен содержать только те символы которые есть и в первой...
Всем привет, решал задачу, и написал работающее решениеОдна проблема - по всем тестам не проходит по времени