案例~c++多态思想(计算加减乘除例子)

这篇博客对比了普通写法和多态写法的计数器类,展示了如何通过多态提升代码的组织结构清晰度和可扩展性。多态写法利用了继承和抽象类,使得在不修改原有代码的基础上可以方便地增加新的运算符功能,提高了代码的维护性和后期扩展性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通写法

#include <iostream>
#include <string>
using namespace std;
//普通写法
class Counter
{
public:
	int Count(string symbol)
	{
		if (symbol == "+")
		{
			return num1 + num2;
		}
		else if (symbol == "-")
		{
			return num1 - num2;
		}
		else if (symbol == "*")
		{
			return num1 * num2;
		}
		else if (symbol == "/");
		{
			return num1 / num2;
		}
        //如果想扩展新功能,需要修改源码
        //在真实开发中提倡  开闭原则
        //开闭原则:对扩展进行开放,对修改进行关闭
	}
	int& getNum1()
	{
		return num1;
	}
	int& getNum2()
	{
		return num2;
	}
	
protected:
	int num1;
	int num2;
};
void test1()
{
	Counter c;
	c.getNum1() = 10;
	c.getNum2() = 20;
	cout << c.getNum1() << "+" << c.getNum2() << "=" << c.Count("+") << endl;
	cout << c.getNum1() << "-" << c.getNum2() << "=" << c.Count("-") << endl;
	cout << c.getNum1() << "*" << c.getNum2() << "=" << c.Count("*") << endl;
	cout << c.getNum1() << "/" << c.getNum2() << "=" << c.Count("/") << endl;
}
int main()
{
	test1();



	return 0;
}

多态写法:

多态好处:

  • 组织结构清晰
  • 可读性强
  • 对于前期和后期扩展以及维护性高
#include <iostream>
#include <string>
using namespace std;
//多态
//实现计算器抽象类
class Counter
{
public:
	virtual int count()
	{
		return 0;
	}
	
	int& getNum1()
	{
		return num1;
	}
	int& getNum2()
	{
		return num2;
	}
	
protected:
	int num1;
	int num2;
};
//加法
class Add :public Counter
{
public:
	int count()
	{
		return getNum1()+getNum2();
	}
};
//减法
class Sub :public Counter
{
public:
	int count()
	{
		return getNum1() - getNum2();
	}
};
//乘法
class Mul :public Counter
{
public:
	int count()
	{
		return getNum1() * getNum2();
	}
};
//除法
class Mod :public Counter
{
public:
	int count()
	{
		return getNum1() / getNum2();
	}
};

void test()
{
	//多态使用条件
	//父类指针或者引用指向子类对象
	//加法
	Counter* abc = new Add;
	abc->getNum1() = 10;
	abc->getNum2() = 20;
	cout << abc->getNum1() << "+" << abc->getNum2() << "=" << abc->count() << endl;
	delete abc;
	//减法
	abc = new Sub;
	abc->getNum1() = 30;
	abc->getNum2() = 10;
	cout << abc->getNum1() << "-" << abc->getNum2() << "=" << abc->count() << endl;
    delete abc;
	//乘法
	abc = new Mul;
	abc->getNum1() = 40;
	abc->getNum2() = 30;
	cout << abc->getNum1() << "*" << abc->getNum2() << "=" << abc->count() << endl;
    delete abc;
	//除法
	abc = new Mod;
	abc->getNum1() = 64;
	abc->getNum2() = 8;
	cout << abc->getNum1() << "/" << abc->getNum2() << "=" << abc->count() << endl;
    delete abc;
}
int main()
{
	test();
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luckys-Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值