使用引用轉換與直接通過基類建立乙個物件有何不同,意義何在?

時間 2021-06-02 06:34:16

1樓:陳良喬

上面的回答很精彩

我想提到的需要注意的一點是,這種轉換,向上是安全的,向下就很危險了,並且這種危險具有極強的隱蔽性,編譯器並不會給出任何提示,例如

#include

using namespace std;

class A

;class Ad : public A

void start()

商家想用自行車來糊弄人,不啟動(start)還好,編譯器並沒有給出任何提示資訊 ,連個警告都沒有,一啟動就露餡了(電量是個奇怪的數字)

2樓:鋼盅郭子

假設 A 是「自行車」

假設 Ad 是「電動自行車」

那 (new A()) 就是「自行車」

而 (A)(new Ad()) 則好比是「踩著走的電動自行車」

3樓:余天公升

不管怎麼樣,A就是A,Ad就是Ad。因為Ad從A繼承而來,有一些行為和A一致,看起來像A,所以我們可以把他當作A來對待,但是,他還是Ad。

比如說,我要寫乙個鳥籠類,可以裝進各種各樣不同的鳥,你可以考慮用乙個List《鳥》來裝。當我們要喂鳥的時候,我們並不關心這個是什麼鳥,反正給它吃就可以了,所以就把他們當成他們的父類(鳥)來看待,每乙個都呼叫一下吃這個方法。

另外,有的時候,這個父類如果是抽象類,那麼是不能直接例項化的,比如我們找不出一種就叫做「鳥」而不叫別的名字的動物,也需要通過引用轉換的方法得到。

Python中是否需要避免使用相對引用?

靈柩 我猜你說的是這種 import foofrom fooimport bar這麼做是為了防止與 PYTHONPATH 中的模組衝突,如果用相對引入,可能不知道 foo 到底是專案裡的,還是python lib 裡的。可以這樣寫 from importfoo 海洋 題主所說的,應該是類似 from...

同樣的函式引用裡為什麼使用string引用時會清空資料?

朱涵俊 改成print a 就可以正常顯示,因為a已經分配好了,main函式返回才析構。而 abc 是在引數中的,呼叫的時候先生成乙個string 臨時變數,然後用建構函式初始化,string有個引數是const char 的建構函式。呼叫完成之後,就析構這個臨時變數了,而d引用了乙個已經析構的臨時...

如何在 C 中將時間與時間戳進行轉換?

西井丶 稍微改進一下 旋鈕 的答案 public static intGetUnixStamp DateTime value int value ToUniversalTime Ticks 621355968000000000 10000000 public static DateTime From...