虚函数继承过来还是虚函数,具体请看
#include <IOSTREAM.H>
//基类
class CBase
{
int x;
public:
CBase(int n) {x=n;}
~CBase(){}
virtual void SetX(int n) {x=n;}
virtual int GetX() {return x;}
};
//派生类
class CDerive : public CBase
{
int x;
public:
CDerive(int n1,int n2):CBase(n1)
{
x=n2;
}
~CDerive() {}
void SetX(int n) {x=n;}
int GetX() {return x;}
};我想问的是继承的话应该把父类的函数继承过来啊。
那么这里CDerive实际上有两个SetX么,一个自己的一个基类的?
那自己的这个SetX是虚函数么?
虚函数表我好像搞清楚了,忽然又在这迷糊了。。。
难道我应该这样假设,c++会有一种机制自动把和虚函数同名的函数放在虚函数表中?
我放在虚函数表中的应该是CDerive里的SetX是么?
有点迷糊 大神指点
相关推荐
C++第二讲关键语法
C++第二讲关键语法,相当好的东西,值得参考!
虚函数和虚继承及其在内存中布局
该资源为虚函数和虚继承及其结合的内存布局的测试,文中写明了有详细测试结果。
(转)多重继承下的虚函数表
多态是C++语言中的一项重要的机制,虚函数就是为实现多态而设计的。多态就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”。而虚函数表在这种多态机制中起了核心调度的作用。由于是编译器在后台操作,所以它被蒙上了一层神秘的面纱。 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为VFTable。 在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,VFTable就显得尤为重要了,它就像一个地图一样,指明了实际所应该调用的函数。在C++的标准中提到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置。 这意味着我们通过对象实例的地址得到它的VFTable,然后就可以遍历其中函数指针,并调用相应的函数。
c++ 虚函数与纯虚函数的区别(深入分析)
本篇文章是对c++中虚函数与纯虚函数的区别进行了详细的分析介绍,需要的朋友参考下
C++类的虚函数虚继承所占的空间
char占用一个字节, 但不满足4的倍数时, 会进行数据对齐, 使用4的倍数的字节(byte). GCC: GCC中, 无论是虚函数还是虚继承, 都需要将指针存储在虚函数表(virtual function table), 占用4个字节. 继承会继承基类的数据, 和虚函数表, 即继承基类的空间. 代码: /* * test.cpp * * Created on: 2014.04.20 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <iostream> using namespa



