【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;}
};

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

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

如下是多态代码示例

相关文章
|
1月前
|
编译器 C++
C++入门12——详解多态1
C++入门12——详解多态1
36 2
C++入门12——详解多态1
|
1月前
|
C++
C++入门13——详解多态2
C++入门13——详解多态2
79 1
|
1月前
|
存储 编译器 C++
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
【C++篇】揭开 C++ STL list 容器的神秘面纱:从底层设计到高效应用的全景解析(附源码)
51 2
|
3月前
|
存储 编译器 C++
|
4月前
|
存储 编译器 C++
【C++】深度解剖多态(下)
【C++】深度解剖多态(下)
53 1
【C++】深度解剖多态(下)
|
4月前
|
存储 编译器 C++
|
3月前
|
存储 编译器 C++
打破C++的神秘面纱:一步步带你走进面向未来的编程世界!
【8月更文挑战第22天】C++是一门功能强大但学习曲线陡峭的语言,提供高性能与底层控制。本文通过实例介绍C++基础语法,包括程序结构、数据类型、控制结构和函数。从简单的“Hello, C++!”程序开始,逐步探索变量声明、数据类型、循环与条件判断,以及函数定义与调用。这些核心概念为理解和编写C++程序打下坚实基础,引导你进入C++编程的世界。
39 0
|
3月前
|
存储 编译器 C++
C++多态实现的原理:深入探索与实战应用
【8月更文挑战第21天】在C++的浩瀚宇宙中,多态性(Polymorphism)无疑是一颗璀璨的星辰,它赋予了程序高度的灵活性和可扩展性。多态允许我们通过基类指针或引用来调用派生类的成员函数,而具体调用哪个函数则取决于指针或引用所指向的对象的实际类型。本文将深入探讨C++多态实现的原理,并结合工作学习中的实际案例,分享其技术干货。
71 0
|
4月前
|
机器学习/深度学习 算法 C++
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
C++多态崩溃问题之为什么在计算梯度下降时需要除以批次大小(batch size)
|
4月前
|
Java 编译器 C++
【C++】深度解剖多态(上)
【C++】深度解剖多态(上)
52 2