C++面向对象小练习:几何图形类

本文介绍了一个基于C++的图形类层次结构设计案例,包括二维和三维图形的抽象基类Shape,以及Circle、Square、Triangle、Sphere和Cube等派生类。每个类都实现了特定的图形属性和方法,如面积、体积计算。通过多态性和虚函数,程序能够动态地处理不同类型的图形对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

实现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’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值