Сокрытие метода в C++
Если в потомке объявить метод с тем же именем, что у базы, метод базы не исчезает.
Компилятор смотрит на тип переменной, а не на то, какой
объект в ней лежит. Переменная типа User вызовет
greet из User, даже если объект создан
как Student. Запишем оба метода и выведем результат
для ссылки типа User и для Student:
#include <iostream>
class User {
public:
void greet() {
std::cout << "user\n";
}
};
class Student : public User {
public:
void greet() {
std::cout << "student\n";
}
};
Создадим объект Student и вызовем метод через ссылку на базу:
int main() {
Student student;
User& link = student;
link.greet();
student.greet();
return 0;
}
Сделайте классы User и Employee
с методом role, который выводит разные
строки. Сохраните объект Employee
в ссылке типа User и выведите,
какая версия метода вызывается.