c++不存在默认构造函数问题(类继承) 代码如下

#include<iostream>usingnamespacestd;classshape{public:shape(into){r=o;}//这个是叫构造函数吧vir... #include <iostream>
using namespace std;
class shape
{
public:
shape(int o){r=o;}//这个是叫构造函数吧
virtual void area()=0;//virtual 放在这里对么?
virtual void perimeter()=0;
virtual void volume()=0;
protected:
int r;
};

class circle:virtual public shape
{
public:
circle(int o):shape(o){r=o;}
virtual void area(){cout<<"The area of circle is "<<3.14*r*r<<endl;}
virtual void perimeter(){cout<<"The perimeter of circle is "<<3.14*2*r<<endl;}
virtual void volume(){cout<<"Volume is not defined for circle."<<endl;}

};
class sphere:virtual public circle //这里总是有问题
{
public:
sphere(int o):circle(o){r=o;}
void area(){cout<<"The area of sphere is "<<3.14*4*r*r<<endl;}
void perimeter(){cout<<"Perimeter is not defined for circle."<<endl;}
void volume(){cout<<"The volume of sphere is "<<(4*3.14*r*r*r)/3<<endl;}
};
展开
 我来答
dlengong
推荐于2017-09-28 · TA获得超过280个赞
知道小有建树答主
回答量:149
采纳率:0%
帮助的人:197万
展开全部
class sphere:virtual public circle //这里总是有问题
{
public:
sphere(int o):circle(o),shape(o){r=o;} //在初始化列表中添加初始化shape
void area(){cout<<"The area of sphere is "<<3.14*4*r*r<<endl;}
void perimeter(){cout<<"Perimeter is not defined for circle."<<endl;}
void volume(){cout<<"The volume of sphere is "<<(4*3.14*r*r*r)/3<<endl;}
};
当子类以virtual继承时它只负责构造直接基类,间接基类不会被父类构造,所以必须自己手动添加
追问
那还有别的方法么,还有能说下你的qq么 希望大神能指点指点
追答
还有一种方法就是给shape类添加无参的构造函数,这样在sphere类构造的时候就会调用shape的无参构造函数
class shape
{
public:
shape(int o){r=o;}//这个是叫构造函数吧
shape(){} //无参构造函数
virtual void area()=0;//virtual 放在这里对么?
virtual void perimeter()=0;
virtual void volume()=0;
protected:
int r;
};
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式