關於c派生類中虛擬函式的問題,C 已經在派生類中重定義了抽象類中的純虛擬函式,為什麼還不讓我用派生類定義物件!?

2021-03-10 22:42:38 字數 1928 閱讀 8223

1樓:匿名使用者

如果是虛擬函式的話,在派生類中重新定義其函式體時,不會導致同名覆蓋.當用基類指標指向派生類物件並呼叫虛擬函式時,執行的是在派生類中重新定義的虛擬函式的函式體.

2樓:匿名使用者

虛擬函式必須要在基類用virtual修飾才能為虛擬函式,派生類若重定義該函專數,則無論是否有屬virtual關鍵字都是虛擬函式。你要判斷派生類中沒有用virtual定義的函式是否為虛擬函式,則可以:在該函式標誌特定的輸出,如cout<<"virtual function!

";然後定義一個基類的指標bp,指向新new的派生類物件,然後用bp呼叫所需判斷的函式,看是否有輸出特定的標誌virtual function!,如果正確輸出則說明是虛擬函式,其他情況則表明該函式不是虛擬函式。

3樓:匿名使用者

一旦一個函式被宣告為虛擬函式,那麼他從該點之後的繼承層次結構中都是虛擬函式,不管它在有

版沒有再次聲

權明是不是虛擬函式,有些程式設計師為了提高程式的清晰度,在繼承結構中喜歡再次明確的宣告這些虛擬函式.

至於「判定覆蓋的依據是兩者都是虛擬函式,發生在派生類與基類之間。」只是解釋了什麼是覆蓋,派生類將基類中的虛擬函式重寫即為覆蓋。

4樓:匿名使用者

想用虛擬函式是:基類、父類都要定義成virtual型別的

5樓:檀木妍

比如b是一個派生類,f是b裡面一個函式。

先去b的基類裡找,如果發現f原來在某個基類中有的專,看基類中f是不是虛函屬

數,如果是,那不管b中f有沒有virtual都是虛擬函式。

如果在基類中沒有發現f的原型,則就看b中f自己有沒有virtual了,有就是,沒有就不是。

6樓:匿名使用者

虛幻數必須要用上virtual!!你那本書喜歡玩文字遊戲!!是不是出自 天回 朝 的?!試試下面**,你就

答能領悟如何判斷是否用了虛幻數:

//虛擬函式的特性如下!!

#include "stdafx.h"

#include

using namespace std;

class a

};class b: public a};//由於此處引數定義的原因,show(b);效果與(*aa).a();一樣。

void show(a &a)

void main()

c++:已經在派生類中重定義了抽象類中的純虛擬函式,為什麼還不讓我用派生類定義物件!?

7樓:匿名使用者

抽象類中的純虛擬函式為:void printarea() const但是派生類中的虛擬函式為:void printarea(circle &) const、void printarea(rectangle &) const、void printarea(******** &) const

這些派生類中的函式與抽象類中純虛擬函式只是重名,但是並不是一樣的引數,當然編譯程式並不認為派生類中重寫了這個純虛擬函式

更何況你的main函式中呼叫的都是這個純虛擬函式改的方法有很多,一種是去掉所有派生類的引數,派生類實現該函式時,就只有this可以操縱了

c++:派生類中重定義基類的成員函式與虛擬函式區別在**?

8樓:匿名使用者

1、c++的虛擬函式主要是為了實現多型。基類定義的虛擬函式,派生類重新定義該函式,這樣基類物件指標呼叫哪一個函式是判斷該基類指標的物件的型別。

2、虛擬函式用virtual關鍵字修飾,同時開啟動態聯編技術,動態聯編只有程式執行時才能確定呼叫的函式,在編譯階段是不知道要呼叫哪一個函式。

9樓:匿名使用者

如果加關鍵字 virtual,則是 override;

如果不加關鍵字 virtual,則跟作用域有關,基類與派生類的成員函式作用域不相同。

C 中如何定義派生類?舉例說明

public公有繼承 protected保護繼承 private私有繼承 我們知道類的private和protected成員,在類外是不可以使用的.只有public成員可以在類外直接使用.公有繼承時,基類的private成員派生類也不可用,基類的public和protected成員在派生類中可直接使...

C中,派生類的成員函式呼叫基類的受保護成員

不是很來清楚你的意圖 自 但是在c 中派生類的成員函式bai 是可以直接呼叫基類du的zhi受dao保護成員的。set staff modification 傳一個基類的引用,就可以在set中直接修改資料,而不是修改拷貝了。但是在基類中,你得把部門,名字,考勤情況等設定為protected.發上來看...

c中父類中虛擬函式要全部繼承嗎,C中父類的虛擬函式必須要實現嗎

全部繼承是什麼意思?繼承了這個類,這個類的方法當然全部有的?你是不是想問是不是應該子類全部實現它的虛擬函式?不用的 只要不是純虛擬函式就可以不用實現,直接用父類的就可以的 c 中父類的虛擬函式必須要實現嗎 虛擬函式是自帶實現的,因此派生類中可以選擇實現自己的,也可以直接使用基版類的。但是純虛擬函式一...