C语言中,为何指针或引用能通过何种机制实现如此复杂的多态现象?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1521个文字,预计阅读时间需要7分钟。
引言:在C++中,对空见惯的习性的事情就是:可以通过指针和引用实现多态,而对象则不行。那么,为什么?让我们来揭开这个神秘的谜团!
1. 类的存储方式:在一个类的实例中,只会存储该实例的数据成员。而成员函数的地址则存储在类的vtable(虚函数表)中。
2. 指针与引用的多态性:当使用指针或引用调用虚函数时,编译器会根据对象的实际类型查找对应的虚函数地址,从而实现多态。
3. 对象的多态性:由于对象的成员函数地址在vtable中,而vtable在运行时才能确定,因此对象无法实现多态性。
总结:在C++中,通过指针和引用可以实现多态,而对象则不行,这是因为对象的存储方式决定了其无法在运行时确定虚函数地址。
引言:
在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以。 那为什么?让我们来解开这神秘的暗纱!
1、 类对象的存储方式:
在一个类的实例中,只会存放非静态的成员变量。 如果该类中存在虚函数的话,再多加一个指向虚函数列表指针—vptr。
本文共计1521个文字,预计阅读时间需要7分钟。
引言:在C++中,对空见惯的习性的事情就是:可以通过指针和引用实现多态,而对象则不行。那么,为什么?让我们来揭开这个神秘的谜团!
1. 类的存储方式:在一个类的实例中,只会存储该实例的数据成员。而成员函数的地址则存储在类的vtable(虚函数表)中。
2. 指针与引用的多态性:当使用指针或引用调用虚函数时,编译器会根据对象的实际类型查找对应的虚函数地址,从而实现多态。
3. 对象的多态性:由于对象的成员函数地址在vtable中,而vtable在运行时才能确定,因此对象无法实现多态性。
总结:在C++中,通过指针和引用可以实现多态,而对象则不行,这是因为对象的存储方式决定了其无法在运行时确定虚函数地址。
引言:
在c++中司空见惯的事情就是:可以通过指针和引用可以实现多态,而对象不可以。 那为什么?让我们来解开这神秘的暗纱!
1、 类对象的存储方式:
在一个类的实例中,只会存放非静态的成员变量。 如果该类中存在虚函数的话,再多加一个指向虚函数列表指针—vptr。

