2014-06-07 40 views
-4

我是C++中的新成员。我不知道为什么我们无法创建派生类参考。在派生类中,基本的所有特性都会在这种情况下得到解决,那么为什么......请帮助我确切的理由。如果这是重复的请与我分享确切的链接。为什么我们不在虚拟的情况下创建派生类参考

#include<iostream> 
using namespace std; 
struct A 
{ 
    virtual void get() 
    { 
    cout<<"I am in Base"<<endl; 
    } 
}; 

struct B:A 
{ 
    virtual void get() 
    { 
    cout<<"I am in Derived"<<endl; 
    } 
}; 

int main() 
{ 
    B*ptr = new A(); // virtual.cpp:21: error: invalid conversion from A* to B* 
    ptr->get(); 
    return 0; 
} 
+2

因为'A'不是'B'。 –

+1

您不能进行隐式向下转换。假装一个'A'是一个'B'是一个坏主意。即使当'A'开始为'B'时也可以避免。 – chris

+0

A * ptr = new B()可能是正确的。请你详细解释一下 – user2390140

回答

0
  1. 你要分配到的不是一个参考,但一个指针。
  2. B源自A,所以BA。但是A不是B。因此A*ptr=new B;是允许的,但不是你想要的。
  3. 假设B*ptr=new A;是可能的。如果B包含A不具有的数据成员,则 将A解释为B是没有意义的,尝试访问这些成员最多会导致崩溃。

顺便说一句,这不是一个C++教程网站。我建议阅读一本初学者的书。

相关问题