我正在尝试从类形状创建圆形和矩形。如果我使用参数(来自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;}
};
答案 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;}
};