【C++】揭开C++多态的神秘面纱

简介: 【C++】揭开C++多态的神秘面纱

初识多态

父类被不同子类继承后,父类呈现出不同的状态

假设有人这个类,这个类的状态是工作。当人被学生类继承后,人这个类的状态就变成了学习。当人被程序员类继承后,人这个类的状态就变成了写代码。当人被厨师类继承后,人这个类的状态就变成了做饭

多态的条件

必须通过父类的指针或者引用调用虚函数

 被调用的函数必须是虚函数,且子类必须对父类的虚函数进行重写

虚函数

virtual 修饰的类 成员函数 称为虚函数

class Person {
public:
 virtual void BuyTicket() { cout << "工作" << endl;}
};

虚函数重写

子类中有一个跟父类完全相同的虚函数 ( 即子类虚函数与父类虚函数的 返回值类型、函数名字、参数列表完全相同 ) ,称子类的虚函数重写了父类的虚函数。

. 协变 ( 基类与派生类虚函数返回值类型不同 )

派生类重写父类虚函数时,与父类虚函数 返回值类型 不同。即父类虚函数返回父类对象的指

针或者引用,子类虚函数返回子类对象的指针或者引用时,称为协变。

如下是协变示例代码

class A{};
class B : public A {};
class Person {
public:
 virtual A* f() {return new A;}
};
class Student : public Person {
public:
 virtual B* f() {return new B;}
};

重写是用子类函数的实现把父类函数的实现覆盖掉

完成重写后,再去调用子类中父类的虚函数时,不再是父类原来的虚函数

如下是多态代码示例

相关文章
|
2月前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
32 1
|
2月前
|
C++
【C++】从零开始认识多态(二)
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。 封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。 继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
30 1
|
2月前
|
C++
c++多态
c++多态
27 0
|
12天前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
21 2
|
6天前
|
编译器 C++ p3c
【c++】多态
【c++】多态
5 0
|
7天前
|
编译器 C++
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
【C++航海王:追寻罗杰的编程之路】多态你了解多少?
9 0
|
7天前
|
编译器 C++
【C++】学习笔记——多态_2
【C++】学习笔记——多态_2
8 0
|
7天前
|
编译器 C++
【C++】学习笔记——多态_1
【C++】学习笔记——多态_1
5 0
|
2月前
|
存储 编译器 C语言
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(下)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
37 1
|
2月前
|
存储 编译器 Linux
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(中)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
41 1