C++ 抽象类与多态:图形计算示例
C++ 抽象类与多态:图形计算示例
本示例展示了 C++ 中抽象类和多态的应用,通过定义一个抽象图形类 Shape,以及派生出矩形 (Rectangle) 和圆形 (Circle) 具体类,实现对不同形状对象的面积和周长计算。
代码结构
- Shape.h: 定义抽象图形类 Shape,包含纯虚函数
area()和perim()用以计算面积和周长。 - Rectangle.h: 定义矩形类 Rectangle,继承自 Shape,并实现
area()和perim()函数。 - Circle.h: 定义圆形类 Circle,继承自 Shape,并实现
area()和perim()函数。 - Main.cpp: 主程序文件,创建 Rectangle 和 Circle 对象,通过基类指针调用
area()和perim()函数计算面积和周长。
代码示例
//Shape.h
#pragma once
/*定义一个抽象图形类Shape,定义纯虚函数area()和perim()用以计算面积和周长。
从Shape派生出矩形(Rectangle)、圆形(Circle)具体派生类。
程序中通过基类指针(//纯虚析构)来调用派生类对象中的重写的纯虚函数
计算不同形状对象的面积和周长。*/
//抽象图形类
class Shape
{
public:
virtual double area(void) = 0;
virtual double perim(void) = 0;
};
// Rectangle.h
#pragma once
#include "Shape.h"
/*定义一个抽象图形类Shape,定义纯虚函数area()和perim()用以计算面积和周长。
从Shape派生出矩形(Rectangle)、圆形(Circle)具体派生类。
程序中通过基类指针(//纯虚析构)来调用派生类对象中的重写的纯虚函数
计算不同形状对象的面积和周长。*/
class Rectangle :public Shape
{
private:
double length; //矩形的长
double width; //矩形的宽
public:
Rectangle(double length, double width) : Shape() {
this->length = length;
this->width = width;
}
virtual double area(void) {
return length * width;
}
virtual double perim(void) {
return 2 * (length + width);
}
};
//circle.h
#pragma once
#include "Shape.h"
class Circle :public Shape
{
private:
double radious;
public:
Circle(double radious) : Shape() {
this->radious = radious;
}
virtual double area() {
return 3.14 * radious * radious;
}
virtual double perim() {
return 3.14 * 2 * radious;
}
};
//Main.cpp
#include <iostream>
#include "Shape.h"
#include "Rectangle.h"
#include "Circle.h"
using namespace std;
int main()
{
int length = 2, wide = 5;
Shape* ob = new Rectangle(length, wide);
cout << ob->area() << endl;
cout << ob->perim() << endl;
double radious = 1;
Shape* ob2 = new Circle(radious);
cout << ob2->area() << endl;
cout << ob2->perim() << endl;
delete ob;
delete ob2;
return 0;
}
代码解析
- 抽象类 Shape:
- 定义了两个纯虚函数
area()和perim(),表示抽象图形的面积和周长计算。 - 由于纯虚函数没有实现,所以 Shape 类不能实例化。
- 定义了两个纯虚函数
- 派生类 Rectangle 和 Circle:
- 继承自 Shape 类,并分别实现
area()和perim()函数,根据具体形状计算面积和周长。
- 继承自 Shape 类,并分别实现
- 主程序:
- 创建 Rectangle 和 Circle 对象,并用 Shape 指针指向它们。
- 通过基类指针调用
area()和perim()函数,实现多态性。 - 使用
delete释放动态分配的内存。
代码运行结果
10
14
3.14
6.28
结论
本示例展示了 C++ 中抽象类和多态的应用,可以方便地实现对不同类型的对象进行统一的处理。通过基类指针调用虚函数,可以根据实际的派生类对象类型来执行不同的代码,从而提高代码的灵活性。
注意事项
- 在使用基类指针时,要注意内存管理,及时释放动态分配的内存。
- 在派生类中重写虚函数时,要确保函数的签名与基类中的纯虚函数相同。
- 可以使用
typeid()运算符来判断实际的派生类类型。
总结
抽象类和多态是 C++ 面向对象编程的重要概念,它们可以提高代码的复用性和可维护性。在实际开发中,要根据具体的需求选择合适的类层次结构,并合理使用抽象类和多态机制。
原文地址: https://www.cveoy.top/t/topic/npkK 著作权归作者所有。请勿转载和采集!