成員函式和運算子的過載

2021-06-13 12:09:33 字數 2606 閱讀 9910

成員函式和運算子的過載

一、建構函式的過載

建構函式可以過載,使得生成例項時非常方便。建構函式一般要對成員變數賦初值,有2種寫法:

#include#includeusing namespacestd;classstuff 

stuff(string n,inta):name(n),age(a)//這是寫法二

string getname()intgetage()

};intmain ( )

寫法一是在建構函式體中賦值,賦值前成員變數已經有了位址空間,尚未有值。寫法二是一種特殊方法,是在成員變數分配空間的同時將引數的值賦給成員變數。雖然寫法二用的人少,但明顯優於寫法一。

事實上,如果將成員變數的定義改為常量,「const string name;」和「const int age;」,寫法一將出錯,而寫法二仍然正確。

二、運算子過載

運算子過載對於普通函式和成員函式來說,格式稍有不同。

//單目運算子

成員函式: 返回值型別operator運算子 () ;

普通函式: 返回值型別operator運算子 (物件的型別) ;

//雙目運算子

成員函式: 返回值型別operator運算子 (物件的型別) ;

普通函式: 返回值型別operator運算子 (物件的型別1, 物件的型別2) ;

//函式呼叫

成員函式: 返回值型別operator(任意的引數列) ;

//陣列元素

成員函式: 返回值型別operator(引數型別) ;

//增1/減1運算子

成員函式: 返回值型別operator運算子 (int) ;

普通函式: 返回值型別operator運算子 (物件的型別, int) ;

#include#includeusing namespacestd;classstuff 

string getname()intgetage()voidoperator +(intx); //運算子過載的定義voidoperator +(string s); //運算子過載的定義

};voidstuff::operator +(intx) //運算子過載的實裝

voidstuff::operator +(string s) //運算子過載的實裝

intmain ( )

三、拷貝建構函式和賦值運算子

本節內容較深,初學者請跳過。「拷貝建構函式」和「賦值運算子」都是將物件的值複製乙份然後傳給另一物件。這二個功能也是類本身就具有的,但有很多場合原封不動地複製給另外乙個物件時反而會出錯,例如在成員函式中有動態分配記憶體,或者引數指標指向外部某一位址時,就有可能出錯。

要避免這些錯誤,我們可以過載「=」運算子以及拷貝建構函式,將出錯的因素排除。下例中為了演示,故意將賦值運算子過載函式中不複製「姓名」,而拷貝建構函式中固定「年齡」。

#include#includeusing namespacestd;classstuff 

string getname()intgetage()

stuff&operator=(stuff& x); //賦值運算子過載

stuff(stuff& x):name(x.name),age(20) //拷貝建構函式過載

};stuff& stuff::operator=(stuff& x)

intmain ( )

四、型別轉換

當需要將當前類的例項直接賦值給其它型別的變數時自動轉換型別,這其實還是運算子過載。當需要其它型別直接賦值給當前類的例項時,只要增加建構函式就行。

#include#includeusing namespacestd;classstuff 

string getname()intgetage()operatorint()operatorstring()

};intmain ( )

運算子過載 成員函式

檔名稱 test.cpp 完成日期 2016年5月14日 問題描述 請用類的成員函式,定義複數類過載運算子 使之能用於複數的加減乘 include using namespace std class complex complex double r,double i complex operator...

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

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

運算子過載,const成員函式

1.運算子過載 c 為了增強 的可讀性引入了運算子過載,運算子過載是具有特殊函式名的函式,也具有其返回值類 型,函式名字以及引數列表,其返回值型別與引數列表與普通的函式類似。乙個賦值運算子過載的例子 include includeusing namespace std class mystr mys...