C++ --多态

简介: C++ --多态

一、多态

多态出现的条件

  • 继承关系
  • 子类中重写父类的虚函数
  • 父类指针或者引用指向子类对象

1.1 多态的实现原理

1、父类成员函数中包含虚函数,虚函数会在会在父类中留下一个虚函数指针,指向父类虚函数。

2、发生继承时,子类也同样会继承下这个指针,当子类中重写这个虚函数时:子类的函数地址会覆盖掉继承下来的虚函数地址。

3、函数调用时就会根据对象类的不同来调用对应的函数。

1.2 代码示例

//多态
//运行阶段确定函数地址
//多态发生的条件:继承关系 && 子类中重写父类的虚函数 && 父类指针或者引用指向子类对象
class Animal
{
public:
  //父类中声明虚函数
  virtual void stream()
  {
    cout << "The animal is streaming
";
  }
};
class Cat : public Animal
{
public:
  //子类中重写了父类中的stream()函数,不能事先确定调用哪个函数。
  void stream()
  {
    cout << "The cat is streaming
";
  }
};
void doStream(Animal& animal)
{
  animal.stream();
}
int main()
{
  Animal a;
  Cat cat;
  doStream(a);
  doStream(cat);
  return 0;
}

f16f447398114179bf6d1779ca0cc263.png

相关文章
|
21天前
|
C++
C++多态实现计算器
C++多态实现计算器
|
5天前
|
C++
C++中的封装、继承与多态:深入理解与应用
C++中的封装、继承与多态:深入理解与应用
19 1
|
9天前
|
C++
c++多态
c++多态
19 0
|
21天前
|
C++
【C++】从零开始认识多态(二)
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。 封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。 继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
26 1
|
21天前
|
C++
【C++】从零开始认识多态(一)
面向对象技术(oop)的核心思想就是封装,继承和多态。通过之前的学习,我们了解了什么是封装,什么是继承。 封装就是对将一些属性装载到一个类对象中,不受外界的影响,比如:洗衣机就是对洗衣服功能,甩干功能,漂洗功能等的封装,其功能不会受到外界的微波炉影响。 继承就是可以将类对象进行继承,派生类会继承基类的功能与属性,类似父与子的关系。比如水果和苹果,苹果就有水果的特性。
32 4
|
21天前
|
编译器 C++
c++的学习之路:22、多态(1)
c++的学习之路:22、多态(1)
25 0
c++的学习之路:22、多态(1)
|
8天前
|
存储 编译器 C语言
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(下)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
26 1
|
8天前
|
存储 编译器 Linux
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(中)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
22 1
|
8天前
|
编译器 C语言 C++
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题(上)
从C语言到C++_23(多态)抽象类+虚函数表VTBL+多态的面试题
12 0
|
15天前
|
存储 设计模式 编译器
【C++】继承和多态常见的问题
【C++】继承和多态常见的问题