qt 子类调用父类的函数_C++ & QT ---10(类和对象---多态)

本文详细介绍了C++面向对象的多态特性,包括静态多态与动态多态的区别,重点讲解了动态多态的实现原理和应用。通过计算器类、饮品制作和电脑组装等案例,阐述了多态在实际编程中的优势和使用场景。同时,讨论了纯虚函数、抽象类以及虚析构函数的概念和作用,强调了在处理继承关系时正确使用虚函数的重要性。
摘要由CSDN通过智能技术生成

4类和对象

C++面向对象的三大特征:封装、继承、多态

C++认为万事万物皆为对象,对象上有其属性和行为

de061c27fd5907bfe8f2e890f830df8a.png

4.7 多态

4.7.1 多态的基本概念

多态是C++面向对象三大特性之一

多态分为两类

1、静态多态: 函数重载 和 运算符重载 术语静态多态,复用函数名

2、动态多态:派生类 和 虚函数 实现运行时多态

静态多态 和 动态多态 区别:

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

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

#include<iostream>		//io流
using namespace std;	//设定名称空间,标准standard

#include<iostream>		//io流
using namespace std;	//设定名称空间,标准standard

// 动态多态
// 动物类
class Animal
{
    
public:
	//虚函数
	virtual void speak()
	{
    
		cout << "动物在说话" << endl;
	}

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

	void speak()
	{
    
		cout << "小狗在说话" << endl;
	}
};
//执行说话函数
//地址早绑定 在编译阶段,就确定了函数地址
//如果想执行让猫说话,那么这个函数的地址就应该在运行阶段才绑定
//Animal & animal = cat;父类的指针或引用  指向 子类对象
void doSpeak(Animal& animal)
{
    
	animal.speak();
}

void test01()
{
    
	Cat cat;
	doSpeak(cat);
	Dog dog;
	doSpeak(dog);
}
int main()
{
    
	test01();

	system("pause");

	return 0;
}

c2c669e08cb53870081d46f6262b00d4.png

注意

(1)动态多态的满足条件:

1、有继承关系

2、子类 需要重写 父类 的虚函数(注意 重载 和 重写 区别)

重写:函数返回值类型、函数名、参数列表,完全相同。重载其中一个不同

(2)动态多态 的使用:

1、父类的指针或引用 指向 子类对象

理论依据剖析

e70d74d1a2ba1a69453f92ef01683ff6.png
理论依据剖析

vfptr(virtual function pointer虚函数指针),指向虚函数表(vftable)

4.7.2 多态案例---计算器类

多态的优点:

1、代码组织结构清晰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值