C++问题问题,/*写一个程序,定义抽象基类shape,由他派生出3个派生类:circle(圆形),rectangle(矩形 5

/*写一个程序,定义抽象基类shape,由他派生出3个派生类:circle(圆形),rectangle(矩形),triangle(三角形),用一个函数printarea分... /*写一个程序,定义抽象基类shape,由他派生出3个派生类:circle(圆形),rectangle(矩形),triangle(三角形),
用一个函数printarea分别输出上面三者的面积
3个图形的数据在定义对象的时候给出*/
#include <iostream>
using namespace std;
class shape
{
protected:
virtualint area() const {return 0;}
virtualvoid shapename() const=0;
};
class circle:public shape
{
protected:
intx;
inty;
intr;
public:
circle(){x=0;y=0;r=0;}
circle(inta,int b,int c){x=a;y=b;r=c;}
voidshapename() {cout<<"我是圆啊"<<endl;}
intarea(){return 3.14*r*r;}
};
class rectangle:public shape
{
protected:
intx,y;
public:
rectangle(){x=0;x=0;}
rectangle(inta,int b){x=a,y=b;}
voidshapename(){cout<<"我是长方形啊"<<endl;}
intarea(){return x*y;}
};
class triangle:public shape
{
protected:
inth,x;
public:
triangle(){h=0;x=0;}
triangle(inta,int b){h=a;x=b;}
voidshapename(){cout<<"我是三角形啊"<<endl;}
intarea(){return h*x/2;}
};
class print:public circle,publicrectangle,public triangle
{
public:
void printarea()
{
cout<<"circlearea is"<<circle::area()<<endl;
cout<<"rectanglearea is"<<rectangle::area()<<endl;
cout<<"trianglearea is"<<triangle::area()<<endl;
}

};
void main()
{
circlec(1,1,1);
rectangler(1,1);
trianglet(1,1);
printp;
p.printarea();
}
大神救救我,怎么纠正啊?头都快炸了,有错误!!!
展开
 我来答
德克and德华

2013-03-27 · TA获得超过2651个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:713万
展开全部

//错误略多。。看我的注释


#include <iostream>

using namespace std;

class shape

{

protected:

       virtual float area() {return 0;}//面积还是返回浮点数比较合适

       virtual void shapename() = 0;

};

class circle:public shape

{

protected:

       int x;

       int y;

       int r;

public:

       circle(){x=0;y=0;r=0;}

       circle(int a,int b,int c){x=a;y=b;r=c;}

       void shapename() {cout<<"我是圆啊"<<endl;}

       float area(){return 3.14*r*r;}

};

class rectangle:public shape

{

protected:

       int x,y;

public:

       rectangle(){x=0;x=0;}

       rectangle(int a,int b){x=a,y=b;}

       void shapename(){cout<<"我是长方形啊"<<endl;}

       float area(){return x*y;}

};

class triangle:public shape

{

protected:

       int h,x;

public:

       triangle(){h=0;x=0;}

       triangle(int a,int b){h=a;x=b;}

       void shapename(){cout<<"我是三角形啊"<<endl;}

       float area(){return 1.0*h*x/2;}//为使其返回正确的浮点数,在运算时加一个1.0*

};

void printarea(circle c,rectangle r,triangle t)//这个函数仅仅是打印信息,没必要声明一个类来将它包含进去,然后又再多继承...只需要把它写成一个普通的全局函数即可

       {

              cout<<"circlearea is "<<c.area()<<endl;

              cout<<"rectanglearea is "<<r.area()<<endl;

              cout<<"trianglearea is "<<t.area()<<endl;

       } 

void main()

{

       circle c(1,1,1);

       rectangle r(1,1);

       triangle t(1,1);

       printarea(c,r,t);//传递参数给printarea函数

}

匿名用户
推荐于2017-08-29
展开全部
当c==D时,执行default,然后没有break,于是执行case‘C’
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-08-08
展开全部
1.段错误一般是当你访问了未申请的内存或非法的内存时产生的。主要还是程序的内存管理有问题。2.其实打开文件是将文件指针读到一个内存中,来进行操作。lz的这种情况,文件路径有问题,就会使程序中内存的读入产生问题,产生断错误。3.建议lz上网搜索关键字“C++内存管理”,再进一步深入这个问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xpston008
2013-03-27 · TA获得超过365个赞
知道小有建树答主
回答量:367
采纳率:100%
帮助的人:370万
展开全部
void printarea(shape & sh)
{
cout << sh.area()<<endl;
}
这个就是考虑多态。
circle c(1,1,1);
rectangle r(1,1);
triangle t(1,1);

printarea(c);
printarea(r);
printarea(t);
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式