這裡不講虛函式的定義了
直接進入主題,就是過載。
如果基類宣告了乙個函式是虛函式,而且派生類並沒有改變引數,只是把函式內容改變了,那麼這個可以認為是「重寫 「
派生類過載是什麼呢,就是在派生類中僅僅保留基類的函式名,引數變了,或者返回型別也變了,如果不改變引數僅僅改變返回型別不是過載,這樣也是錯的。
如果過載了,你就不會得到基類對應的函式名的函式了,被隱藏了!
除非你使用基類作用域解析符號,要不你呼叫基類版本就是錯誤的!
看例子:
class c0
}; void main()
上面指示的地方就出錯了,因為派生類的過載直接隱藏了基類的函式,而且繼承作用暫時失效,如果你要使用基類的方法就是這樣:obj2.c0::set1(1); 加上作用域解析符。
有人問:p-> set1(3);這裡為什麼不出錯啊,c1類裡面沒有這麼個函式型別啊,很簡單,虛函式只對基類裡面定義了的才算,不能理解成基類裡面乙個定義了,其他的也變成了虛擬的了,這樣是不對的。
這裡就有乙個建議,如果過載了基類的函式,最好是把基類的虛函式都重寫在派生類裡面一次,就不會隱藏基類的函式方法了
C 派生類函式過載與虛函式繼承詳解
目錄 二 同名函式隱藏與虛函式覆蓋 類的關係圖 派生類的作用域巢狀在基類之內 bulk quote bulk cout bulk.isbn 名字isbn解析過程 成員名字的查詢型別由靜態型別決定 給disc quote新增乙個成員,返回折扣政策 class disc quote public quo...
虛函式 與派生類遮蔽基類函式
class base public virtual void print void cout 10public void print int i cout base iter new dervied iter print 5 基類指標會在基類物件中尋找函式,找到函式名後,判斷引數,沒有乙個引數的,所...
基類和派生類,虛函式
基類負責定義在層次關係中所有類共同擁有的成員,而每個派生類定義各自持有的成員。基類希望它的派生類各自定義適合自身的版本,此時基類就將這些函式宣告成虛函式。class quote 派生類必須通過使用類派生列表明確指出它是哪個基類繼承而來。類派生列表的形式 首先是乙個冒號,後面緊跟以逗號分隔的基類列表,...