C++多态案例-设计计算器类

这篇具有很好参考价值的文章主要介绍了C++多态案例-设计计算器类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前置知识点

多态是面向对象的三大特性之一
多态分为两类

  • 静态多态:函数重载运算符重载都属于静态多态,复用函数名
  • 动态多态:派生类虚函数实现运行时多态

静态多态和动态多态的区别

  • 静态多态的函数地址早绑定-----编译阶段确定函数地址
  • 动态多态的函数地址晚绑定-----运行阶段确定函数地址

动态多态必须满足的条件

  1. 有继承关系
  2. 子类重写父类的虚函数

1.1多态使用:

父类指针或者引用指向子类对象

1.2 重写概念

重写:函数名 参数列表 函数返回值类型 完全一致

1.3 多态的好处

  • 1.组织结构清晰
  • 2.可读性比较强
  • 3.对于前期和后期的扩展和维护性比较高

1.4 测试案例

1.4.1 静态多态的函数地址早绑定-----编译阶段确定函数地址

#include<iostream>
using namespace std;

//子类可以转父类,父类不能转子类
//动物类
class Animal {

public:
	 void speak()
	{
	
		cout << "动物在说话" << endl;
	
	}

};


//猫类
class Cat :public Animal {
public:
	void speak()
	{
		cout << "猫在说话" << endl;
	}

};

//执行说话的函数
//地址早绑定,在编译阶段就确定了函数地址
void doSpeak(Animal &animal)//Animal &animal=cat
{

	animal.speak();

}


void test01()
{
	Cat cat;
	doSpeak(cat);



}





//分别利用普通写法和多态技术实现计算器
//普通写法class Calculator
int main()
{

	test01();


	system("pause");
	return 0;


}

1.4.2动态多态的函数地址晚绑定-----运行阶段确定函数地址

#include<iostream>
using namespace std;

//子类可以转父类,父类不能转子类
//动物类
class Animal {

public:
	virtual void speak()
	{
	
		cout << "动物在说话" << endl;
	
	}

};


//猫类
class Cat :public Animal {
public:
	void speak()
	{
		cout << "猫在说话" << endl;
	}

};

//执行说话的函数
//地址早绑定,在编译阶段就确定了函数地址
void doSpeak(Animal &animal)//Animal &animal=cat
{

	animal.speak();

}


void test01()
{
	Cat cat;
	doSpeak(cat);



}





//分别利用普通写法和多态技术实现计算器
//普通写法class Calculator
int main()
{

	test01();


	system("pause");
	return 0;


}

结果

C++多态案例-设计计算器类,C++笔记,c++

2. 设计实现两个操作数进行运算的计算器类

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

  • 代码组织结构清晰
  • 可读性强
  • 利于前期和后期的扩展以及维护

对比传统写法和使用多态

  • 在真实开发中,提倡开闭原则
  • 开闭原则:对扩展进行开放,对修改进行关闭

2.1传统写法

#include<iostream>
#include<string>
using namespace std;

//子类可以转父类,父类不能转子类
//动物类
//class Animal {
//
//public:
//	virtual void speak()
//	{
//	
//		cout << "动物在说话" << endl;
//	
//	}
//
//};
//
//
猫类
//class Cat :public Animal {
//public:
//	virtual void speak()
//	{
//		cout << "猫在说话" << endl;
//	}
//
//};
//
执行说话的函数
地址早绑定,在编译阶段就确定了函数地址
//void doSpeak(Animal &animal)//Animal &animal=cat
//{
//
//	animal.speak();
//
//}
//
//
//void test01()
//{
//	Cat cat;
//	doSpeak(cat);
//
//
//
//}

//多态的好处
//1.组织结构清晰
//2.可读性比较强
//3.对于前期和后期的扩展和维护性比较高



//分别利用普通写法和多态技术实现计算器
//普通写法class Calculator---不利于维护
class Calculator
{
	//实现两个操作数运算
public:
	int getResult(string opt)//传入操作符
	{

		if (opt == "+")
		{
			return m_Num1 + m_Num2;
		}

		else if (opt == "-")
		{
			return m_Num1 - m_Num2;

		}

		else if (opt == "*")
		{
			return m_Num1 * m_Num2;

		}

	}


