Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Указатели на объекты производных классов
Указатель, имеющий тип базового класса, может ссылаться на объект любого производного класса. Следует помнить, что такой указатель имеет доступ только к наследуемым членам базового класса и виртуальным методам (см. разд. 13.20). Чтобы получить доступ к членам производного класса нужно выполнить приведение типов (листинг 13.28). Кроме того, при использовании адресной арифметики необходимо учитывать, что указатель будет перемещен на размер базового класса, а не производного. Это может привести к ошибке.
Листинг 13.28. Указатели на объекты производных классов
#include <iostream>
class A {
public:
void func1();
};
class B : public A {
public:
void func2();
};
void A::func1() { std::cout << "A::func1()" << std::endl; }
void B::func2() { std::cout << "B::func2()" << std::endl; }
int main() {
A *pA;
B b;
pA = &b; // Адрес производного класса
pA->func1(); // A::func1()
// pA->func2(); // Ошибка. Нужно выполнить приведение типов
((B *)pA)->func2(); // B::func2()
return 0;
}
Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов