Использование указателя базового класса на объект производного класса в стеке или куче - PullRequest
2 голосов
/ 23 ноября 2011

У меня есть вопрос о назначении объекта производного класса с указателем базового класса ...

class Base 
{ 
    void print() { cout<<"Class Base"; }

};

class Derived: public Base
{ 
    void print() {  cout<<"class Derived"; }

};

int main()
{
    Base b, *bp;
    Derived d, *dp;

    b.print();
    d.print();
    bp = d; // why is this a conversion error? getting an error "cannot convert ‘Derived’ to ‘Base*’ in assignment"

    bp = new B(); // this works fine...

}    

Значит ли это, что мы можем только назначить динамически размещенный объект производного класса указателю базового класса? почему так ???

Ответы [ 2 ]

7 голосов
/ 23 ноября 2011

bp - это указатель, и вы пытаетесь присвоить ему объект. Попробуйте вместо этого назначить адрес этого объекта: bp = &d;

0 голосов
/ 23 ноября 2011

Производный не указатель, это объект.Вам нужно получить адрес этого объекта, чтобы назначить его указателю (который содержит адрес!):

bp = &d;

Работает нормально.

...