C++ 如何在C+中访问父类的构造函数+;父类具有纯虚函数
我正在尝试从类形状创建圆形和矩形。如果我使用参数调用Shape()构造函数(来自circle类),我希望y被赋值为pi。由于Shape有一个纯虚拟函数,编译器显示错误。我怎样才能克服这个错误。那么为什么默认参数运行正常呢? 我还尝试了Circle类中的->形状(0)。编译器说“此项的使用无效”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
#包括
使用名称空间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;}
};