【问题标题】:Using base class pointer against derived class object on stack vs. heap在堆栈与堆上对派生类对象使用基类指针
【发布时间】:2012-01-04 22:22:44
【问题描述】:

我有一个关于使用基类指针分配派生类对象的问题...

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...

}    

这是否意味着我们只能将动态分配的派生类对象分配给基类指针?为什么会这样???

【问题讨论】:

  • ap 在哪里声明?此代码甚至无法编译,因为ap 未声明。向我们展示实际代码。此外,您不能将对象分配给指针,您可以将地址分配给指针。您应该选择@ 987654321@.
  • 我的错……应该是 bp :(
  • +1 表示结构良好的第一篇文章

标签: c++ class pointers base


【解决方案1】:

bp 是这里的一个指针,你正试图给它分配一个对象。尝试分配该对象的地址:bp = &amp;d;

【讨论】:

  • @w00te,我作弊了...我添加了 C++ 标签。
【解决方案2】:

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

bp = &d;

工作正常。

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 2014-06-16
    • 2021-07-02
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 2011-07-20
    • 2012-03-14
    • 2016-11-28
    相关资源
    最近更新 更多