From 9d90e047fd5a5beff517417f90a2130591ffaece Mon Sep 17 00:00:00 2001 From: light-city <455954986@qq.com> Date: Sun, 21 Jul 2019 11:41:27 +0800 Subject: [PATCH] update dir --- README.md | 5 + abstract/README.md | 58 +++++ abstract/abstract.cpp | 31 +++ abstract/derived_full.cpp | 32 +++ abstract/interesting_facts1.cpp | 29 +++ abstract/interesting_facts2.cpp | 38 +++ abstract/interesting_facts3.cpp | 30 +++ abstract/interesting_facts4.cpp | 35 +++ abstract/interesting_facts5.cpp | 30 +++ abstract/pure_virtual.cpp | 29 +++ abstract/test.cpp | 23 ++ const/class_const/c++11_example/main | Bin 9656 -> 9656 bytes func_pointer/func1 | Bin 0 -> 9368 bytes func_pointer/func_pointer.cpp | 33 +++ inline/README.md | 88 +++++++ inline/inline | Bin 0 -> 9200 bytes inline/inline.cpp | 57 +++++ inline/inline.h | 19 ++ sizeof/README.md | 191 +++++++++++++++ sizeof/blackclass.cpp | 18 ++ sizeof/genA.cpp | 29 +++ sizeof/geninhe.cpp | 62 +++++ sizeof/moreinhe.cpp | 43 ++++ sizeof/morevir.cpp | 24 ++ sizeof/static.cpp | 33 +++ sizeof/virinhe.cpp | 38 +++ sizeof/virmoreinhe.cpp | 38 +++ virtual/set1/emp | Bin 0 -> 14464 bytes virtual/set1/emp.cpp | 52 +++++ vptr_vtable/img/base.jpg | Bin 0 -> 136050 bytes vptr_vtable/vptr1.cpp | 105 +++++++++ .../深入浅出C++虚函数的vptr与vtable.md | 219 ++++++++++++++++++ 32 files changed, 1389 insertions(+) create mode 100644 abstract/README.md create mode 100644 abstract/abstract.cpp create mode 100644 abstract/derived_full.cpp create mode 100644 abstract/interesting_facts1.cpp create mode 100644 abstract/interesting_facts2.cpp create mode 100644 abstract/interesting_facts3.cpp create mode 100644 abstract/interesting_facts4.cpp create mode 100644 abstract/interesting_facts5.cpp create mode 100644 abstract/pure_virtual.cpp create mode 100644 abstract/test.cpp create mode 100755 func_pointer/func1 create mode 100644 func_pointer/func_pointer.cpp create mode 100644 inline/README.md create mode 100755 inline/inline create mode 100644 inline/inline.cpp create mode 100644 inline/inline.h create mode 100644 sizeof/README.md create mode 100644 sizeof/blackclass.cpp create mode 100644 sizeof/genA.cpp create mode 100644 sizeof/geninhe.cpp create mode 100644 sizeof/moreinhe.cpp create mode 100644 sizeof/morevir.cpp create mode 100644 sizeof/static.cpp create mode 100644 sizeof/virinhe.cpp create mode 100644 sizeof/virmoreinhe.cpp create mode 100755 virtual/set1/emp create mode 100644 virtual/set1/emp.cpp create mode 100644 vptr_vtable/img/base.jpg create mode 100644 vptr_vtable/vptr1.cpp create mode 100644 vptr_vtable/深入浅出C++虚函数的vptr与vtable.md diff --git a/README.md b/README.md index cda2cba..bde6487 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,11 @@ - [x] [const那些事](./const) - [x] [static那些事](./static) - [x] [this那些事](./this) +- [x] [inline那些事](./inline) +- [x] [sizeof那些事](./sizeof) +- [x] [函数指针那些事](./func_pointer) +- [x] [纯虚函数和抽象类那些事](./abstract) +- [x] [vptr_vtable那些事](./vptr_vtable) ## 关于作者: diff --git a/abstract/README.md b/abstract/README.md new file mode 100644 index 0000000..5629dc1 --- /dev/null +++ b/abstract/README.md @@ -0,0 +1,58 @@ +# 纯虚函数和抽象类 + +## 关于作者: + +个人公众号: + +![](../img/wechat.jpg) + +## 1.纯虚函数与抽象类 + +C++中的纯虚函数(或抽象函数)是我们没有实现的虚函数!我们只需声明它!通过声明中赋值0来声明纯虚函数! + +对应的代码:[test.cpp](./test.cpp) + + * 纯虚函数:没有函数体的虚函数 + * 抽象类:包含纯虚函数的类 + +对应的代码:[pure_virtual.cpp](./pure_virtual.cpp) + +抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,抽象类的指针和引用->由抽象类派生出来的类的对象! + +## 2.实现抽象类 + +抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数。 + +如果一个类从抽象类派生而来,它必须实现了基类中的所有纯虚函数,才能成为非抽象类。 + +对应的代码:[abstract.cpp](./abstract.cpp) + +## 3.重要点 + +- 纯虚函数使一个类变成抽象类 + +对应的代码:[interesting_facts1.cpp](./interesting_facts1.cpp) + +- 抽象类类型的指针和引用 + +对应的代码:[interesting_facts2.cpp](./interesting_facts2.cpp) + +- 如果我们不在派生类中覆盖纯虚函数,那么派生类也会变成抽象类。 + +对应的代码:[interesting_facts3.cpp](./interesting_facts3.cpp) + +- 抽象类可以有构造函数 + +对应的代码:[interesting_facts4.cpp](./interesting_facts4.cpp) + +- 构造函数不能是虚函数,而析构函数可以是虚析构函数。 + +对应的代码:[interesting_facts5.cpp](./interesting_facts5.cpp) + +当基类指针指向派生类对象并删除对象时,我们可能希望调用适当的析构函数。如果析构函数不是虚拟的,则只能调用基类析构函数。 + +## 4.完整实例 + +抽象类由派生类继承实现! + +对应的代码:[derived_full.cpp](./derived_full.cpp) \ No newline at end of file diff --git a/abstract/abstract.cpp b/abstract/abstract.cpp new file mode 100644 index 0000000..61e6665 --- /dev/null +++ b/abstract/abstract.cpp @@ -0,0 +1,31 @@ +/** + * @file abstract.cpp + * @brief 抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数 + * 如果一个类从抽象类派生而来,它必须实现了基类中的所有纯虚函数,才能成为非抽象类 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + + + + +#include + + +using namespace std; +class A { +public: + virtual void f() = 0; + void g(){ this->f(); } + A(){} +}; +class B:public A{ +public: + void f(){ cout<<"B:f()"< +using namespace std; + +class Base +{ + int x; + public: + virtual void fun() = 0; + int getX() { return x; } +}; + +class Derived: public Base +{ + int y; + public: + void fun() { cout << "fun() called"; } ///< 实现了fun()函数 +}; + +int main(void) +{ + Derived d; + d.fun(); + return 0; +} diff --git a/abstract/interesting_facts1.cpp b/abstract/interesting_facts1.cpp new file mode 100644 index 0000000..c98690d --- /dev/null +++ b/abstract/interesting_facts1.cpp @@ -0,0 +1,29 @@ +/** + * @file interesting_facts1.cpp + * @brief 纯虚函数使一个类变成抽象类 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include +using namespace std; + + +/** + * @brief 抽象类至少包含一个纯虚函数 + */ +class Test +{ + int x; +public: + virtual void show() = 0; + int getX() { return x; } +}; + +int main(void) +{ + Test t; //error! 不能创建抽象类的对象 + return 0; +} + diff --git a/abstract/interesting_facts2.cpp b/abstract/interesting_facts2.cpp new file mode 100644 index 0000000..84d293e --- /dev/null +++ b/abstract/interesting_facts2.cpp @@ -0,0 +1,38 @@ +/** + * @file interesting_facts2.cpp + * @brief 抽象类类型的指针和引用 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include +using namespace std; + + +/** + * @brief 抽象类至少包含一个纯虚函数 + */ +class Base +{ + int x; +public: + virtual void show() = 0; + int getX() { return x; } + +}; +class Derived: public Base +{ +public: + void show() { cout << "In Derived \n"; } + Derived(){} +}; +int main(void) +{ + //Base b; //error! 不能创建抽象类的对象 + //Base *b = new Base(); error! + Base *bp = new Derived(); // 抽象类的指针和引用 -> 由抽象类派生出来的类的对象 + bp->show(); + return 0; +} + diff --git a/abstract/interesting_facts3.cpp b/abstract/interesting_facts3.cpp new file mode 100644 index 0000000..6ff352b --- /dev/null +++ b/abstract/interesting_facts3.cpp @@ -0,0 +1,30 @@ +/** + * @file interesting_facts3.cpp + * @brief 如果我们不在派生类中覆盖纯虚函数,那么派生类也会变成抽象类。 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include +using namespace std; + + +class Base +{ + int x; +public: + virtual void show() = 0; + int getX() { return x; } +}; +class Derived: public Base +{ +public: +// void show() { } +}; +int main(void) +{ + Derived d; //error! 派生类没有实现纯虚函数,那么派生类也会变为抽象类,不能创建抽象类的对象 + return 0; +} + diff --git a/abstract/interesting_facts4.cpp b/abstract/interesting_facts4.cpp new file mode 100644 index 0000000..028554b --- /dev/null +++ b/abstract/interesting_facts4.cpp @@ -0,0 +1,35 @@ +/** + * @file interesting_facts4.cpp + * @brief 抽象类可以有构造函数 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include +using namespace std; + +// An abstract class with constructor +class Base +{ + protected: + int x; + public: + virtual void fun() = 0; + Base(int i) { x = i; } +}; + +class Derived: public Base +{ + int y; + public: + Derived(int i, int j):Base(i) { y = j; } + void fun() { cout << "x = " << x << ", y = " << y; } +}; + +int main(void) +{ + Derived d(4, 5); + d.fun(); + return 0; +} diff --git a/abstract/interesting_facts5.cpp b/abstract/interesting_facts5.cpp new file mode 100644 index 0000000..e9152b9 --- /dev/null +++ b/abstract/interesting_facts5.cpp @@ -0,0 +1,30 @@ + +/** + * @file interesting_facts5.cpp + * @brief 构造函数不能是虚函数,而析构函数可以是虚析构函数。 + * 例如:当基类指针指向派生类对象并删除对象时,我们可能希望调用适当的析构函数。如果析构函数不是虚拟的,则只能调用基类析构函数。 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ +#include +using namespace std; + +class Base { + public: + Base() { cout << "Constructor: Base" << endl; } + virtual ~Base() { cout << "Destructor : Base" << endl; } +}; + +class Derived: public Base { + public: + Derived() { cout << "Constructor: Derived" << endl; } + ~Derived() { cout << "Destructor : Derived" << endl; } +}; + +int main() { + Base *Var = new Derived(); + delete Var; + return 0; +} + diff --git a/abstract/pure_virtual.cpp b/abstract/pure_virtual.cpp new file mode 100644 index 0000000..ab552d4 --- /dev/null +++ b/abstract/pure_virtual.cpp @@ -0,0 +1,29 @@ +/** + * @file pure_virtual.cpp + * @brief 纯虚函数:没有函数体的虚函数 + * 抽象类:包含纯虚函数的类 + * + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include + +using namespace std; +class A +{ +private: + int a; +public: + virtual void show()=0; //< 纯虚函数 +}; + + +int main() +{ + // 抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,抽象类的指针和引用->由抽象类派生出来的类的对象! +// A a; // error 抽象类,不能创建对象 + A *a1; // ok 可以定义抽象类的指针 +// A *a2 = new A; // error,A是抽象类,不能创建对象 +} diff --git a/abstract/test.cpp b/abstract/test.cpp new file mode 100644 index 0000000..7797c90 --- /dev/null +++ b/abstract/test.cpp @@ -0,0 +1,23 @@ +/** + * @file test.cpp + * @brief C++中的纯虚函数(或抽象函数)是我们没有实现的虚函数!我们只需声明它!通过声明中赋值0来声明纯虚函数! + * 纯虚函数:没有函数体的虚函数 + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + + + +/** + * @brief 抽象类 + */ +class Test +{ + // Data members of class +public: + // Pure Virtual Function + virtual void show() = 0; + + /* Other members */ +}; diff --git a/const/class_const/c++11_example/main b/const/class_const/c++11_example/main index f15e6888b550ad20f7a8cf03b641d5c03bfcb176..62017da688b455919b4730dc329a7da50fc82409 100755 GIT binary patch delta 885 zcmYjQT}V@582&zwxt(nuw=vxWVNMaLQ3V(&#is zt~Vm13va^eLd6ML$mSFr-8rIi7<8n>b79~`gjRNX&vs0|i|;w_^S#gW{=k`SooyXi zW@idX_RK^x2}{VB3qnR;_9Fx@>8ed?9KX3x_kN}6^RbJQ;`N=%XPNxilf3(fiaIcl zPbDRT3aK=B^%BR2o3~SgBa{#WdVqyJS92ND5`$)e$aQ}eg%=mX%|FB?Ui>7l>?%rp zONVkXB{#q$wsJt#hqL;3i(S09&fnhjF@yy9aDG({I`U%kws)S74A1{TZC;j1$vOp% zbDV1R6hm<-SF`(IjW-zVY1RJJ^oBA9Kw*0BIgN0{5}3|zo_`T{DHPe zRRL2@y7u`$Fpcy4T_Hbl~b4T3eK9GbOLVRJq@EKr)wD%ZhZN#2<|JsA)SE?=Jvr3-a}AY zm|!KnPt7NDK)H4rh;?!)26yYV7BgldAlhjt8(E1I>$QHNGzfm1hu(sIo1M;qXgfux zAdPnjN{h#72PBIx(W~Gpv7=3W$v72Yt>gifpx@q3%OGiQq$hzoJnRcLSJ@5q4v#xK zC-&jYC&WrPQlY(8s?Fi?XnZ;rb?8{y1fwnw8_<4`0Hj^Dte`~#SSo7S{hy~3BT0Lc JV$q6f<{z?}L45!K delta 839 zcmYk5Ur1A77{B_5&FgnU; z|Y(>mcEMk^$;Y*CB`6rj;@{byq?fveL>(cj)mHExd>%P?eve8|8n$aib zbBb9_GLG>}RT%5U_h@6d_iO5={Cvv(o-f+NB!+ON{!9(DwsQe=;zw2yT5pS=V z#N3uaZ6~{BAnJf&8XgLG7krBJOW-WXV6K8SpcP@m;7L#d2f$%)A67pC&(SN(5#CJP z8sISsS{r@yaJ0jTMeL3{Wyfs0qgJB{<$iqh>%O2NtCuS@f%hyuvwD4BFj0?_{}a92 z6JH^((l7MhplX|!C#ltzCB;@FESbXk44Woy@8Y3Uw>@v*AqqMx4GtCtJ$fKiPNt+T zIX`oLoFc9Ozea;D51%I4)y@;Nh&TwsBICp{|?=#l+u}!O4c?S{sNQAFSY;x diff --git a/func_pointer/func1 b/func_pointer/func1 new file mode 100755 index 0000000000000000000000000000000000000000..0849a185e9b02b79ca1986382422ce9b6cc00cb4 GIT binary patch literal 9368 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 QZC0*+uQGVfrnJ}pFPw$%F8}}l literal 0 HcmV?d00001 diff --git a/func_pointer/func_pointer.cpp b/func_pointer/func_pointer.cpp new file mode 100644 index 0000000..60f8bb9 --- /dev/null +++ b/func_pointer/func_pointer.cpp @@ -0,0 +1,33 @@ +/** + * @file func_pointer.cpp + * @brief 函数指针的使用! + * @author 光城 + * @version v1 + * @date 2019-07-20 + */ + +#include +using namespace std; + +/** + * @brief 定义了一个变量pFun,这个变量是个指针,指向返回值和参数都是空的函数的指针! + */ +void (*pFun)(int); + +/** + * @brief 代表一种新类型,不是变量!所以与上述的pFun不一样! + */ +typedef void (*func)(void); + +void myfunc(void) +{ + cout<<"asda"< +#include "inline.h" + +using namespace std; + +/** + * @brief inline要起作用,inline要与函数定义放在一起,inline是一种“用于实现的关键字,而不是用于声明的关键字” + * + * @param x + * @param y + * + * @return + */ +int Foo(int x,int y); // 函数声明 +inline int Foo(int x,int y) // 函数定义 +{ + return x+y; +} + +// 定义处加inline关键字,推荐这种写法! +inline void A::f1(int x){ + +} + +int main() +{ + + + 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 literal 0 HcmV?d00001 diff --git a/inline/inline.cpp b/inline/inline.cpp new file mode 100644 index 0000000..5b1463b --- /dev/null +++ b/inline/inline.cpp @@ -0,0 +1,57 @@ +#include +#include "inline.h" + + + +using namespace std; + +/** + * @brief inline要起作用,inline要与函数定义放在一起,inline是一种“用于实现的关键字,而不是用于声明的关键字” + * + * @param x + * @param y + * + * @return + */ +int Foo(int x,int y); // 函数声明 +inline int Foo(int x,int y) // 函数定义 +{ + return x+y; +} + + + +// 定义处加inline关键字,推荐这种写法! +inline void A::f1(int x){ + + +} + + + +/** + * @brief 内联能提高函数效率,但并不是所有的函数都定义成内联函数!内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。 + * 如果执行函数体内代码的时间相比于函数调用的开销较大,那么效率的收货会更少!另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。 + * 以下情况不宜用内联: + * (1) 如果函数体内的代码比较长,使得内联将导致内存消耗代价比较高。 + * (2) 如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。 + * + * @return + */ +int main() +{ + + + cout< +using namespace std; +class A{}; +int main() +{ + cout< +using namespace std; +class A +{ + public: + char b; + virtual void fun() {}; + static int c; + static int d; + static int f; +}; + +int main() +{ + /** + * @brief 16 字节对齐、静态变量不影响类的大小、vptr指针=8 + */ + cout< +using namespace std; +class A{ + virtual void fun(); + virtual void fun1(); + virtual void fun2(); + virtual void fun3(); +}; +int main() +{ + cout< + +using namespace std; + +class A +{ + public: + char a; + int b; +}; + +/** + * @brief 此时B按照顺序: + * char a + * int b + * short a + * long b + * 根据字节对齐4+4=8+8+8=24 + */ +class B:A +{ + public: + short a; + long b; +}; +class C +{ + A a; + char c; +}; +class A1 +{ + virtual void fun(){} +}; +class C1:public A +{ +}; + +int main() +{ + cout< +using namespace std; +class A +{ + virtual void fun() {} +}; +class B +{ + virtual void fun2() {} +}; +class C : virtual public A, virtual public B +{ + public: + virtual void fun3() {} +}; + +int main() +{ + /** + * @brief 8 8 16 派生类虚继承多个虚函数,会继承所有虚函数的vptr + */ + cout< + +using namespace std; + +class A{}; +int main() +{ + cout< + + +using namespace std; + +class A +{ + public: + A(); + ~A(); + static int a; + static void fun3(); + void fun(); + void fun1(); +}; + +int main() +{ + cout< + +using namespace std; + +class A +{ + public: + char a; + int b; +}; + +/** + * @brief 此时B按照顺序: + * char a + * int b + * short a + * long b + * 根据字节对齐4+4=8+8+8=24 + */ +class B:A +{ + public: + short a; + long b; +}; +class C +{ + A a; + char c; +}; + +class A1 +{ + virtual void fun(){} +}; +class C1:public A +{ +}; + + +int main() +{ + cout< + +using namespace std; + +class A +{ + public: + char a; + int b; +}; + +class B +{ + public: + short a; + long b; +}; + +/** + * @brief 8+16+8=32 + */ +class C:A,B +{ + char c; +}; + + +int main() +{ + cout< + +using namespace std; + +class A{ + + virtual void fun(); + virtual void fun1(); + virtual void fun2(); + virtual void fun3(); +}; +int main() +{ + cout< +using namespace std; +class A +{ + public: + char b; + virtual void fun() {}; + static int c; + static int d; + static int f; +}; + + + +int main() +{ + + /** + * @brief 16 字节对齐、静态变量不影响类的大小、vptr指针=8 + */ + cout< + +using namespace std; + +class A +{ + virtual void fun() {} +}; + +class B +{ + virtual void fun2() {} +}; +class C : virtual public A, virtual public B +{ + public: + virtual void fun3() {} +}; + + +int main() +{ + + /** + * @brief 8 8 16 派生类虚继承多个虚函数,会继承所有虚函数的vptr + */ + cout< + +using namespace std; + +class A +{ + virtual void fun() {} +}; + +class B +{ + virtual void fun2() {} +}; +class C : public A, public B +{ + public: + virtual void fun3() {} +}; + + +int main() +{ + + /** + * @brief 8 8 16 派生类继承多个虚函数,会继承所有虚函数的vptr + */ + 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

