C++面向对象三大特性之(多态)

一、什么是多态?

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。举个例子比如我们有一个动物类,这个动物类有个行为函数(这个行为函数是虚函数,虚函数就是函数返回值前面加virtual关键字),有一个狗类,一个猫类继承了这个动物类,并且重写了动物类的行为函数,然后我们用动物类的指针或引用接收狗或猫类对象,就会产生不同行为,就形成了多态。
例子实现如下
我们先设置一个动物类,

class Animal
{
public:
//有virtual关键字的是虚函数
	virtual void speak()
	{
		cout << "动物在说话" << endl;
	}

};

再创建一个猫类和一个狗类继承并重写动物类的虚函数

class Cat :public Animal
{
//此处virtual可省略
	virtual void speak()
	{
		cout << "猫在喵喵说话" << endl;
	}

};

class Dog :public Animal
{
//此处virtual可省略
	 virtual void speak()
	{
		cout << "狗在汪汪说话" << endl;
	}

};

然后我们创建一个说话函数

void DoSpeak(Animal &animal)
{
	animal.speak();

}

并给这个函数传入不同参数就可以产生不同的效果,下面是测试代码

void test01()
{
	Cat cat;
	//父类引用接收子类对象
	DoSpeak(cat);
	Dog dog;
	//父类引用接收子类对象
	DoSpeak(dog);
}

我们可以看到不管是狗对象还是猫对象都可以传递给DoSpeak函数,DoSpeak的函数参数不应该是animal类吗?怎么可以是猫类和狗类对象,在看它的运行结果,同一函数出现了不同的运行结果,这就是多态。
在这里插入图片描述

二、 多态的优势

1、组织结构性清晰;
2、代码可读性高;
可以让别人一看你的代码就知道你写的什么。
3、修改关闭,扩展开放,便于后期扩展和维护;不用修改原来的代码,只需要追加新代码在维护时。比如上面例子中我们需要些牛说话,马说话直接附加就行不用修改与原来代码。

三、多态形成的三大条件

1、要发生继承。
2、子类要重写父类中的虚函数(返回值、函数名、参数列表一模一样叫函数的重写,重写虚函数时virtual关键字可省略)。
3、父类指针或引用指向子类对象(void DoSpeak(Animal &animal) Cat cat; DoSpeak(cat);)这里传给父类animal引用的是子类cat对象.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值