目录
1、工具准备
工欲善其事必先利其器,类成员查看我们使用VS中的工具进行。
vs中用快捷键Alt+F7或者选择项目属性,选择C/C++命令行,如下图所示:
在其他选项中输入:
/d1 reportAllClassLayout (代表打印所有类的内存分布,你include的头文件里的类也会加入,会花费大量时间,不推荐使用)
/d1 reportSingleClassLayoutXXX (XXX为你想查看的类名,注意类名不要和库中的类名重名或者是其他类名的子串,不然会打印多个类)
然后再cpp文件中写自己想要查的类,然后ctrl+B快速生成,在vs控制台即可查看。
2、普通类
class A_______ {
int a;
char ch;
};
3、含有虚函数的类
class A_______ {
int a;
char ch;
virtual void vir_fun() {};
};
4、普通继承
class A_______ {
int a;
char ch;
// virtual void vir_fun() {};
};
class B_______ :public A_______ {
char ch;
int b;
};
5、父类含有虚函数的继承
class A_______ {
int a;
char ch;
virtual void vir_fun() {};
};
class B_______ :public A_______ {
char ch;
int b;
};
6、父类和子类都含有虚函数的继承
class A_______ {
int a;
char ch;
virtual void v_funA() {};
};
class B_______ :public A_______ {
char ch;
int b;
virtual void v_funB() {};
};
7、普通的多继承
class A_______ {
int a;
char ch;
};
class B_______ :public A_______ {
char ch;
int b;
};
class C_______ :public A_______ {
char ch;
int b;
};
class D_______ :public B_______,C_______ {
char ch;
int b;
};
8、父类含有虚函数的多继承
class A_______ {
int a;
char ch;
public:
virtual void v_funA() {};
};
class B_______ :public A_______ {
char ch;
int b;
void v_funA() {};
};
class C_______ :public A_______ {
char ch;
int b;
void v_funA() {};
};
class D_______ :public B_______,C_______ {
char ch;
int b;
};
9、普通的虚多继承
class A_______ {
int a;
char ch;
public:
//virtual void v_funA() {};
};
class B_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class C_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class D_______ :virtual public B_______,virtual public C_______ {
char ch;
int b;
};
10、父类含有虚函数的虚多继承
class A_______ {
int a;
char ch;
public:
virtual void v_funA() {};
};
class B_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class C_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class D_______ : virtual public B_______, virtual public C_______{
char ch;
int b;
void v_funA() {};
virtual void f();
};
11、既有虚继承又有普通继承
class A_______ {
int a;
char ch;
public:
virtual void v_funA() {};
};
class B_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class C_______ :virtual public A_______ {
char ch;
int b;
void v_funA() {};
};
class E_______ {
int a;
char ch;
public:
virtual void v_funA() {};
};
class D_______ : virtual public B_______, virtual public C_______, public E_______ {
char ch;
int b;
void v_funA() {};
virtual void f();
};
12、简单总结
类成员构造顺序:非虚基类,自身,虚基类
虚函数表:只要子类普通继承了一个父类,如果父类中有虚函数,子类和父类会公用一张虚函数表,对于虚继承,父类和子类的虚表各自一张。
......
(博文有错误的地方希望多多指出)