	int  m_Num1;
	int  m_Num2;



};

//测试案例


void test01()
{
	//创建计算器对象
	Calculator c;
	c.m_Num1 = 10;
	c.m_Num2 = 20;

	cout << c.m_Num1 << "+" << c.m_Num2 <<"="<< c.getResult("+") << endl;


}


int main()
{
	test01();



	system("pause");
	return 0;


}

2.2 使用多态实现计算器类

#include<iostream>
#include<string>
using namespace std;

//子类可以转父类,父类不能转子类
//动物类
//class Animal {
//
//public:
//	virtual void speak()
//	{
//	
//		cout << "动物在说话" << endl;
//	
//	}
//
//};
//
//
猫类
//class Cat :public Animal {
//public:
//	virtual void speak()
//	{
//		cout << "猫在说话" << endl;
//	}
//
//};
//
执行说话的函数
地址早绑定,在编译阶段就确定了函数地址
//void doSpeak(Animal &animal)//Animal &animal=cat
//{
//
//	animal.speak();
//
//}
//
//
//void test01()
//{
//	Cat cat;
//	doSpeak(cat);
//
//
//
//}

//多态的好处
//1.组织结构清晰
//2.可读性比较强
//3.对于前期和后期的扩展和维护性比较高



//分别利用普通写法和多态技术实现计算器
//普通写法class Calculator
class Calculator
{
	//实现两个操作数运算
public:
	int getResult(string opt)//传入操作符
	{

		if (opt == "+")
		{
			return m_Num1 + m_Num2;
		}

		else if (opt == "-")
		{
			return m_Num1 - m_Num2;

		}

		else if (opt == "*")
		{
			return m_Num1 * m_Num2;

		}

		return -1;

	}


	int  m_Num1;
	int  m_Num2;



};

//测试案例

void test01()
{
	//创建计算器对象
	Calculator c;
	c.m_Num1 = 10;
	c.m_Num2 = 20;

	cout << c.m_Num1 << "+" << c.m_Num2 << "=" << c.getResult("+") << endl;


}


//利用多态实现计算器
//实现计算器抽象类
class AbstractCalculator {

public:
	int m_Num1;
	int m_Num2;

	virtual int getResult()//在父类虚函数中不实现任何功能
	{
		return 0;


	}


};


//设计加法计算器类
class AddCalculator :public AbstractCalculator
{


public:
	virtual int getResult()//在父类虚函数中不实现任何功能
	{
		return m_Num1 + m_Num2;


	}

};
//设计减法计算器类

class SubCalculator :public AbstractCalculator
{


public:
	virtual int getResult()//在父类虚函数中不实现任何功能
	{
		return m_Num1 - m_Num2;


	}

};


//设计乘法计算器类
class MultCalculator :public AbstractCalculator
{


public:
	virtual int getResult()//在父类虚函数中不实现任何功能
	{
		return m_Num1 * m_Num2;


	}

};



void test02()
{

	//多态使用条件
	//父类指针或者引用指向子类的对象


	//1.加法运算
	AbstractCalculator *ptr = new AddCalculator;//C++无参构造可以省略()
	ptr->m_Num1 = 10;
	ptr->m_Num2 = 200;

	cout << ptr->m_Num1 << "+" << ptr->m_Num2 << "=" << ptr->getResult() << endl;

	delete ptr;//释放堆区数据

	//2.减法运算
	ptr = new SubCalculator;
	ptr->m_Num1 = 10;
	ptr->m_Num2 = 200;

	cout << ptr->m_Num1 << "-" << ptr->m_Num2 << "=" << ptr->getResult() << endl;

	delete ptr;//释放数据
    
			  
	//3.乘法运算
	ptr = new  MultCalculator;
	ptr->m_Num1 = 100;
	ptr->m_Num2 = 200;

	cout << ptr->m_Num1 << "*" << ptr->m_Num2 << "=" << ptr->getResult() << endl;

	delete ptr;//释放数据


}

int main()
{
	//test01();
	test02();


	system("pause");
	return 0;


}

结果

C++多态案例-设计计算器类,C++笔记,c++文章来源地址https://www.toymoban.com/news/detail-694847.html

