c++中的虚函数详解

来源:互联网 发布:北京房价 知乎 编辑:程序博客网 时间:2024/06/05 02:56

//废话少说直接上代码,用一个测试来阐述虚函数:

#include<iostream>

#include<stdlib.h>
using namespace std;
//有虚函数的类 
class A
{
public:
A();
~A();

virtual void f(){
cout<<"this is A f()"<<endl;
}
virtual void g()
{
cout<<"this is A g()"<<endl;
}

private:
int   _a;
};
class B:public A
{
public:
B();
~B();
void g()
{
cout<<"this is B g()"<<endl;
}
private:
int _b;
};


B::B()
{
}


B::~B()
{
}
A::A()
{
}


A::~A()
{
}
int main()
{
B b;
A a;
b.f();
b.g();
cout<<"sizeof(a):"<<sizeof(a)<<endl;//_a,虚指针
cout<<"sizeof(b):"<<sizeof(b)<<endl;// _a,_b ,虚指针
cout<<"sizeof(A)"<<sizeof(A)<<endl;// 
cout<<"sizeof(B)"<<sizeof(B)<<endl;//
system("pause");//
return 0;//
}
/*
每个含有虚函数的类中有一个虚函数表,其中每一项都是虚函数的地址。

*/

打印结果依次是:

this is A f()
this is B g()
sizeof(a):8
sizeof(b):12
sizeof(A)8
sizeof(B)12


结果解释:

第一行:类B继承自A调用A的方法:f();

第二行:类B继承A但是重写了A的方法,所以调用的是自身的g();方法


第三到六行:含有虚函数的类都包含一个虚函数表,这个虚函数表有一个指针指向它;表中存放的是虚函数的地址,当对象访问对象时,会通过指针进行寻址








0 0
原创粉丝点击