c 中virtual是是啥意思

2021-05-05 18:50:56 字數 5376 閱讀 6984

1樓:巴黎下雪天_晴

virtual出現在程式中:

virtual 如果出現在函式名前表示虛函式,出現在類的繼承關係中加在基類名前表示虛基類。

2樓:愛裸睡的貓咪

舉個例子就明白了:

class a

同樣是 p->fun();但結果不一樣。

好吧,寫著寫著,感覺寫多了。

通俗的說,就是基類做出來,讓子類繼承,並且可以在子類改寫。

你可能會問,為何不直接在子類中寫乙個函式不是更快。

上面的例子就是乙個很好的說明(臨時寫的,寫的不怎麼樣),只用了乙個指標就把兩個函式都呼叫了。

再舉個例子,就比如從 員工類 y 中派生了 經理類 j,服務員類 f,保安類 b。這時候我用乙個for迴圈就能把每個職位的某個資訊比如工資輸出來。而不用乙個乙個類的專門設計輸出。

好吧,我承認還是沒講清楚。

3樓:愛你的我_義

虛擬的意思 c++標準情況是不存在virtual一詞的,就是c++ virtual是windows下的c++開發環境 例如mfc stl這些都屬於virtual c++

c++中的virtual關鍵字是什麼?怎麼用?

4樓:墨陌沫默漠末

virtual是定義c++中虛函式的關鍵字 。

在使用virtual之前,c++對成員函式使用靜態聯編,而使用virtual,並且在呼叫函式時是通過指標或引用呼叫,c++則對成員函式進行動態聯編。

用法:class base

public:

virtual void print()

}; class derived:public base

public:

void print()

}; int main()

output:

derived

c++11 關鍵字共73個。

新增關鍵字:alignas、alignof、char16_t、char32_t、constexpr、decltype、noexcept、nullptr、static_assert、thread_local。

export 因為實現支援太少(僅edison design group的前端支援),編譯效率低下,取消原有意義(仍是關鍵字,但使用它的程式是錯誤的),改為保留給未來標準使用。

1、alignas

alignof用於獲取取指定表示式指定的(類似sizeof,可以直接是型別名)的對齊(alignment)。alignas用於宣告時指定對齊類似於現有的型別。和sizeof類似,兩者的運算元都不被求值。

2、constexpr

類似const但更強大,修飾函式或物件,表示函式結果或物件是編譯時決定的常量,以便優化。(const不能修飾一般的函式,也不一定指定宣告的物件能編譯期的常量表示式,更可能只是唯讀物件。而在c語言中,const完全只能指定唯讀物件。

)3、char16_t 和 char32_t

二者分別表示16位字元型和32位字元型,類似char和wchar_t,也是一般只專用於表示字元的整數型別,且設計上用於表示unicode字元。char16_t和char32_t是c++11新增的,以克服wchar_t在不同平台上無法保證確定寬度的缺點。

5樓:機智的煎餅

c++中的virtual關鍵字是定義c++中虛函式的關鍵字 。

在使用virtual之前,c++對成員函式使用靜態聯編,而使用virtual,並且在呼叫函式時是通過指標或引用呼叫,c++則對成員函式進行動態聯編。

virtual的作用:

(1)以父類的引用作為函式的引數型別。

(2)呼叫該函式傳遞子類物件。

(3)在函式中可以通過該父類的引用呼叫到子類中重寫的虛函式。

c++語言工作原理

c++語言的程式因為要體現高效能,所以都是編譯型的。但其開發環境,為了方便測試,將除錯環境做成解釋型的。即開發過程中,以解釋型的逐條語句執行方式來進行除錯,以編譯型的脫離開發環境而啟動執行的方式來生成程式最終的執行**。

生成程式是指將原始碼(c++語句)轉換成乙個可以執行的應用程式的過程。如果程式的編寫是正確的,那麼通常只需按乙個功能鍵,即可搞定這個過程。該過程實際上分成兩個步驟。

第一步是對程式進行編譯,這需要用到編譯器(compiler)。編譯器將c++語句轉換成機器碼(也稱為目標碼);如果這個步驟成功,下一步就是對程式進行鏈結,這需要用到鏈結器(linker)。

鏈結器將編譯獲得機器碼與c++庫中的**進行合併。c++庫包含了執行某些常見任務的函式(「函式」是子程式的另一種稱呼)。

例如,乙個c++庫中包含標準的平方根函式sqrt,所以不必親自計算平方根。c++庫中還包含一些子程式,它們把資料傳送到顯示器,並知道如何讀寫硬碟上的資料檔案。

6樓:染塵墨羽

是定義c++中虛函式的關鍵字。

class base

public:

virtual void print()

};class derived :public basepublic:

void print()

};void main()

7樓:大野瘦子

virtual是c++ oo機制中很重要的乙個關鍵字,在類base中加了virtual關鍵字的函式就是虛函式。

關鍵字virtual的用法:

#include

using namespace std;

class a;

class b :  public a;

void dodisplay(a *p)

int main(int argc,char* argv)

這段**列印出的結果為b,但是當把a類中的virtual去掉之後列印出的就為a。當基類中沒有virtual的時候,編譯器在編譯的時候把p看做a類的物件,呼叫的自然就是a類的方法。

但是加上virtual之後,將dispaly方法變成了虛方法,這樣呼叫的時候編譯器會看呼叫的究竟是誰的例項化物件,這樣就實現了多型的效果。

也就是說,當基類的派生類中有重寫過基類的虛方法的時候,使用基類的指標指向派生類的物件,呼叫這個方法實際上呼叫的會是派生類最後實現的方法。

