为什么我们不在虚拟的情况下创建派生类参考

时间:2014-06-07 12:42:33

标签: c++

我是C ++的新手。我不知道为什么我们无法创建Derived Class Reference。在派生类中,base的所有功能都会在这种情况下得到,然后也是为什么......请帮我解释一下。如果这是重复的请与我分享确切的链接。

#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;
}  

1 个答案:

答案 0 :(得分:0)

  1. 您要分配的内容不是引用,而是指针。
  2. B源自A,因此B A。但A不是B
  3. 因此允许A*ptr=new B;,但不是你想要的。
  4. 假设B*ptr=new A;是可能的。如果B包含A没有的数据成员, 将A解释为B毫无意义,尝试访问这些成员最多会导致崩溃。
  5. 顺便说一下,这不是一个C ++教程网站。我建议你读一本初学者的书。