虛擬函式是c 實現物件操作靜態束定的機制正確嗎?

2025-05-31 14:10:08 字數 1132 閱讀 6410

1樓:網友

我認識是對的。動態繫結的概念是在執行時(runtime),具體資料繫結到相應記憶體位址空間。虛擬函式的呼叫其目的就是讓使用者(呼叫者)重寫其函式,在不同的運用場禪租景表現出多型性。

即編譯時,我們無法得知具體的函讓襲讓數行為(靜態),執行時,按照使用者要求此虛擬函式引坦局用到重寫的「實」函式(動態)。

在c++中,要實現動態繫結,必須使用( )呼叫虛擬函式

2樓:po老師**答疑

在c++中,要實現動態繫結,必須使用基類指標呼叫虛擬函式。

基類指標和派生類指標的使用總結。

基類指標指向基類物件(正常使用);

派生類指標指向派生類物件(正常使用,不管是不是虛擬函式,呼叫的都是派生類的函式);

基類指標指向派生類物件(多型的體現,虛擬函式的話呼叫的是派生類的,非虛擬函式的話呼叫的是基類的);

派生類指標指向基類物件(一般不要這麼用)。

動態繫結的簡介。

動態繫結即動態聯編,它是指乙個電腦程式自身彼此關聯的過程。按照聯編所進行的階段不同,可分為兩種不同的聯編方法:

靜態聯編;動態聯編。

編譯程式在編譯階段並不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,為此要確切知道該呼叫的函式,要求聯編工作要在程式執行時進行,這種在程式執行時進行聯編工作被稱為動態聯編,或稱動態束定,又叫晚期聯編。c++規定動態聯編是在虛擬函式的支援下實現的。

建構函式,靜態函式可不可以為虛擬函式

3樓:手機使用者

答案是否定的。

我們從以下兩個方面進行分析:

1.技術方面1)建構函式:虛擬函式的實現依靠的是類物件中的虛擬函式指標,但是當呼叫建構函式呼叫的時候,物件還沒有產生,無從談起虛指標的存在。

2)靜態函式:靜態函式的呼叫不傳遞this指標,也就無法獲取虛擬函式表對虛靜態函式呼叫。

2.存在意義建構函式:虛擬函式呼叫是一種能夠在給定資訊不完全的情況下工作的機制。

特別地,虛擬函式機制允許我們呼叫某個函式,對於這個函式,僅僅知道它的介面,而不知道具體的物件型別。但是要建立乙個物件,你必須擁有完全的資訊。特別地,你需要知道要建立的物件的具體型別。

因此,對建構函式的呼叫不能是虛擬的。

C 的虛擬函式有什麼用呢,C 中虛擬函式的作用是什麼?它應該怎麼用呢?

主要用在繼承抄與多型上 比如有一個襲汽車類,它有bai一個虛du函式alarm 就是鳴笛的聲zhi 音。汽車類有很多子 dao類,比如卡車類,小轎車類,他們的鳴笛聲音都一樣,所以只需繼承汽車類,不用在每個類裡重寫這個函式。現在如果新增一個卡丁車類,它的鳴笛聲音和其他類都不一樣,那就可以在這個類裡重寫...

c 中解構函式中可以呼叫虛擬函式麼

c 中 解構函式中不可以呼叫虛擬函式。effective c 中有這樣的描述 同樣的原因也適用於析構過程。一旦派生類解構函式執行,這個物件的派生類資料成員就被視為未定義的值,所以 c 就將它們視為不再存在。c 中派生類在構造時會先呼叫基類的建構函式再呼叫派生類的建構函式,析構時則相反,先呼叫派生類的...

c虛擬函式如何調父類而非子類

1,如果以一個基礎類指標指向一個衍生類物件 派生類物件 那麼經由該指標只能訪問基礎類定義的函式 靜態聯翩 2,如果以一個衍生類指標指向一個基礎類物件,必須先做強制轉型動作 explicit cast 這種做法很危險,也不符合生活習慣,在程式設計上也會給程式設計師帶來困擾。一般不會這麼去定義 3,如果...