8樓:123飯後娛樂

virtual意為虛擬,在c++中用到關鍵字virtual的一共有兩個部分乙個是虛繼承,乙個是虛函式。

c++中的函式呼叫預設不適用動態繫結。要觸發動態繫結,必須滿足兩個條件:第一,指定為虛函式;第二,通過基類型別的引用或指標呼叫。

下面這些情況可用virtual關鍵字:

友元函式 建構函式 static靜態函式 不能用virtual關鍵字修飾;

普通成員函式 和析構函式 可以用virtual關鍵字修飾;

擴充套件資料:

vitual關鍵字用途:

vitual基類

在多重繼承中,從派生類到基類存在多條路線時(多個繼承脈絡或者途徑),乙個這種派生類的物件例項化將包含多個基類物件,浪費資源且呼叫混亂的現象出現。

因此引入了vitual baseclass,來在執行階段克服多個基類物件的產生。這個vitual是在執行階段保證物件唯一性的。

vitual函式

虛函式的出現,是由於基類的指標可以執行派生類,因此引出了不便,如

class deriv:public class base

當deriv d;

base* b;

b=&d;

b->show();

這裡的show應該呼叫誰的呢?我們的意思肯定是呼叫d的,但是編譯器處理的話b和base類是繫結在一起的,他實際上是會呼叫b的show函式。

因此,我們引入vitual函式,來告訴編譯器,出現這種情況時,在執行時動態鏈結進行處理。

3.vitual在純虛函式中使用

純虛函式完全是為了繼承體系的完整,也是整合vitual函式的作用而產生的。代表了編譯器階段物件的繫結,將呼叫選擇轉移到執行時動態繫結。

綜上:vitual關鍵的引入,可以理解為阻止編譯階段的靜態繫結,將繫結(虛函式)和約束工作(虛基類)轉移到執行時動態處理。

9樓:檀香透窗櫺

virtual是定義c++中虛函式的關鍵字 。

1、virtual關鍵字的作用:

c++中的函式呼叫預設不適用動態繫結。要觸發動態繫結,必須滿足兩個條件:第一,指定為虛函式;第二,通過基類型別的引用或指標呼叫。由此可見,virtual主要功能是實現動態繫結。

2、virtual關鍵字的使用情況:

virtual可用來定義類函式和應用到虛繼承。

友元函式 建構函式 static靜態函式 不能用virtual關鍵字修飾;

普通成員函式 和析構函式 可以用virtual關鍵字修飾。

3、virtual關鍵字的效果:

class grandfather //祖父類

//建構函式

virtual void fun()  //虛函式宣告定義

};class father : public grandfather//父類,公有繼承祖父類

//建構函式

void fun()   //fun函式宣告定義

};class son : public father  //子類,公有繼承父類

//建構函式

void fun()  //fun函式宣告定義

};void print(grandfather* father) //輸出函式 ,祖父類形參

int _tmain(int argc, _tchar* argv)

4、virtual的繼承性:

只要基函式定義了virtual,繼承類的該函式也就具有virtual屬性;即 grandfather, father ,son同時定義virtual void fun()與grandfather乙個定義virtual void fun效果是一樣的。

擴充套件資料

vitual關鍵字的用途:

1、vitual基類

在多重繼承中,從派生類到基類存在多條路線時(多個繼承脈絡或者途徑),乙個這種派生類的物件例項化將包含多個基類物件,浪費資源且呼叫混亂的現象出現。

因此引入了vitual baseclass,來在執行階段克服多個基類物件的產生。這個vitual是在執行階段保證物件唯一性的。

2.vitual函式

虛函式的出現,是由於基類的指標可以執行派生類,因此引出了不便,引入vitual函式,來告訴編譯器,出現這種情況時,在執行時動態鏈結進行處理。

3.vitual在純虛函式中使用

純虛函式完全是為了繼承體系的完整,也是整合vitual函式的作用而產生的。代表了編譯器階段物件的繫結,將呼叫選擇轉移到執行時動態繫結。

綜上:vitual關鍵的引入,可以理解為阻止編譯階段的靜態繫結,將繫結(虛函式)和約束工作(虛基類)轉移到執行時動態處理。

數學中sec是啥意思,數學中Sec是啥意思

正割 secant,sec 是三角函式的一種。它的定義域不是整個實數集,值域是絕對值大於等於一的實數。它是週期函式,其最小正週期為2 正割是三角函式的正函式 正弦 正切 正割 正矢 之一,所以在2k 到2k 2的區間之間,函式是遞增的,另外正割函式和余弦函式互為倒數。在單位圓上,正割函式位於割線上,...

配電系統中C65N 20A 2P U是啥意思

潛昌淼賽泰 c65n c32a 2p是線路採用小空開的型號,最大工作電壓 440v ac額定電流 6 63a極數 2p分斷能力 4.5ka 脫扣曲線 c型曲線衝擊耐受電壓 6kv 機械壽命 20000次額定電流 1 63a 實現a ac類漏電保護功能,額定剩餘動作電流包括30ma,300ma和300...

c語言中,cpp是啥意思,c語言中cpp是啥意思嗎

c語言和cpp是兩個不同的概念。c語言一 般指標準的c程式語言,ansi c。而cpp是c語言基礎上的擴充套件,即回所說的答c 語言。其在c的基礎上,增加了類的概念,並引入了引用,過載,多型的理念,使面向過程的c語言進步到物件導向的c 語言。同時c 語言完美相容了c語言。cpp的 為,c 的英文寫法...