
C++问题问题,/*写一个程序,定义抽象基类shape,由他派生出3个派生类:circle(圆形),rectangle(矩形 5
用一个函数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();
}
大神救救我,怎么纠正啊?头都快炸了,有错误!!! 展开
//错误略多。。看我的注释
#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
2017-08-08
{
cout << sh.area()<<endl;
}
这个就是考虑多态。
circle c(1,1,1);
rectangle r(1,1);
triangle t(1,1);
printarea(c);
printarea(r);
printarea(t);