到了这里,关于C++多态案例-设计计算器类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序案例——计算器

    1、创建项目 按照惯例,做一些初始化工作 2、设置导航栏 在 app.json 文件设置 window 配置项 pages/index/index.wxml 文件 1、编写页面整体结构 2、编写结果区域结构 两行内容:第一行是当前的计算式,第二行是当前计算结果 3、编写按钮区域第一行按钮的结构 第一行包含四个按钮:

    2024年04月11日
    浏览(27)
  • 【微信小程序】计算器案例

    🏆今日学习目标:第二十一期——计算器案例 ✨个人主页:颜颜yan_的个人主页 ⏰预计时间:30分钟 🎉专栏系列:我的第一个微信小程序 嗨嗨嗨,好久没更新小程序专栏了,本期浅浅用小程序写一个计算器。 最终代码会上传至资源噢~ 新建一个项目,在app.json中配置文件导

    2024年01月17日
    浏览(39)
  • 微信小程序案例3-2:计算器

    录屏演示多次计算 1、创建项目 创建微信小程序项目 - 计算器 单击【确定】按钮 按照惯例,做一些初始化工作 2、设置导航栏 在 app.json 设置 window 配置项 pages/index/index.wxml 文件 1、编写页面整体结构 2、编写结果区域结构 两行内容:第一行是当前的计算式,第二行是当前计算

    2024年04月12日
    浏览(72)
  • python界面开发案例:制作一个计算器软件

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 在我们手机上大家都有一个计算器,对吧 那它这功能是怎么实现的呢? 今天我们在电脑上来实现一个电脑端计算器界面~ 开发环境: Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 本文所有模块环境源码教程皆可点击文章下方

    2023年04月16日
    浏览(39)
  • Python综合案例—利用tkinter实现计算器的程序

    目录 一、导入 tkinter 库 定义全局变量 二、定义回调函数 三、创建窗口对象 四、创建标签控件 五、创建数字按钮 六、创建加、减、乘、除和等于按钮 七、创建清空按钮 八、总结         用Python实现计算器可以让我们更好地理解面向对象编程、GUI 编程和事件驱动编程等

    2024年02月04日
    浏览(57)
  • MFC基于对话框——仿照Windows计算器制作C++简易计算器

    目录 一、界面设计 二、设置成员变量 三、初始化成员变量  四、初始化对话框 ​五、添加控件代码 1.各个数字的代码(0~9) 2.清除功能的代码 3.退格功能的代码 4.加减乘除功能的代码 5.小数点功能的代码 6.正负号功能的代码 7.等于功能的代码 六、源码领取方式 制作好之后

    2024年02月05日
    浏览(43)
  • C++ 日期计算器

    概要 本篇主要探究C++ 实现日期计算器 Date 构造函数 构造函数,他是在创建类的时候调用进行初始化操作,我们这里声明与定义分离,所以它的参数不需要填写缺省值,缺省值在声明的时候定义即可。 Date 拷贝构造函数 拷贝构造函数和构造函数作用相似,拷贝构造函数是将已

    2024年02月21日
    浏览(36)
  • 【c++】简单的日期计算器

    🔥个人主页 : Quitecoder 🔥 专栏 : c++笔记仓 朋友们大家好啊,在我们学习了默认成员函数后,我们本节内容来完成知识的实践,来实现一个简易的日期计算器 头文件声明所有函数: 第一个函数,获取 某月天数 为了按照月的月份直接访问数组,我们设置大小为13,由于要进

    2024年04月09日
    浏览(65)
  • C++简易计算器的实现

    定义: 计算器是近代人发明的可以进行数字运算的机器。 也就是说,计算器不等同于算盘,前者能自行运算,后者只能简便计算过程,在古代,人们发明了许多计算工具,如算筹、算盘、计算尺等,随着社会的发展和科技的进步,计算工具也经历了由简单到复杂,由低级向高级的发

    2024年02月11日
    浏览(33)
  • 【C++】类与对象(日期计算器)

       🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏: 目录 头文件 函数实现      💬 hello! 各位铁子们大家好哇。              今日更新了类与对象日期计算器的内容      🎉 欢迎大家关注🔍点赞👍收藏⭐️留言📝 声明流插入和流提

    2024年03月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包