~~bC(%AqPQcOLZGjZLb7%$ zAp*n=#PS0okT{xwJ&T$-t7SNu%VQy|U<|b7lIa*JsM=846ajgi1E>a$WWgfm6yLO9 zLnteU7f24MC3+wMBg|Q<)>>_8aQ%qROX$AWM_Kvv!Nw+2iCKb>mx$^!Q@2@FX972VD1F$~tbI|W$Dw7l(6xwg2 zD(my_mHUC=r(Q{)_d{d`C~)47Lsb@Kj#=>_YP1)|{qw%bR<*&mT}k5Si7YI~^dX?M zx5m7-RFiU=(vM2c@}Febe+3JAAEubH{z;{O(xK1&vp$dixYBQCgUd9lrZx!AE1dL6 z$Ep8iU=$P8U1?wEywc}=Qi#YxzS>I>j9tI9|D!rOX%|MF-;bDn&7sfxL?@L#`^#pW z{L>D7ejj~734Wg@hplkG4E;4KcK`W3F`+h?`8|^5o#TH_>GSpD_p~9U{{|~6>h%A6 z4t?Io;=jM4_}GiH|I=tB|G9tO?>etG#2@7bWyIP4Pl0>!;V|+30{=aZGhR-8%IaNh z)93xO+N}UlobpcoB4o&a?w|Lmd>>Q)SJ0)o%lf>Z%zrO+fsCW@{O107T$5 +using namespace std; + + +class Employee +{ + public: + virtual void raiseSalary() + { + cout<<0<raiseSalary(); // Polymorphic Call: Calls raiseSalary() + // according to the actual object, not + // according to the type of pointer +} +int main(){ + Employee *emp[]={new Manager(),new Engineer}; + globalRaiseSalary(emp,2); + return 0; +} diff --git a/vptr_vtable/img/base.jpg b/vptr_vtable/img/base.jpg new file mode 100644 index 0000000000000000000000000000000000000000..669f2a053c32663bb767dd3cbe2cfdc21463f661 GIT binary patch literal 136050 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 QwxG;`WBX%%x^Vq}0ox`K +#include +using namespace std; + +/** + * @brief 函数指针 + */ +typedef void (*Fun)(); + + +/** + * @brief 基类 + */ +class Base +{ + public: + Base(){}; + virtual void fun1() + { + cout << "Base::fun1()" << endl; + } + virtual void fun2() + { + cout << "Base::fun2()" << endl; + } + virtual void fun3(){} + ~Base(){}; +}; + + +/** + * @brief 派生类 + */ +class Derived: public Base +{ + public: + Derived(){}; + void fun1() + { + cout << "Derived::fun1()" << endl; + } + void fun2() + { + cout << "DerivedClass::fun2()" << endl; + } + ~Derived(){}; +}; + +/** + * @brief 获取vptr地址与func地址,vptr指向的是一块内存,这块内存存放的是虚函数地址,这块内存就是我们所说的虚表 + * + * @param obj + * @param offset + * + * @return + */ +Fun getAddr(void* obj,unsigned int offset) +{ + cout<<"======================="<fun1(); + cout<<"基类引用指向基类实例并调用虚函数"< +#include +using namespace std; + +/** + * @brief 函数指针 + */ +typedef void (*Fun)(); + +/** + * @brief 基类 + */ +class Base +{ + public: + Base(){}; + virtual void fun1() + { + cout << "Base::fun1()" << endl; + } + virtual void fun2() + { + cout << "Base::fun2()" << endl; + } + virtual void fun3(){} + ~Base(){}; +}; + +/** + * @brief 派生类 + */ +class Derived: public Base +{ + public: + Derived(){}; + void fun1() + { + cout << "Derived::fun1()" << endl; + } + void fun2() + { + cout << "DerivedClass::fun2()" << endl; + } + ~Derived(){}; +}; +/** + * @brief 获取vptr地址与func地址,vptr指向的是一块内存,这块内存存放的是虚函数地址,这块内存就是我们所说的虚表 + * + * @param obj + * @param offset + * + * @return + */ +Fun getAddr(void* obj,unsigned int offset) +{ + cout<<"======================="<fun1(); + cout<<"基类引用指向基类实例并调用虚函数"<fun1(); +``` + +其过程为:首先程序识别出fun1()是个虚函数,其次程序使用pt->vptr来获取Derived的虚拟表。第三,它查找Derived虚拟表中调用哪个版本的fun1()。这里就可以发现调用的是Derived::fun1()。因此pt->fun1()被解析为Derived::fun1()! + +除此之外,上述代码大家会看到,也包含了手动获取vptr地址,并调用vtable中的函数,那么我们一起来验证一下上述的地址与真正在自动调用vtable中的虚函数,比如上述`pt->fun1()`的时候,是否一致! + +这里采用gdb调试,在编译的时候记得加上`-g`。 + +通过`gdb vptr`进入gdb调试页面,然后输入`b Derived::fun1`对fun1打断点,然后通过输入r运行程序到断点处,此时我们需要查看调用栈中的内存地址,通过`disassemable fun1`可以查看当前有关fun1中的相关汇编代码,我们看到了`0x0000000000400ea8`,然后再对比上述的结果会发现与手动调用的fun1一致,fun2类似,以此证明代码正确! + +gdb调试信息如下: + +```c++ +(gdb) b Derived::fun1 +Breakpoint 1 at 0x400eb4: file vptr1.cpp, line 23. +(gdb) r +Starting program: /home/light/Program/CPlusPlusThings/virtual/pure_virtualAndabstract_class/vptr +基类对象直接调用 +Base::fun1() +基类引用指向派生类实例 +Base::fun1() +基类指针指向派生类实例并调用虚函数 + +Breakpoint 1, Derived::fun1 (this=0x614c20) at vptr1.cpp:23 +23 cout << "Derived::fun1()" << endl; +(gdb) disassemble fun1 +Dump of assembler code for function Derived::fun1(): + 0x0000000000400ea8 <+0>: push %rbp + 0x0000000000400ea9 <+1>: mov %rsp,%rbp + 0x0000000000400eac <+4>: sub $0x10,%rsp + 0x0000000000400eb0 <+8>: mov %rdi,-0x8(%rbp) +=> 0x0000000000400eb4 <+12>: mov $0x401013,%esi + 0x0000000000400eb9 <+17>: mov $0x602100,%edi + 0x0000000000400ebe <+22>: callq 0x4009d0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> + 0x0000000000400ec3 <+27>: mov $0x400a00,%esi + 0x0000000000400ec8 <+32>: mov %rax,%rdi + 0x0000000000400ecb <+35>: callq 0x4009f0 <_ZNSolsEPFRSoS_E@plt> + 0x0000000000400ed0 <+40>: nop + 0x0000000000400ed1 <+41>: leaveq + 0x0000000000400ed2 <+42>: retq +End of assembler dump. +(gdb) disassemble fun2 +Dump of assembler code for function Derived::fun2(): + 0x0000000000400ed4 <+0>: push %rbp + 0x0000000000400ed5 <+1>: mov %rsp,%rbp + 0x0000000000400ed8 <+4>: sub $0x10,%rsp + 0x0000000000400edc <+8>: mov %rdi,-0x8(%rbp) + 0x0000000000400ee0 <+12>: mov $0x401023,%esi + 0x0000000000400ee5 <+17>: mov $0x602100,%edi + 0x0000000000400eea <+22>: callq 0x4009d0 <_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@plt> + 0x0000000000400eef <+27>: mov $0x400a00,%esi + 0x0000000000400ef4 <+32>: mov %rax,%rdi + 0x0000000000400ef7 <+35>: callq 0x4009f0 <_ZNSolsEPFRSoS_E@plt> + 0x0000000000400efc <+40>: nop + 0x0000000000400efd <+41>: leaveq + 0x0000000000400efe <+42>: retq +End of assembler dump. +``` +