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() 函数,根据具体形状计算面积和周长。
  • 主程序:
    • 创建 Rectangle 和 Circle 对象,并用 Shape 指针指向它们。
    • 通过基类指针调用 area()perim() 函数,实现多态性。
    • 使用 delete 释放动态分配的内存。

代码运行结果

10
14
3.14
6.28

结论

本示例展示了 C++ 中抽象类和多态的应用,可以方便地实现对不同类型的对象进行统一的处理。通过基类指针调用虚函数,可以根据实际的派生类对象类型来执行不同的代码,从而提高代码的灵活性。

注意事项

  • 在使用基类指针时,要注意内存管理,及时释放动态分配的内存。
  • 在派生类中重写虚函数时,要确保函数的签名与基类中的纯虚函数相同。
  • 可以使用 typeid() 运算符来判断实际的派生类类型。

总结

抽象类和多态是 C++ 面向对象编程的重要概念,它们可以提高代码的复用性和可维护性。在实际开发中,要根据具体的需求选择合适的类层次结构,并合理使用抽象类和多态机制。

C++ 抽象类与多态:图形计算示例

原文地址: https://www.cveoy.top/t/topic/npkK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录