虛函式,覆蓋和多型

2021-08-05 22:04:04 字數 941 閱讀 5441

一.函式宣告中的virtual關鍵字

•形如 

class 類名

}; 的成員函式,稱為虛函式或方法

–class shape

};

一.在子類中覆蓋基類的虛函式

•如果子類的成員函式和基類的虛函式具有相同的函式原型,那麼該成員函式就也是虛函式,無論其是否帶有virtual關鍵字,且對基類的虛函式構成覆蓋

–class rectangle : public shape 

};–class circle : public shape

};

一.什麼是多型

•如果子類提供了對基類虛函式的有效覆蓋,那麼通過乙個指向子類物件的基類指標,或者引用子類物件的基類引用,

呼叫該虛函式,實際被呼叫的將是子類中的覆蓋版本,而非基類中的原始版本,這種語法現象稱為多型

–rectangle r (...); 

circle c (...);

shape* ps = &r;

ps->draw (); // 呼叫 rectangle::draw

shape& rs = c;

rs.draw (); // 呼叫circle::draw

二.多型的意義

•多型的重要意義在於,一般情況下,呼叫哪個類的成員函式是由呼叫者指標或引用本身的型別決定的,而當多型發生時,

用哪個類的成員函式則完全由呼叫者指標或引用的實際目標物件的型別決定。這樣一來,源自同一種型別的同一種

激勵,竟然可以產生多種不同的響應,謂之多型

–void drawany (shape const& shape) 

–void drawall (shape const* shapes)

過載覆蓋多型和虛函式

現在整理出來,希望可以記住這個。函式的名稱一樣,但是引數不同,就是過載 函式的名稱知道了,但是編譯的時候不知道呼叫哪個函式,過載決議 根據引數決定到底應該呼叫哪個函式 區別就是 呼叫的引數不一樣 對於非虛函式,子類和基類同名 不管引數 那麼就是導致覆蓋 如果引數完全一樣,那麼會完全覆蓋,只會留下子類...

隱藏和覆蓋 多型 虛函式 C

隱藏 overhide 派生類中隱藏了基類中所有的同名函式 同名 不同參 繼承關係下的不同作用域 覆蓋 派生類中同名同參的虛函式覆蓋基類中同名同參的虛函式 同名同參 繼承關係下的不同作用域 均為虛函式 隱藏 class base void show protected int ma class de...

多型和虛函式

在c 中,多型是通過虛函式實現的。基類如果把乙個函式宣告為虛的 virtual 就表明繼承類可以覆蓋 override 這個函式 從而表現不同的行為,呈現出多型性 對於每乙個有虛函式的類,或者覆蓋了乙個或多個基類虛函式的繼承類,可認為有乙個與之關聯的虛函式表 v table v table 表中的每...