過載 覆蓋 隱藏 多型舉例說明

2021-08-17 05:27:39 字數 2254 閱讀 8079

例子一:

class a

public:

a(int m);

int setvalue(int mval);

void setvalue();

private:

int m_data;               

分析:該類中, 函式setvalue(int mval) 和 函式setvalue()為過載成員函式。因為,函式名相同,引數不同,在同乙個類作用域中,兩函式構成過載成員函式。注意:過載函式必須在相同的作用域中。

總結: 

過載函式幾個 條件:

1. 相同作用域  

2. 同函式名 

3. 引數不同(型別、個數、順序) 

4. 有沒有virtual均可

例子二:

class  a

public:

a(int m);

virtual int setvalue(int mval);

private:

int m_data;

class b : public a

public:

b(int a, float b,int c);

virtual int setvalue(int nval);

private:

float m_value;

int   m_cal;

分析:派生類b中 setvalue函式 覆蓋了 基類a中setvalue函式。因為兩個類中函式名相同,引數相同,基類成員函式為虛函式。

總結:構成覆蓋的幾個條件:

1. 不同作用域(基類和派生類) 

2. 同函式名 

3. 相同函式引數 

4.基類成員函式為虛函式。

例子三:

class  a

public:

a(int m);

virtual int setvalue(int mval);

private:

int m_data;

class b : public a

public:

b(int a, float b,int c);

virtual int setvalue(float nval);

private:

float m_value;

int   m_cal;

分析: 派生類b中setvalue函式 隱藏了 基類a中setvalue函式。因為兩類中,函式名相同,函式引數不同,雖然都有virtual,但仍為隱藏,注意與覆蓋相區別。

例子四:

class  a

public:

a(int m);

int setvalue(int mval);

private:

int m_data;

class b : public a

public:

b(int a, float b,int c);

int setvalue(float nval);

private:

float m_value;

int   m_cal;

分析: 派生類b中setvalue函式 隱藏了 基類a中setvalue函式。因為兩類中,函式名相同,函式引數不同,雖然都沒有virtual,但仍為隱藏,注意與過載相區別。

例子五:

class  a

public:

a(int m);

int setvalue(int mval);

private:

int m_data;

class b : public a

public:

b(int a, float b,int c);

int setvalue(int nval);

private:

float m_value;

int   m_cal;

分析: 派生類b中setvalue函式 隱藏了 基類a中setvalue函式。因為兩類中,函式名相同,函式引數相同,雖然都沒有virtual,但仍為隱藏,注意與覆蓋相區別。

綜合例子

三、四、五

總結:隱藏有以下三種情況:

1.  不同作用域(基類和派生類), 同函式名,同引數,基類沒有virtual,為隱藏。(區別於覆蓋)

2. 不同作用域(基類和派生類),同函式名,不同引數,基類有virtual,為隱藏。(區別於過載)

3. 不同作用域(基類和派生類),同函式名,不同引數,基類沒有virtual,為隱藏。(區別於過載)

sprintf舉例說明

最近需要把圖形的座標轉換為字元來檢驗圖形座標的正確與否,所以較多的用到了sprintf 函式。例如 int sign 100 char s1 10 sprintf s1,d sign pdc textout 0,0,s1 這裡就把sprintf 函式的用法總結一下。int sprintf char ...

python argparse舉例說明

目的 想從命令列通過命令來指定是否執行程式中的某個函式 模組 更新關於另乙個例子 這裡只舉例說明 原因是看了很多博文之後,還是沒有解決筆者上面說的那個問題,即如何從命令列決定是否執行某段函式問題 設定乙個引數,名為foreground,簡寫f 即在終端可以輸入 foreground也可以輸入 f。跟...

c 多型 重寫 覆蓋 隱藏 過載

多型 重寫 覆蓋 c 中多型是指同乙個操作作用於不同的物件可以有不同的解釋,產生不同的執行結果,多型是通過虛函式實現的,在派生類中重寫基類的虛函式。呼叫方法 宣告基類的指標,利用該指標指向派生類物件,就可以用該指標呼叫派生類中重寫後的虛函式。這樣就可以根據指向的派生類不同,而實現不同的方法。多型的特...