2 7 類與物件 C 運算子過載

2021-10-24 23:18:17 字數 3297 閱讀 8197

目錄

一、加號運算子過載

1. 加法過載可以通過全域性函式實現

2. 加法過載可以通過類成員函式實現

二、左移運算子過載

三、遞增運算子過載

四、賦值運算子過載

五、關係運算子過載

六、函式呼叫運算子過載

運算子過載是對已有運算子進行重新定義,賦予其新的功能,使其適應不同資料型別。

實現兩個自定義資料型別的加法運算。

#include using namespace std;

#includeclass student

//析構函式

~student() {}

private:

int m_a;

int m_b;

};student operator+(student &s1, student &s2)

void test()

int main()

s3的成員變數m_a的值為:25

s3的成員變數m_b的值為:30

請按任意鍵繼續. . .

#include using namespace std;

#includeclass student

//析構函式

~student(){}

//類加法重定義

student operator+(student &s)

private:

int m_a;

int m_b;

};void test()

int main()

s3的成員變數m_a的值為:25

s3的成員變數m_b的值為:30

請按任意鍵繼續. . .

通過左移運算子過載,可以實現自定義資料型別的輸出。

#include using namespace std;

#includeclass student

//析構函式

~student() {}

private:

int m_a;

int m_b;

};//全域性函式實現左移運算子的過載

ostream& operator<< (ostream &cout, student &s)

void test()

int main()

m_a = 10

m_b = 20

請按任意鍵繼續. . .

注:左移運算子一般不通過類成員函式實現過載,因為在類內無法將cout放在左移運算子的左側。

class student

private:

int age;

}

對遞增(++)和遞減(--)運算子進行過載,使其可以直接作用於類(操作的類的成員變數必須為整型int)。

注:

#include using namespace std;

#includeclass myint

//前置++

myint & operator++()

//後置++

myint operator++(int)

//前置--

myint & operator--()

//後置--

myint operator--(int)

private:

int m_int;

};//左移運算子的過載,使其能夠直接列印類

ostream & operator<<(ostream &cout, myint &i)

void test()

int main()

操作前為10,類後置++後的列印結果:10

操作前為11,類前置++後的列印結果:12

操作前為12,類後置--後的列印結果:12

操作前為11,類前置--後的列印結果:10

請按任意鍵繼續. . .

c++至少會給乙個類新增4個函式:

與值拷貝建構函式一樣,若類內有屬性儲存於堆區,將出現淺拷貝的問題(重複釋放堆區記憶體)。

#include using namespace std;

#includeclass student

//析構函式

~student()

} //賦值運算子過載

student & operator=(student &s)

m_age = new int(*s.m_age); //深拷貝

m_score = s.m_score;

return *this;

}private:

int * m_age;

int m_score;

};//左移運算子的過載,使其能夠直接列印類

ostream & operator<<(ostream &cout, student &s)

void test()

int main()

s1的值:年齡為:10      分數為:99

呼叫賦值過載函式前s2的值:年齡為:28 分數為:85

呼叫賦值過載函式後s2的值:年齡為:10 分數為:99

請按任意鍵繼續. . .

對==、!=、>、<、>=、<=等關係運算子進行過載,使其能夠判斷自定義資料型別。

#include using namespace std;

#includeclass student

//析構函式

~student()

//賦值運算子過載

bool operator==(student &s)

private:

int m_age;

int m_score;

};void test()

else

}int main()

s1與s2不相同。

請按任意鍵繼續. . .

#include using namespace std;

#includeclass myadd

};void test()

int main()

7

7請按任意鍵繼續. . .

C 類與物件 運算子過載

在某些特殊的運算情況下,以正常的運算方法不匹配時,就可以使用運算子過載 注意 當過載運算子一樣的時候,類內作為友元的只放乙個就可以了 標頭檔案 include class computer 實現cpp檔案 include computer.h include computer computer in...

類與物件 C 過載運算子

class person 呼叫形式 person p3 p1.operator p2 或者 p3 p1 p2 person operator person p1,person p2 intmain 一般情況下,我們把算術運算子定義成非成員函式,因為我們不需要改變運算物件的狀態,所以形參都是常量的引用...

C 類與物件 中 賦值運算子過載

將乙個沒有賦值含義的字元進行重新修改 例如 簡單的來說,運算子過載就是將對應的符號賦予新的意思,能夠更加容易處理比較複雜的形式,例如對兩個日期的比較,不只是單純的數字之間的比較,我們就需要寫一系列的 來將等於號重新賦予新的意思即可.操作 返回值型別 operator操作符 引數列表 1.用於內建型別...