簡體   English   中英

C ++重載函數和子類

[英]C++ Overloaded Function and Subclasses

假設我有:

struct Vehicle {...}
struct Car : public Vehicle {...}

string A(Vehicle *v) { return "vehicle"; }
string A(Car *c) { return "car"; }

我這樣做:

Vehicle *v = new Car();
cout << A(v);

為什么編譯器打印出“車輛”? 畢竟,v指向Car對象。

重載函數A(Vehicle*)更適合Vehicle*類型的參數。 因此cout將打印:

vehicle

說明:

重載函數解析基於參數的靜態類型完成。 參數v靜態類型是Vehicle* 因此,將調用函數A(Vehicle*)

"vehicle" 

打印出來

發生這種情況是因為v的靜態類型是Vehicle。 因此,為Vehicle定義的A被編譯器使用。

在調用成員函數進行虛方法調用時,編譯器使用動態類型信息。 關鍵字virtual是必需的。 在這種情況下,“this”指針將在適當的覆蓋級別適當地向下轉換。

但是,在這種特殊情況之外,如果沒有顯式的dynamic_cast,編譯器將不會為您進行向下轉換。

這是靜態綁定的示例。 在編譯期間,很明顯將調用string A(Vehicle *v)函數。 當然“車輛”應該在輸出中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM