#include<iostream> using namespace std; class CShape{ public:float Area; float Perimeter; CShape() { Area=0;Perimeter=0; } virtual void GetArea(){} virtual void GetPerimeter(){} }; class CRectangle:public CShape{ private: int l;int h; public: CRectangle(int h,int l ):CShape() {this->h=h;this->l=l; } void GetArea() {Area=l*h;cout<<"矩形的面积="<<Area<<endl;} void GetPerimeter() {Perimeter=(l+h)*2;cout<<"矩形的周长="<<Perimeter<<endl; } }; class CCirle:public CShape{ private:float r; public:CCirle(float r):CShape() {this->r=r; } void GetArea() { Area=3.14159*r*r; cout<<"圆的面积="<<Area<<endl; } void GetPerimeter() { Perimeter=r*3.14159*2; cout<<"圆的周长="<<Perimeter<<endl; } }; class CSquare:public CShape{ private: int a; public: CSquare(int a):CShape() { this->a=a; } void GetArea() { Area=a*a; cout<<"正方形面积="<<Area<<endl; } void GetPerimeter() { Perimeter=4*a; } }; class CTrapeziod:public CShape{ private: int lu; int ld; int h; public: CTrapeziod(int lu,int ld,int h):CShape() { this->lu=lu; this->ld=ld; this->h=h; } void GetArea() { Area=(lu+ld)*h/2; cout<<"梯形面积="<<Area<<endl; } }; class CTrangle:public CShape{ private: int d; int h; public: CTrangle(int d,int h):CShape() { this->d=d; this->h=h; } void GetArea() { Area=d*h/2; cout<<"三角形的面积="<<Area<<endl; } }; void main() { CShape *p[5]; CRectangle CR(5,10); CCirle CC(3); CSquare CS(4); CTrapeziod CT1(2,5,4); CTrangle CT2(6,2); p[0]=&CR; p[0]->GetArea(); p[1]=&CC; p[1]->GetArea(); p[2]=&CS; p[2]->GetArea(); p[3]=&CT1; p[3]->GetArea(); p[4]=&CT2; p[4]->GetArea(); int i, double SumArea=0.f; for(i=0;i<5;i++) { SumArea=p[i]->Area+SumArea; } cout<<"面积总和="<<SumArea<<endl; } 这段代码是关于面向对象编程的,使用C++语言实现了一个基本的几何图形类层次结构。主要涉及的知识点包括类的定义、继承、多态、构造函数以及动态内存管理。 1. **类的定义**:首先定义了一个基类`CShape`,包含两个公有成员变量`Area`和`Perimeter`,分别表示图形的面积和周长。同时,基类有两个虚函数`GetArea()`和`GetPerimeter()`,它们没有具体的实现,作为纯虚函数用于后续的多态性。 2. **继承**:接着定义了五个派生类,分别是`CRectangle`(矩形)、`CCircle`(圆形)、`CSquare`(正方形)、`CTrapeziod`(梯形)和`CTriangle`(三角形),它们都从`CShape`类继承。每个派生类都添加了自己特有的属性,并重写了基类的虚函数,实现了计算各自图形面积和周长的具体方法。 3. **构造函数**:每个派生类都有一个构造函数,用于初始化图形的属性。例如,`CRectangle`的构造函数接受两个参数,表示矩形的长和宽,`CCircle`的构造函数接受半径`r`,`CSquare`接受边长`a`,以此类推。 4. **多态**:通过使用基类指针`CShape*`来指向派生类的对象,实现了多态性。在`main`函数中,定义了一个`CShape`类型的指针数组`p[5]`,然后将不同类型的图形对象赋值给这些指针,调用`GetArea()`函数计算面积,这展示了动态多态性。 5. **动态内存管理**:虽然这里没有涉及到动态内存分配,但可以看到,所有对象都是在栈上创建的,例如`CR(5,10)`创建了一个矩形对象。如果是在实际项目中,可能需要考虑使用`new`操作符在堆上动态分配内存,以便在需要时释放资源。 6. **计算面积总和**:通过遍历`p`数组,累加`p[i]->Area`得到所有图形的面积总和`SumArea`,最后输出结果。这种做法体现了数组和循环控制结构的使用。 7. **命名空间**:`using namespace std;`语句导入了标准命名空间,使得可以不加`std::`前缀就直接使用`cout`等标准库函数。 8. **程序入口**:`main`函数是程序的入口点,所有的执行逻辑都在这个函数内完成。 9. **类型转换**:虽然没有明确的类型转换操作,但在使用基类指针调用派生类成员函数时,实际上发生了一种隐式的向上转型(即从派生类指针到基类指针的转换)。 这段代码很好地展示了面向对象编程中的基本概念,如类、继承、多态以及结构化编程的技巧。在实际应用中,这样的设计可以方便地扩展新的图形类型,只需增加新的派生类即可。
- 粉丝: 3
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助