c 基礎9 函式,函式過載和運算子過載

2021-06-16 10:16:11 字數 1940 閱讀 8095

一.函式

1.函式過載,函式覆蓋,函式隱藏三者的區別,概念

函式過載:在乙個類中,函式與函式的函式名相同,引數型別或者引數的個數不同

函式覆蓋:在基類和派生類中,基類的函式必須是虛函式,兩個類中的函式與函式的函式名相同,引數型別和個數也完全相同

函式隱藏:在基類和派生類中,基類的函式必須不是虛函式,兩個類中的函式與函式的函式名相同,引數型別和個數不考慮(相同不相同都無所謂)

2.const成員函式

如果想在乙個函式中不允許修改(全域性)的成員變數值,那麼可以將該函式定義為const成員函式,如:

int i,k;

void ctestmemcpp::printss() const

上面更改了全域性的變數i和k,那麼編譯器會報錯。

二.函式過載

1.概念:函式過載指的是函式的引數個數或者某個引數的型別不同就稱為函式的過載,如

int fun(int a)

int fun(float a)

int fun(int a,double b)

以上三個函式就是對函式fun的過載

2.函式的預設引數:函式的的引數在宣告的時候也可以進行初始化,初始化之後就可以在使用的時候不需要填寫形參

void func(int a,int b,int c=5)

//後置++過載

int operator++(int a)

};

ctestmemcpp *cp=new ctestmemcpp();

int a=++*cp;

int b=(*cp)++;

結果:a=1 b=0

前置++和後置++過載的時候怎麼才能讓編譯器區分出來呢?為了區分他們,我們需要在後置++的運算子後新增乙個int型別的引數(int a),這個引數沒有任何意義,它也不會傳遞到函式體中,它只是operator++()函式設定的乙個訊號,該訊號提醒編譯器,目前新增了引數的函式是乙個後置自加的運算子函式

5.兩個物件相加的+運算子過載

class ctestmemcpp

//物件+過載

ctestmemcpp operator+(ctestmemcpp &cp)

};

ctestmemcpp cp1(1),cp2(2),cp3;

cp3=cp1+cp2;

int cp3n=cp3.n;

結果cp3n=3;

6.使用operator關鍵字將類的物件轉換成int型別

使用方法:operator  int()

class ctestmemcpp

//使用operator關鍵字將類的物件轉換成int型別

operator int()

}

有3種方式可以得到轉換後的結果

ctestmemcpp cp1(1);

int a1=int(cp1);

int a2=(cp1);

int a3=cp1;

7.c++運算子大部分都可以過載,但是有些不能過載,如

.(成員選擇運算子)     ::(作用域限定運算子)      *(指標運算子)        ?:          #

上面的五個運算子不能過載,前三個有特殊意義,過載會帶來麻煩,「#」是預處理標緻,不是運算子,「?:」沒有確定性,過載沒意義

C 過載函式運算子和過載函式

c 允許在同一作用域中的某個函式和 運算子指定多個定義,分別稱為 函式過載 和運算子過載 過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當您呼叫乙個 過載函式 或過載運算子 時,編譯器通過把您所使用的引數型別與定義中的引數型別進行...

C 運算子過載和函式過載

c 允許在同一作用域中的某個函式和運算子指定多個定義,分別稱為函式過載和運算子過載。過載宣告是指乙個與之前已經在該作用域內宣告過的函式或方法具有相同名稱的宣告,但是它們的引數列表和定義 實現 不相同。當呼叫乙個過載函式或過載運算子時,編譯器通過把您所使用的引數型別與定義中的引數型別進行比較,決定選用...

C 運算子過載函式之成員運算子過載函式

5.2.3 成員運算子過載函式 在c 中可以把運算子過載函式定義為某個類的成員函式,稱之為成員運算子過載函式。1.定義成員運算子過載函式的語法形式 1 在類的內部,定義成員運算子過載函式的格式如下 函式型別 operator 運算子 形參表 2 成員運算子過載函式也可以在類中宣告成員函式的原型,在類...