虛擬函式、純虛擬函式
阿新 • • 發佈:2019-02-14
對於純虛擬函式:當派生類繼承了基類的時候,如果派生類中沒有寫基類中的虛擬函式,則編譯的時候不會出現什麼錯誤,但是當寫了基類中的虛擬函式的時候,卻沒有使用,則在編譯過程中會出現一些連結方面的錯誤。
對於虛擬函式:當派生類繼承了基類的時候,只要用派生類的物件來初始化基類就可以呼叫派生類裡面的函式。
純虛擬函式和虛擬函式的區別:區別體現在定義的時候,如果是純虛擬函式,則在定義的時候對純虛擬函式不會有什麼實現,但是虛擬函式會在內部有所實現。
例如:虛擬函式:virtual int add(void) { a+b;}
純虛擬函式:virtual int add();
下面是轉載文章,原文作者申明如下:
疑問:什麼情況下必須用虛析構?
- #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"
- }
- 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;
- }