C 虛基類小問題

時間 2021-08-30 10:08:09

1樓:流星夢陽

你不要把虛函式與虛繼承弄混了,虛函式才是為了統一介面的,虛繼承是解決重複繼承的。

所以一般的子類指標能自動轉換為父類指標,或引用,就像你這add函式中p一樣,new出的新物件都被自動轉換成staff型指標了。父類到子類一般是不行的,當然通過dynamic_cast可以強制轉換但也不是都成功。

你沒發現嗎?你這個公司的老闆多慘啊,繼承了半天,最後發現自己的成員和普通的職員的成員一模一樣,呵呵。

繼承就要繼承東西,chairman類沒能從工程師和小領導那裡繼承到任何成員(或者說他整合到的父類的保護成員,但是chairman中並沒有能夠設定繼承來得成員,和沒有繼承到是一樣的啊)所以虛繼承就完全沒必要了啊。

你可以直接用chairman類作基類,然後派生出工程是和主管類就行了,你的類中沒提供任何函式只是作為資料結構的一部分了。所以沒必要用友元函式做藉口了,因為也不直接訪問他的保護成員,直接在外面定義個管理類就行了做介面就行了,還是建議開闢三塊記憶體空間,每塊儲存相同的型別資料,你是想隨即儲存不同的資料在乙個鏈上,倒不是不能,實現起來困難不說,肯定會用到大量的判斷語句,效率肯定低,並且以後的查詢也是個問題。stl中都是儲存相同型別的,c++沒那麼智慧型,他不能根據記憶體中的資料,就能確定型別的,除非你自己寫判斷語句了。

還有就是初始化資料成員,甚至你應該把它當成一種必須。再有就是你的成員基本都是指標,如果你用到拷貝建構函式時記得自己定義拷貝建構函式。

2樓:匿名使用者

c++規定 不得 從虛基類 轉換為派生類,沒有什麼特別的理由 。你在 msdn中輸入 c2635可以看到類似的解釋

多重繼承 、虛基類雖然是c++允許的 語法元素 ,但是 眾所周知 這是不好的東西,你應該盡一切可能避免使用它

C 虛基類問題

首先.這個不叫虛基類 這只是一個普通繼承 基類裡面有一個虛擬函式 定義a p new c p是一個a型別的指標,但實際上p指向的是一個c型別 c型別也是a型別的一種,c繼承自a p show 的時候,因為a中的是 virtual show 即虛擬函式 所以會執行c的show 函式 這就是虛擬函式的一...

c中派生類重寫基類虛函式的問題望大蝦指教

非也,子類不能直接呼叫父類的成員函式以及成員變數,如果要呼叫就必須用父類 也就是你這個函式中其實呼叫的是父類的函式,這個與虛函式沒有一點關係,僅僅是子類呼叫父類的方式而已。虛函式的價值體現是 我定義乙個子子類物件 cclientsocket ccs 假設有無參建構函式 然後我定義了乙個其他的函式 e...

C 中,虛基類是如何避免兩義性的

c 的繼承中的基類就是派生類的一個子物件,也就是說基類是派生類的一個子部分,它佔用派生類的一部分記憶體。當b類從a類派生時,b類物件中就會有sizeof a 大小的儲存空間用於儲存a類子物件。當通過b類物件來訪問a類的成員時,產生的訪問指令使用的地址是b物件的起始地址 a物件在b物件的偏移量 a成員...