对堆栈与堆上的派生类对象使用基类指针

时间:2011-11-23 16:07:42

标签: c++ class pointers base

我有一个关于使用基类指针...

分配派生类对象的问题
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 个答案:

答案 0 :(得分:7)

bp是一个指针,您正在尝试为其分配一个对象。请尝试分配该对象的地址:bp = &d;

答案 1 :(得分:0)

派生不是指针,它是一个对象。您需要获取该对象的地址以将其分配给指针(其中包含一个地址!):

bp = &d;

工作正常。