在c++中有6個預設的成員函式,分別是建構函式、拷貝建構函式、析構函式、賦值操作符過載、取位址操作符過載和const修飾的取位址操作符過載。在這篇文章中,我將通過實現複數類來對這幾個成員函式做乙個簡單的說明。
1.建構函式
成員變數為私有的,要對它們進行初始化,必須用乙個公有成員函式來進行。同時這個函式應該有且僅在定義物件時自動執行一次,這時呼叫的函式稱為建構函式 。
建構函式是特殊的成員函式,特徵如下:
1. 函式名與類名相同。
2. 無返回值。
3. 物件構造(物件例項化)時系統自動呼叫對應的建構函式。
4. 建構函式可以過載。
6. 如果類定義中沒有給出建構函式,則c++編譯器自動產生乙個預設的建構函式,但只要我們定義了乙個建構函式,系統就不會自動生成預設的建構函式。
7. 無參的建構函式和全預設值的建構函式都認為是預設建構函式,並且預設的建構函式只能有乙個。
2.拷貝建構函式
建立物件時使用同類物件來進行初始化,這時所用的建構函式稱為拷貝建構函式。
拷貝建構函式是特殊的建構函式,特徵如下:
1. 拷貝建構函式其實是乙個建構函式的過載。
2. 拷貝建構函式的引數必須使用引用傳參,使用傳值方式會引發無窮遞迴呼叫。
3. 若未顯示定義,系統會預設預設的拷貝建構函式。預設的拷貝建構函式會,依次拷貝類成員進行初始化。
3.析構函式
當乙個物件的生命週期結束時,c++編譯系統會自動呼叫乙個成員函式,這個特殊的成員函式即析構函式。
建構函式是特殊的成員函式,特徵如下:
1. 析構函式在類名加上字元~。
2. 析構函式無引數無返回值。
3. 乙個類有且只有乙個析構函式。若未顯示定義,系統會自動生成預設的析構函式。
4. 物件生命週期結束時,c++編譯系統系統自動呼叫析構函式。
5. 注意析構函式體內並不是刪除物件,而是做一些清理工作。
4.賦值操作符過載
拷貝建構函式是建立的物件,使用乙個已有物件來初始化這個準備建立的物件。賦值運算子的過載是對乙個已存在的物件進行拷貝賦值。
下面來實現複數類:
#include
using
namespace
std;
class complex
complex(const complex& c) //拷貝建構函式
~complex() //析構函式
complex operator =(const complex& c) //賦值函式
bool
operator==(const complex& d) //判斷相等
complex operator+(const complex &d) //兩個複數相加
complex operator-(const complex &d) //兩個複數相減
complex& operator+=(const complex &d) //複數物件+=d
complex& operator-=(const complex &d) //複數物件-=d
complex operator++() //前置++
complex operator++(int) //後置++
complex operator--() //前置--
complex operator--(int) //後置--
void display() //顯示複數的實部和虛部
private:
double _real; //實部
double _image; //虛部
};
下面是測試函式:
void test1()
void test2() //==、+、-、+=、-=
void test3() //前置++、後置++、前置--、後置--
int main()
**部分如上,寫完整個**其實對所謂的幾個成員函式有了更深一步的了解。c++是乙個基於物件導向的語言,難度較c語言還是蠻大的,所以在日常學習中更要注重對基礎知識的積累,要多寫**反覆理解。 編寫乙個類實現複數的運算
編寫乙個類實現複數的運算,並在main方法中運用這些類中的方法進行運算 複數類的屬性有 屬性1 實部,代表複數的實數部分。屬性2 虛部,代表複數的虛數部分。複數類的方法 方法1 建構函式,將實部 虛部都置為0。方法2 獲得複數物件的實部。方法3 獲得複數物件的虛部。方法4 當前複數物件與形式引數複數...
如何實現乙個string類 1
string類是c 當中用的非常頻繁的乙個類,它提供了很多處理字串的函式,讓字串的使用變得像int float等built in型別一樣簡單。string類的實現包含了大量c 語言的知識,其中有很多值得討論的問題。自己動手實現乙個string類是學習c 語言的好方法,可以檢驗自己一下c 基礎知識掌握...
如何實現乙個string類 2
首先來看一下賦值運算子過載。在實際應用中,我們經常遇到需要將乙個物件賦值給另外乙個物件的情況,那麼就需要使用賦值運算子 跟預設的拷貝建構函式一樣,如果我們沒有顯式地定義乙個賦值運算子過載函式,那麼編譯器會提供乙個預設的函式實現賦值功能。大暖男再次出場,不出意外地再次不靠譜。編譯器提供的賦值運算函式只...