Указатель базового класса может указывать на объект производного класса. Почему наоборот не так? - PullRequest
65 голосов
/ 08 февраля 2011

Указатель базового класса может указывать на объект производного класса.Почему наоборот не верно без кастинга?Логически базовый класс не будет иметь достаточной информации о производном классе, но производный класс также должен иметь информацию о базовом классе.Я скучаю по некоторым основам здесь.

Ответы [ 11 ]

0 голосов
/ 08 февраля 2011

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

struct Base {};
struct Derived : Base {};
struct Derived2 : Base {};
Base* p = new Derived(); //Fine, Derived inherits from Base
Derived* d = new Base(); //Not fine, Base is not an instance of nor derived from Derived.
Derived* d2 = new Derived2(); // Also not fine, Derived2 derives from Base, but is not related to Derived.

Что касается причины: в общем случае базовый указатель является более общим, чем производный указатель. Как таковой он знает меньше о наследуемом типе. Производному указателю нельзя присвоить указатель на базовый тип без приведения просто потому, что он не может определить, относится ли базовый указатель к производному типу или одному из его потомков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...