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

2024-11-03 01:57:46
推荐回答(4个)
回答1:

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


#include 

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<<"我是圆啊"<

       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<<"我是长方形啊"<

       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<<"我是三角形啊"<

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

};

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

       {

              cout<<"circlearea is "<

              cout<<"rectanglearea is "<

              cout<<"trianglearea is "<

       } 

void main()

{

       circle c(1,1,1);

       rectangle r(1,1);

       triangle t(1,1);

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

}

回答2:

当c==D时,执行default,然后没有break,于是执行case‘C’

回答3:

1.段错误一般是当你访问了未申请的内存或非法的内存时产生的。主要还是程序的内存管理有问题。2.其实打开文件是将文件指针读到一个内存中,来进行操作。lz的这种情况,文件路径有问题,就会使程序中内存的读入产生问题,产生断错误。3.建议lz上网搜索关键字“C++内存管理”,再进一步深入这个问题。

回答4:

void printarea(shape & sh)
{
cout << sh.area()<}
这个就是考虑多态。
circle c(1,1,1);
rectangle r(1,1);
triangle t(1,1);

printarea(c);
printarea(r);
printarea(t);