重寫pk過載理解區分

2021-06-28 01:00:19 字數 1340 閱讀 7715

函式過載

必須在同乙個類中進行

子類無法過載父類的函式,父類同名函式將被名稱覆蓋

過載是在編譯期間根據引數型別和個數決定函式呼叫

函式重寫

必須發生於父類與子類之間

並且父類與子類中的函式必須有完全相同的原型

使用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...