наследование — полиморфизм, переполнение стека

Предположим, что есть класс A и класс B, который наследует A. Как правильно использовать объекты B?
Я видел в «cplusplus.com», что они «используют» объекты B таким образом:

B b;
A* a=&b;

В чем разница между использованием указателя класса «A» и использованием b?

Спасибо!

-2

Решение

Преимущество использования указателей на базовые классы появляется, когда у вас есть виртуальные функции.
Представьте себе следующее

class A {
A(){}
virtual ~A(){} // note virtual destructor
virtual void func(){ cout << "A func" << endl; }
};

class B : public A {
B(){}
virtual ~B(){}
virtual void func(){ cout << "B func" << endl; }
};

class C : public A {
C(){}
virtual ~C(){}
virtual void func(){ cout << "C func" << endl; }
}

Теперь, если у нас есть указатель на базовый класс, мы можем вызвать func() на нем и правильная функция вызывается в зависимости от того, указывает ли указатель на A, B или C, Пример:

A* p1 = new A;
A* p2 = new B;
A* p3 = new C;
p1->func();
p2->func();
p3->func();

выведет следующее

A func
B func
C func

Теперь вы можете сказать, почему бы не использовать три разных указателя на типы A, B и C по отдельности, но что, если вам нужен массив указателей? Тогда все они должны быть одного типа, а именно A*, Этот тип полиморфизма полезен для группировки вещей, которые похожи по функции или духу, но отличаются по реализации.

2

Другие решения

Они только сделали это, чтобы показать, что вы Можно, и этот полиморфизм вызывается, когда вы делаете.

Если вы просто хотите использовать свой B bпросто используйте его; нет A* требуется.

Кроме того, изучение C ++ из интернет-учебников довольно похоже на изучение того, как готовить, анализируя жевательную резинку, которую вы нашли на улице. предпочитать правильная рецензируемая книга.

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector