对于纯虚函数:当派生类继承了基类的时候,如果派生类中没有写基类中的虚函数,则编译的时候不会出现什么错误,但是当写了基类中的虚函数的时候,却没有使用,则在编译过程中会出现一些链接方面的错误。
对于虚函数:当派生类继承了基类的时候,只要用派生类的对象来初始化基类就可以调用派生类里面的函数。
纯虚函数和虚函数的区别:区别体现在定义的时候,如果是纯虚函数,则在定义的时候对纯虚函数不会有什么实现,但是虚函数会在内部有所实现。
例如:虚函数:virtual int add(void) { a+b;}
纯虚函数:virtual int add();
下面是转载文章,原文作者申明如下:
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://ticktick.blog.51cto.com/823160/961418
疑问:什么情况下必须用虚析构?
- #include <iostream>
- class A
- {
- public:
- A(){};
- ~A()
- {
- std::cout << "~A" << std::endl;
- };
- private:
- int a;
- };
- class B : public A
- {
- public:
- B(){};
- ~B()
- {
- std::cout << "~B" << std::endl;
- }
- private:
- int b;
- };
- int main()
- {
- B b;
- return 0;
- }
- int main()
- {
- A *pb = new B();
- delete pb;
- return 0;
- }
- int main()
- {
- A * pa = new B();
- delete pa;
- return 0;
- }
- class A
- {
- public:
- A(){};
- ~A()
- {
- std::cout << "~A" << std::endl;
- };
- void test()
- {
- std::cout << "~test" << std::endl;
- }
- private:
- int a;
- };
- int main()
- {
- std::cout << sizeof(A) << std::endl;
- }