[英]In C++ when we make a function pure virtual in base class then what is the necessity of making the same function virtual again in child class
[英]What is the difference between virtual function and pure virtual function in C++ in when both not defined in base class?
因為我添加了一個條件“當兩者都未在基類中定義時”,所以不會重復此問題。 如果在基類C中,我聲明virtual void display();
而且它從未在類C中定義,它是一個虛函數。 我對嗎? 如果我發表這樣的聲明:“ virtual void display()= 0;” 它是一個純虛函數。 因此,在兩種情況下,派生類都必須定義顯示函數。 那么為什么我們需要純虛函數呢? 或我的陳述中有什么問題?
因此,在兩種情況下,派生類都必須定義顯示功能
不正確 只有純虛函數才能被派生類覆蓋,以使該派生類具體化。
那么為什么我們需要純虛函數呢?
指定類型為abstract ,以防止其實例化。
如果C ++中的虛函數和純虛函數都沒有在基類中定義,則有什么區別?
如前所述,純虛函數是使類抽象的東西。
通過聲明一個函數,您保證將有一個定義。 如果沒有定義,則程序格式錯誤。 純虛函數是例外,因為並非必須定義它們(但您可以)。 簡而言之,沒有定義的非純虛擬是一個錯誤。
“純虛擬方法”只是方法的名稱,在聲明它的類中沒有定義。 您必須這樣聲明一個純虛擬方法,以避免鏈接器錯誤。 考慮以下簡單示例:
/* abstract classes */
struct Broken { virtual void foo(); };
struct Fixed { virtual void foo()=0; };
/* implementations */
struct A : Broken { void foo(){} };
struct B : Fixed { void foo(){} };
int main() {
//Broken* a = new A(); delete a; // (*)
Fixed* a = new B(); delete a;
return 0;
}
(*)創建一個鏈接器錯誤(即使所創建的對象具有foo()
定義)。 要告訴編譯器該方法是純虛擬方法,必須將=0;
設置=0;
。
[...]為什么必須在基類中定義非純虛函數?
那就是它的定義方式。 有一些東西:基類中沒有定義的方法。 我們給它起一個名字:純虛方法。 爭論為什么純虛函數在基類中沒有定義,或者是否允許非純虛方法在基類中沒有定義,這是沒有道理的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.