何时将类的引用分配给其父类的实例?

时间:2015-04-23 22:19:45

标签: c++

我正在阅读下面的代码。

class CPolygon { 
    protected: 
        int width, height; 
    public: 
        void set_values (int a, int b) { width=a; height=b; } 
        virtual int area () { return (0); } 
}; 
class CRectangle: public CPolygon { 
    public: 
        int area () { return (width * height); } 
}; 
class CTriangle: public CPolygon { 
    public: 
        int area () { return (width * height / 2); } 
}; 

在使用此类之后,我们有一个代码,在此代码中, CRectangle 类的引用被分配给其父“ CPolygon ”,如下所示:

main () { 
   CRectangle rect; 
   CTriangle trgl; 
   CPolygon poly; 
   //*****This part is when a reference of the derived class is
   //allocated to an instance of its parent class *****

   CPolygon * ppoly = ▭ 
   .
   .
}

所以我的问题是,当我们这样做以及为什么这个代码行不是这样的:

CPolygon * ppoly = new rect; 

由于

2 个答案:

答案 0 :(得分:3)

示例中的代码生成一个指向已存在的变量rect的指针。您可以创建一个指向该类型的新变量的指针,而不是指向已存在的变量,如此

CPolygon* ppoly1 = new CRectangle;

但是,rect是变量,而不是类型,因此调用new rect毫无意义。

答案 1 :(得分:2)

CPolygon * ppoly = new rect;是一个无效的构造,因为rectmain()方法中定义的变量,而new运算符需要一个类(或数组,或者结构,等等。)。

另一方面,CPolygon * ppoly = ▭赋值将ppoly值设置为rect变量的堆栈地址。从子类到父类的转换指针是可能的,并且是合法的。

你的问题的标题也有点偏离课程,因为你不能分配一个引用,只能指定指针(甚至不是那些实际上是内存的那个指针)#'s已分配/保留并返回地址)