目錄
一、加號運算子過載
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.用於內建型別...