C++ 如何在C+中访问父类的构造函数+;父类具有纯虚函数

C++ 如何在C+中访问父类的构造函数+;父类具有纯虚函数,c++,inheritance,constructor,virtual-functions,C++,Inheritance,Constructor,Virtual Functions,我正在尝试从类形状创建圆形和矩形。如果我使用参数调用Shape()构造函数(来自circle类),我希望y被赋值为pi。由于Shape有一个纯虚拟函数,编译器显示错误。我怎样才能克服这个错误。那么为什么默认参数运行正常呢? 我还尝试了Circle类中的->形状(0)。编译器说“此项的使用无效” #包括 使用名称空间std; 阶级形态 {公众: 双x,y; 形状() {x=0;y=0;} 形状(int p,int t=3.14159) {x=p;y=t;} 虚拟空白显示区域()=0; 虚拟void

我正在尝试从类形状创建圆形和矩形。如果我使用参数调用Shape()构造函数(来自circle类),我希望y被赋值为pi。由于Shape有一个纯虚拟函数,编译器显示错误。我怎样才能克服这个错误。那么为什么默认参数运行正常呢? 我还尝试了Circle类中的->形状(0)。编译器说“此项的使用无效”

#包括
使用名称空间std;
阶级形态
{公众:
双x,y;
形状()
{x=0;y=0;}
形状(int p,int t=3.14159)
{x=p;y=t;}
虚拟空白显示区域()=0;
虚拟void get_data()=0;
};
班级圈子:公共形态
{公众:
圈()
{Shape(0);}//此处有错误
void get_data()
{coutx;}
无效显示区()

{cout要调用基本构造函数,需要使用
成员初始化列表

更改:

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


基类总是在构造函数的块运行之前进行初始化,因此您可以在构造函数的块中进行初始化

我还修复了您代码中的另一个错误…您正在进行一些缩小的转换,这并不能像您希望的那样工作

#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;}
};
#包括
使用名称空间std;
阶级形态
{
公众:
双x,y;
形状()
{  
x=0;
y=0;
}
形状(双p,双t=3.14159)//从形状(int p,int t=3.14159)更改
{  
x=p;
y=t;
}
虚拟空白显示区域()=0;
虚拟void get_data()=0;
};
班级圈子:公共形态
{
公众:
圆():形状(0)
{/*形状(0);*/}//不在这里
void get_data()
{   
coutx;
}
无效显示区()
{

如果你的代码格式如此糟糕,你就无法修复它。规则#1:正确地格式化代码!为什么你的代码格式如此糟糕?你怎么能读懂它?谢谢Jose,代码工作了,但它显示的是整数而不是小数形状(0)正在调用第二个构造函数(它接受两个整数,而不是浮点数或双精度)。因为第一个int被设置为0,而t被设置为3*0=0。也许您需要将第二个构造函数更改为接受double。
Circle() : Shape(0)
{

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