一提起C++的多态,很自然就想起了函数重载和虚函数的实现。函数重载是在编译时实现的一种多态,而运行时的一种多态可以通过虚函数来实现。具体一点的例子就是通过基类指针指向其子类的实例,然后来调用实际子类的成员函数。既然说到虚函数,那么虚函数表必然要提一下;我想用例子来加深一下对这方面的认识:
#include<iostream>
using namespace std;
class Base
{
public:
Base(){}
virtual ~Base(){}
int b_num;
virtual void func1(){cout<<"func1: In base~"<<endl;}
virtual void func2(){cout<<"func2: In base~"<<endl;}
};
class Derive: public Base
{
public:
Derive(){}
~Derive(){}
int d_num;
void func1(){cout<<"func1: In derive~"<<endl;}
};
int main()
{
cout<<sizeof(Base)<<" "<<sizeof(Derive)<<endl;
Derive d;
Base* b=&d;
b->func1();
b->func2();
return 0;
}
输出:
8 12
func1: In derive~
func2: In base~
对于类的内存组织的描述
(1)类Base的内存组织类似于:
VPTR是一个虚函数表指针,指向该类的虚函数表。由上图可以看出Base类的内存空间存放了该指针以及一个整型的数据成员,因此该类的长度为8.
(2)类Derive的内存组织类似于:
由上图可知,在派生类中VPTR指向了该类的一个虚函数表,这个是从基类的虚函数表中来的;由于派生类Derive中覆盖了基类的func1虚函数,那么新的虚函数表也做了相应的覆盖。
在派生类的内存空间中,存储了虚函数表指针VPTR,基类的数据成员b_num,还有自身的数据成员d_num,因此sizeof(Derive)的长度为12.
由于func1的函数在派生类中被覆盖,通过基类指针指向的派生类的虚函数表中的是Derive::func1();而func2()函数没有被覆盖,因此指向的还是派生类中虚表的Base::func2().
分享到:
相关推荐
多态性(Polymorphism)是面向对象程序设计的一个非常重要的特性,是指不同的对象对于同样的消息会产生不同的行为,而消息在C++语言中指的就是函数的调用,不同的函数可以具有多种不同的功能,而多态就是允许用一个...
C++中的虚函数与多态示例代码与详解…………………………
C++虚函数和多态学习笔记
这是C++编写的体现多态的程序,是在C++类里通过继承和派生来实现的,比较简单
C++虚函数多态和纯虚函数多态的经典示例源码
简单例子展示虚函数展现的多态特性,更改一处注释就能对比基类是否是虚函数带来的变化
本PPT讲解了C++面向对象技术中虚函数与多态方面的一些内容,希望对大家有所帮助。
1.C++中的虚函数C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是...
高质量的C++多态讲解,详细讲解虚函数,虚函数表,虚函数继承,虚函数继承下的内存分配等
c++虚函数.C++中的虚函数的作用主要是实现了多态的机制。
自上一个帖子之间跳过了一篇总结性的帖子,之后再发,今天主要研究了c++语言当中虚函数对多态的实现,感叹于c++设计者的精妙绝伦 c++中虚函数表的作用主要是实现了多态的机制。首先先解释一下多态的概念,多态是c++...
1、讲解和演示虚函数的概念与作用; 2、讲解和演示虚函数与多态在开发中的应用;
利用C++计算正方形,矩形,三角形圆形的面积,包含了虚函数,继承,多态相关的基础知识,这是一个示例程序力求简单易懂。代码采用VC6.0建立工程。
本文通过案例来阐述多态的概念和虚函数的使用,这是c++的重要性质之一,是面向对象概念的重要部分。
异质链表: 是指可以链表指针所指向的数据类型并不一致,比如一个链表中可以既存储整形数据,又可以存储浮点性的数据。在面向对象的语言中甚至就是可以指向不同的对象。...C++多态:通过虚函数表实现多态。
C++多态虚函数表,C++多态虚函数表,希望大家共同交流学习。
多态性(在C + +中用虚函数实现)是面向对象程序设计语言继数据...虚函数反映了一个类型与另一个类似类型之间的区别,只要这两个类型都是从同一个基类派生的。这种区别是通过其在基类中调用的函数的表现不同来反映的。
C++实验六 多态性和虚函数的应用 课程 实验报告 作业参考的良品!
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。
2、熟练掌握虚函数的作用及其使用方法。 3、掌握静态关联和动态关联的概念和用法。 4、理解纯虚函数和抽象类的概念和用法。 (二)实验内容 1、定义一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行...