虚函数和虚析构函数在调用的处理上是不同的,虚析构函数是子调用父,层层调用,对于普通的虚函数,则是重载的方式,需要注意。下面的代码执行结果是:
derivedA say: hello virtual function!.
~finalA
~derivedA
~baseA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <errno.h> class baseA{ public: virtual ~baseA() { printf("~baseA\r\n"); }; virtual void sayHello(const char *str){ printf("baseA say: %s.\r\n", str); }; }; class derivedA : public baseA { public: virtual ~derivedA() { printf("~derivedA\r\n"); }; virtual void sayHello(const char *str){ printf("derivedA say: %s.\r\n", str); }; }; class finalA : public derivedA { public: ~finalA() { printf("~finalA\r\n"); }; void sayHello(const char *str){ printf("derivedA say: %s.\r\n", str); }; }; int main() { finalA *a = new finalA(); a->sayHello("hello virtual function!"); delete a; return 0; } |