
C++编程求高手解答!!!!
1.写一个程序,定义一个抽象类shape,由他派生3个类Circular(圆形)square(正方形)triangle(三角形)。用虚函数分别计算几种图形的面积,并求他们...
1.写一个程序,定义一个抽象类shape,由他派生3个类Circular (圆形)square(正方形) triangle(三角形)。用虚函数分别计算几种图形的面积,并求他们的和。要求(主函数)用基类指针数组使他每个元素指向一个派生类对象。ps:题目完整
展开
2个回答
展开全部
//错误略多。。看我的注释
#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函数
}
#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函数
}
追问
你这不是直接复制别人的嘛?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#define PI 3.1415926
#include <math.h>
class Shape {
public:
virtual double area()=0;
};
class Circle: public Shape{
private:
double center_X, center_Y, radius;
public:
Circle(double r) {radius = r;}
double area() {
if(radius > 0.) return PI*radius*radius;
else return -1.;
};
};
class Square: public Shape{
private:
double left_X, top_Y, lateral;
public:
Square(double l) {lateral = l;}
void setlateral(double l) {lateral = l;};
double area() {
if(lateral>0.) return lateral*lateral;
else return -1.;
};
};
class Trianle: public Shape{
private:
double a, b, c;
public:
Trianle(double a_, double b_, double c_) {a = a_; b = b_; c = c_;}
double area() {
double p = (a+b+c)/2.0;
if(a>0. && b>0. && c>0. && (a+b)>c && (a+b)>c && (a+c)>b && (c+b)>a) return sqrt((p-a)(p-b)(p-c));
else return -1.;
};
};
#define SHAPE_NUM 10
Shape shape[SHAPE_NUM];
double area_sum(Shape *p, int num) {
int i;
double res=0;
for(i=0; i<num; i++) {
res += p->area();
}
}
int main() {
//.....
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询