关于C++的虚函数

C++中的虚函数表,并不属于对象,属于类。比如:对象a和aa的虚函数表都是:0x4178ec。

如此可知,类的虚函数表放在跟类相关的区域,每次创建的对象,都将该对象的虚函数表的指针指向该类的虚函数表。

当子类给父类赋值时,子类的虚函数表的指针不会覆盖父类的虚函数指针,

并且,子类的虚函数表,在子类创建的时候,有编译器赋值。


测试代码如下:


#include "stdafx.h"
#include "stdio.h"


#include <iostream>


class A{


public:
int value;
virtual void print(){printf("This is A\n");}
};
class B:public A{
public:
virtual void print(){ printf("This is B\n");}
};


void a_print(A a)
{


unsigned int *p;


p = (unsigned int *)&a;


printf("%x, %x, %x, %x\n", p[0], p[1], p[2], p[3]);


a.print();

}


void b_print(B b)
{
b.print();
}


int show_array(char buffer[100])
{
char data[2][6] = {"12345", "67890"};


std::cout<<buffer[0]<<" "<<buffer[1]<<" "<<sizeof(buffer)<<" "<<strlen(buffer)<<std::endl;


std::cout<<&data<<" "<<(&data) + 1<<" "<<*((&data) + 1)<<std::endl;


return 1;
}


int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
A aa;

int c;


a.value = 0xeeeecccc;
b.value = 0xbbbbaaaa;
aa.value = 0x11112222;


a.print();
b.print();


a_print(a);


{
unsigned int *p;


p = (unsigned int *)&b;


printf("%x, %x, %x, %x\n", p[0], p[1], p[2], p[3]);
}


a_print(aa);


a_print(b);




b_print(b);


show_array("hello\n");






std::cin>>c;


std::cout<<c<<std::endl;

return 0;
}

测试结果如下:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值