C++编程求高手解答!!!!

1.写一个程序,定义一个抽象类shape,由他派生3个类Circular(圆形)square(正方形)triangle(三角形)。用虚函数分别计算几种图形的面积,并求他们... 1.写一个程序,定义一个抽象类shape,由他派生3个类Circular (圆形)square(正方形) triangle(三角形)。用虚函数分别计算几种图形的面积,并求他们的和。要求(主函数)用基类指针数组使他每个元素指向一个派生类对象。ps:题目完整 展开
 我来答
HU等你爱我
2015-08-13 · TA获得超过113个赞
知道答主
回答量:12
采纳率:0%
帮助的人:4.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函数
}
追问
你这不是直接复制别人的嘛?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
thebabe
推荐于2016-08-17 · TA获得超过829个赞
知道小有建树答主
回答量:729
采纳率:66%
帮助的人:560万
展开全部
#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() {
   //.....
}
更多追问追答
追问
我怎么有错那vc6.0
追答

有点问题,由于字数限制只能贴图了。


本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式