如何使用具有纯虚函数的父类访问C ++中的Parent类的构造函数

时间:2016-04-15 19:09:25

标签: c++ inheritance constructor virtual-functions

我正在尝试从类形状创建圆形和矩形。如果我使用参数(来自circle类)调用Shape()构造函数,我希望y被指定为pi。由于Shape具有纯虚函数,因此编译器显示错误。我怎样才能克服这个错误。为什么默认参数正确运行呢? 我也尝试了这个 - 来自Circle类的Shape(0)。编译器说"无效使用此"

#include<iostream>
using namespace std;

class Shape
{public:
double x,y;

   Shape()
   {x=0;y=0;}

   Shape(int p,int t=3.14159)
   {x=p;y=t;}

   virtual void display_area()=0;
   virtual void get_data()=0;
};



class Circle: public Shape
{public:

    Circle()
    {Shape(0);}    //ERROR HERE

    void get_data()
    {cout<<"\nRadius: ";cin>>x;}

    void display_area()
    {cout<<"\nArea: "<<y*x*x;}
};

2 个答案:

答案 0 :(得分:2)

要调用基础构造函数,您需要使用member initialization list

变化:

Circle()
{
    Shape(0);
}    //ERROR HERE

Circle() : Shape(0)
{

}

答案 1 :(得分:2)

基类在构造函数块运行之前总是被初始化,所以你在构造函数member initialization list中完成它。

我还修复了你的代码中的另一个错误....你正在做一些缩小的转换,这不会按你的意愿工作......

#include<iostream>
using namespace std;

class Shape
{
public:
    double x,y;

Shape()
{  
     x=0;
     y=0;
}

Shape(double p, double t=3.14159)   //changed from Shape(int p, int t=3.14159)
{  
     x=p;
     y=t;
}

virtual void display_area()=0;

virtual void get_data()=0;
};

class Circle: public Shape
{
public:
    Circle() : Shape(0)
{  /*Shape(0); */ }    //Not HERE

void get_data()
{   
     cout<<"\nRadius: ";
     cin>>x;
}

void display_area()
{
     cout<<"\nArea: "<<y*x*x;}
};