题目描述
实现Shape层次结构。每个TwoDimensionalShape类应包括成员函数getArea,以计算二维图形的面积。每个ThreeDimensionalShape类包含成员函数getArea和getVolume,分别计算三维图形的表面积和体积。编写一个程序,使用层次结构中每个具体类的对象的Shape向量指针。程序要打印出向量元素所指的对象。同样,再将所有形状存入向量的循环中,要能判断每个图形到底属于TwoDimensionalShape还是属于ThreeDimenionalShape。如果某个图形是TwoDimensionalShape就显示其面积,如果某个图形是ThreeDimenionalShape,则显示其面积和体积。
我的代码
#include <iostream>
using namespace std;
class shape{
public:
virtual void show() = 0;
};
class Twodimensionalshape:public shape{
public:
virtual void getarea() = 0;
virtual void set(double a) = 0;
// virtual void set(double a=0,double b=0,double c = 0) = 0;
};
class circle:public Twodimensionalshape{
double r;
public:
void set(double rr){
r = rr;
}
void getarea(){
cout << "面积为"<<3.14*r*r ;
}
void show(){
cout << "半径为" << r << "的圆" << endl;
}
};
class square:public Twodimensionalshape{
double d;
public:
void set(double dd){
d = dd;
}
void getarea(){
cout << "面积为"<<d*d ;
}
void show(){
cout << "边长为" << d << "的正方形" << endl;
}
};
class tri:public Twodimensionalshape{
double d,g;
public:
void set(double a){
return;
}
void set(double dd,double gg){
d = dd;
g = gg;
}
void getarea(){
cout << "面积为"<<d*g/2.0 ;
}
void show(){
cout << "底为" << d <<"高为"<<g<< "的三角形" << endl;
}
};
class Threedimensionalshape:public shape{
public:
virtual void getarea() = 0;
virtual void getspace() = 0;
virtual void set(double a) = 0;
};
class sphere:public Threedimensionalshape{
double r;
public:
void set(double r){
this->r = r;
}
void getarea(){
cout << "表面积为" << 4*3.14*r*r;
}
void getspace(){
cout << "体积为" << 4*3.14*r*r*r/3.0;
}
void show(){
cout << "半径为" << r<< "的球体" << endl;
}
};
class cube:public Threedimensionalshape{
double d;
public:
void set(double d){
this->d = d;
}
void getarea(){
cout << "表面积为" << 6*d*d;
}
void getspace(){
cout << "体积为" << d*d*d;
}
void show(){
cout << "边长为"<< d << "的正方体" << endl;
}
};
int main(){
circle c1;
c1.set(1.0);
c1.getarea();
c1.show();
square s1;
s1.set(1.0);
s1.getarea();
s1.show();
tri t1;
t1.set(3.0,4.0);
t1.getarea();
t1.show();
sphere s2;
s2.set(1.0);
s2.getarea();
s2.getspace();
s2.show();
cube c2;
c2.set(2.0);
c2.getarea();
c2.getspace();
c2.show();
return 0;
}
衍生类要将set函数重写,否则会报错:[Error] cannot declare variable ‘t1’ to be of abstract type 'tri’