动态多态案例—计算机类

什么是多态

多态是面向对象程序设计的一个重要特征。多态的字面意思就是多种状态,在面向对象的程序设计中,一个接口,多种实现即为多态。c++的多态性具体体现在编译和运行两个阶段。编译时多态是静态多态,在编译时就可以确定使用的接口。运行时多态是动态多态,具体引用的接口在运行时才能确定。

静态多态和动态多态区别其实只是在什么时候将函数实现和函数调用关联起来,是在编译时期还是运行时期,即函数地址是早绑定还是晚绑定。静态多态是指在编译期间就可以确定函数的调用地址,并产生代码,这是静态的,也就是说地址是早绑定。静态多态也被叫做静态联编。动态多态是指函数在运行期间才能确定函数的调用地址,这是动态的,也就是说地址是晚绑定。

案例

这是不用动态多态编写的代码

#include<iostream>
#include<string>
using namespace std;
class calculator
{
public:
	calculator()
	{
		m_a = 10;
		m_b = 10;
	}
	int result(string oper)
	{
		if (oper == "+")
		{
			return m_a + m_b;
		}
		else if (oper == "-")
		{
			return m_a - m_b;
		}
		else if (oper == "*")
		{
			return m_a * m_b;
		}
	}

	int m_a;
	int m_b;
};
int main()
{	
	calculator c;	
	cout << c.m_a << "+" << c.m_b << "=" << c.result("+") << endl;
	cout << c.m_a << "-" << c.m_b << "=" << c.result("-") << endl;
	cout << c.m_a << "*" << c.m_b << "=" << c.result("*") << endl;
	return 0;
}

这是使用动态多态编写的代码

#include<iostream>
using namespace std;
class abstractcalculator
{
public:
	abstractcalculator()
	{
		m_a = 10;
		m_b = 10;
	}
	virtual int result()
	{
		return 0;
	}
	int m_a;
	int m_b;
};
class addcalculator :public abstractcalculator
{
	int result()
	{
		return m_a + m_b;
	}
};
class subcalculator :public abstractcalculator
{
	int result()
	{
		return m_a - m_b;
	}
};
class mulcalculator :public abstractcalculator
{
	int result()
	{
		return m_a * m_b;
	}
};
int main()
{	
	abstractcalculator * p = new addcalculator;
	cout << p->m_a<< "+"<<p->m_b << "的结果为:" <<p->result() << endl;
	delete p;
	p =new subcalculator;
	cout << p->m_a << "-" << p->m_b << "的结果为:" << p->result() <<endl;
	delete p;
	p = new mulcalculator;
	cout << p->m_a << "*" << p->m_b << "的结果为:" << p->result() <<endl;
	return 0;
}

总结

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

在使用动态多态时,我们要注意以下几点问题:
多态的满足条件:
1.两个类之间要有继承关系。
2.子类要重写父类中的虚函数。

多态使用条件
3.父类指针或引用指向子类对象。
重写:函数的返回值类型,函数名,参数列表完全一致称为重写。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值