C++学习笔记17,C++核心编程模板

20 篇文章 0 订阅
7 篇文章 0 订阅

多态练习案例——计算器

案例描述:分别利用普通写法和多态技术,设计实现两个操作数进行运算的计算器类

多态的优点:

  1. 代码组织结构清晰;
  2. 可读性强;
  3. 利于前期和后期的维护及扩展

1. 普通写法

class Calculater
{
public:
	int num1;
	int num2;

	int GetResualt(string op)
	{
		if (op == "+")
		{
			return num1 + num2;
		}
		if (op == "-")
		{
			return num1 - num2;
		}
		if (op == "*")
		{
			return num1 * num2;
		}
	}
};
void test47()
{
	Calculater c1;
	c1.num1 = 10;
	c1.num2 = 20;

	cout << "num1 + num2 = " << c1.GetResualt("+") << endl;
	cout << "num1 - num2 = " << c1.GetResualt("-") << endl;
	cout << "num1 * num2 = " << c1.GetResualt("*") << endl;
}
void main47()
{
	test47();
	system("pause");
}

//如果想扩展新功能,需要修改源码
//真正的开发过程中,提倡“开闭原则” 即:对扩展进行开发,对修改进行关闭。

2. 利用多态技术

//计算器抽象类
class Calculater2
{
public:
	int num1;
	int num2;

	virtual int GetResualt()
	{
		return 0;
	}
};
//加法计算器类
class AddCalculater : public Calculater2
{
public:
	int GetResualt()
	{
		return num1 + num2;
	}
};
//减法计算器类
class SubCalculater : public Calculater2
{
public:
	int GetResualt()
	{
		return num1 - num2;
	}
};
//乘法计算器类
class MulCalculater : public Calculater2
{
public:
	int GetResualt()
	{
		return num1 * num2;
	}
};
void test48()
{
	//多态使用条件
	//父类指针或者引用指向子类对象
	//使用指针的方式:

	//加法运算
	Calculater2 *c1 = new AddCalculater;
	c1->num1 = 20;
	c1->num2 = 10;
	cout << c1->num1 << "+" << c1->num2 << "=" << c1->GetResualt() << endl;
	delete c1;//用完记得销毁。	销毁只是把堆区的数据释放掉了,但是c1的数据类型没有变,可以重新给c1赋值

	//减法运算
	c1 = new SubCalculater;
	c1->num1 = 20;
	c1->num2 = 10;
	cout << c1->num1 << "-" << c1->num2 << "=" << c1->GetResualt() << endl;
	delete c1;

	//乘法运算
	c1 = new MulCalculater;
	c1->num1 = 20;
	c1->num2 = 10;
	cout << c1->num1 << "*" << c1->num2 << "=" << c1->GetResualt() << endl;
	delete c1;
}
int main48()
{
	test48();
	system("pause");
	return 0;
}

3. 自己扩展:将成员属性私有化

class Calculater3
{
private:
	int num1;
	int num2;
public:
	virtual int GetResualt()
	{
		return 0;
	}

	void SetNum1(int a)
	{
		num1 = a;
	}
	void SetNum2(int b)
	{
		num2 = b;
	}
	int GetNum1()
	{
		return num1;
	}
	int GetNum2()
	{
		return num2;
	}
};
//加法计算器类
class AddCalculater3 : public Calculater3
{
public:
	int GetResualt()
	{
		return GetNum1() + GetNum2();
	}
};
//减法计算器类
class SubCalculater3 : public Calculater3
{
public:
	int GetResualt()
	{
		return GetNum1() - GetNum2();
	}
};
//乘法计算器类
class MulCalculater3 : public Calculater3
{
public:
	int GetResualt()
	{
		return GetNum1() * GetNum2();
	}
};
void test49()
{
	//多态使用条件
	//父类指针或者引用指向子类对象
	//使用指针的方式:

	//加法运算
	Calculater3* c1 = new AddCalculater3;
	c1->SetNum1(20);
	c1->SetNum2(10);
	cout << c1->GetNum1() << "+" << c1->GetNum2() << "=" << c1->GetResualt() << endl;
	delete c1;//用完记得销毁。	销毁只是把堆区的数据释放掉了,但是c1的数据类型没有变,可以重新给c1赋值

	//减法运算
	c1 = new SubCalculater3;
	c1->SetNum1(200);
	c1->SetNum2(100);
	cout << c1->GetNum1() << "-" << c1->GetNum2() << "=" << c1->GetResualt() << endl;
	delete c1;

	//乘法运算
	c1 = new MulCalculater3;
	c1->SetNum1(10);
	c1->SetNum2(10);
	cout << c1->GetNum1() << "*" << c1->GetNum2() << "=" << c1->GetResualt() << endl;
	delete c1;
}
int main49()
{
	test49();

	system("pause");
	return 0;
}

(哔哩哔 哩黑马程序员 C++教程 学习笔记,如有侵权请联系删除)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值