C++ Shape 类:抽象图形类、矩形和圆形的面积和周长计算

本代码示例展示了如何使用 C++ 抽象类 Shape 定义面积和周长计算,并通过派生类 RectangleCircle 计算矩形和圆形的面积和周长。代码还解释了使用基类指针调用派生类方法的原理。

代码示例

//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){
		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) {
		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' //添加Circle.h头文件
using namespace std;

int main()
{
    int length = 2, wide = 5;
    Shape* ob=new Rectangle(length,wide); //修改创建Rectangle对象的方式
    cout << ob->area();
    cout << ob->perim() << endl;

    double radious=1;
    Shape* ob2 = new Circle(radious);
    cout << ob2->area() << endl;
    cout << ob2->perim() << endl;
}

代码解释

  1. 抽象类 Shape:

    • 定义了两个纯虚函数 area()perim(),分别用于计算形状的面积和周长。
    • 由于是纯虚函数,Shape 类不能实例化,只能作为基类被派生类继承。
  2. 派生类 RectangleCircle:

    • 继承自 Shape 类,并重写了 area()perim() 函数,实现了矩形和圆形的面积和周长计算。
  3. 基类指针调用派生类方法:

    • main 函数中,使用 Shape 指针分别指向 RectangleCircle 对象。
    • 通过 ob->area()ob->perim() 调用派生类对象中重写的纯虚函数,实现了动态多态性。

VS2022 错误解决

在 VS2022 中,Shape* ob2 = new Circle(radious) 报错是因为 main.cpp 中没有包含 Circle.h 头文件。

解决方法:在 main.cpp 中添加 #include 'Circle.h',使编译器能够识别 Circle 类。

总结

本代码示例展示了如何使用 C++ 抽象类和继承来实现不同形状的面积和周长计算,以及基类指针调用派生类方法的原理。同时,代码还解释了常见的编译错误并给出了解决方法。

C++ Shape 类:抽象图形类、矩形和圆形的面积和周长计算

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

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