函式過載
必須在同乙個類中進行
子類無法過載父類的函式,父類同名函式將被名稱覆蓋
過載是在編譯期間根據引數型別和個數決定函式呼叫
函式重寫
必須發生於父類與子類之間
並且父類與子類中的函式必須有完全相同的原型
使用virtual
宣告之後能夠產生多型
(如果不使用
virtual
,那叫重定義
) 多型是在執行期間根據具體物件的型別決定函式呼叫
重寫的兩種情況
如果函式重寫,在父類中增加了virtual關鍵字, 將能產生多型。。。。
如果函式重寫,沒有加virtual關鍵字,,相當於在子類中重定義。。。。。,不會發生多型。。。
子類和父類有相同的名字(變數名字或者是函式名字的時,子類名字覆蓋父類名字,如果想使用父類的資源,需要加::)
下面來看這個例子
我提出幾個問題
child物件繼承父類物件的func,請問這句話能執行嗎?why
c.func();
問題2 子類的兩個func和父類裡的三個func函式是什麼關係?
#include #include using namespace std;
class parent01
public:
void func()
void abcd()
virtual void func(int i)
virtual void func(int i, int j) };
//重寫的兩種情況
//如果函式重寫,在父類中增加了virtual關鍵字, 將能產生多型。。。。
//如果函式重寫,沒有加virtual關鍵字,,相當於在子類中重定義。。。。。,不會發生多型。。。
class child01 : public parent01
//此處2個引數,和子類func函式是什麼關係
void func(int i, int j)
//此處3個引數的,和子類func函式是什麼關係
void func(int i, int j, int k) };
void run01(parent01* p)
int ma11111in()
1子類裡面的func無法過載父類裡面的func
2.當父類和子類有相同的函式名、變數名出現,發生名稱覆蓋
也就是是說發生了 名稱覆蓋,把子類中的沒有函式引數的,這個函式abcd名稱覆蓋了。。。
在子類中,是不能過載父類的函式的。編譯器就是這麼做的,順從。。。。
區分方法過載與重寫
三同 一大 一小。具體內容以及與方法過載的區別見下 1.引數列表必須完全與被重寫方法的相同 2.返回型別必須完全與被重寫方法的返回型別相同 3.方法名相同 以上為三同 1.訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如 如果父類的乙個方法被宣告為public,那麼在子類中重寫該方法就不能宣...
對於重寫和過載的理解
重寫 override 從字面上看,重寫就是 重新寫一遍的意思。其實就是在子類中把父類本身有的方法重新寫一遍。子類繼承了父類原有的方法,但有時子類並不想原封不動的繼承父類中的某個方法,所以在方法名,引數列表,返回型別 除過子類中方法的返回值是父類中方法返回值的子類時 都相同的情況下,對方法體進行修改...
Java中重寫 過載通俗的理解
子類繼承父類,擁有父類的方法和屬性後,子類在保證繼承的方法在方法名和引數列不變的情況下,對方法的內部實現進行重新定義,這種現象就是方法重寫 重寫比較側重於父子差異 示例父親 father類 名下有一套三層樓房,後來由兒子 son類 繼承,繼承之後碰巧拆遷,三層樓房在兒子這裡變成了拆遷款,這套房子 h...