利用虚基类继承:实现从shape到圆,三角形,矩形

这篇博客介绍了C++中如何通过使用纯虚函数实现抽象基类`Shape`,并派生出`Circle`、`Triangle`和`Rectangle`三个子类。每个子类实现了计算面积、周长和缩放的功能,展示了面向对象编程中的继承和多态特性。

1.纯虚函数语法:virtual returntype func_name(xxx) = 0;

2.继承自 虚基类之后 ,需要 如果不添加新的 接口,那么需要写两种函数:

(1)派生类的构造函数

(2)重写虚函数(或者纯虚函数)

#include<iostream>
#include<string>
#include<cmath>
using namespace std;
//定义PI为3.14
#define PI 3.14

//虚基类-shape
class Shape
{
public:
	virtual double area() = 0;
	virtual double perimeter() = 0;
	virtual void scale(double factor) = 0;

};
//1.circle圆形
class Circle:public Shape
{
private:
	double radius;
public:
	//构造函数
	Circle(double r) :radius(r) {};

	//重写纯虚函数
	double area()
	{
		return PI * radius*radius;
	}
	double perimeter()
	{
		return 2 * PI*radius;
	}
	void scale(double factor)
	{
		radius *= factor;
	}

};

//2.三角形
class Triangle :public Shape
{
private:
	double a, b, c;  //利用海伦公式求面积
public:
	//构造函数
	Triangle(double a_, double b_, double c_) :a(a_), b(b_), c(c_) {};
	//重写纯虚函数
	double area()
	{
		//海伦公式
		double p = (a + b + c) / 2;
		return sqrt(p*(p - a)*(p - b)*(p - c));
	}
	double perimeter()
	{
		return a + b + c;
	}
	void scale(double factor)
	{
		a *= factor;
		b *= factor;
		c *= factor;
	}
};
//3.矩形
class Rectangle:public Shape
{
private:
	double width, height;
public:
	//构造函数
	Rectangle(double wid, double hei) :width(wid), height(hei) {};
	//重写纯虚函数
	double area() {
		return width * height;
	}
	double perimeter()
	{
		return 2 * (width + height);
	}
	void scale(double factor)
	{
		width *= factor;
		height *= factor;
	}
};

int main()
{
	//测试:
	Circle circle(1);
	Triangle triangle(1, 1, 1);
	Rectangle  rectangle(1, 1);
	cout << "圆的面积是 : " << circle.area() << endl << "圆的周长是 : " << circle.perimeter() << endl;
	cout << "三角形的面积是 : " << triangle.area() << endl << "三角形的周长是 : " << triangle.perimeter() << endl;
	cout << "矩形的面积是 : " << rectangle.area() << endl << "矩形的周长是 : " << rectangle.perimeter() << endl;

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值