運算子過載概念:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別
4.5.1 加號運算子過載
作用:實現兩個自定義資料型別相加的運算
#include using namespace std;
// 加號運算子過載
class person
int m_a;
int m_b;
};// 函式的宣告
person operator+(person& p1, person& p2);
person operator+(person& p, int num);
void test01()
// 2、全域性函式過載 + 號
person operator+(person& p1, person& p2)
// 函式過載的版本
person operator+(person& p, int num)
int main()
總結1:對於內建的資料型別的表示式的的運算子是不可能改變的
總結2:不要濫用運算子過載4.5.2 左移運算子過載
作用:可以輸出自定義資料型別
#include using namespace std;
// 左移運算子過載
class person
private:
// 利用成員函式過載 左移運算子 p.operator<<(cout) 簡化版本 p << cout
// 不會利用成員函式過載 << 運算子,因為無法實現 cout 在左側
//void operator<<(person& p)
//int m_a;
int m_b;
};// 只能利用全域性函式過載左移運算子
ostream& operator<<(ostream& cout, person& p) // 本質 operator << (cout , p),簡化 cout << p
void test01()
int main()
總結:過載左移運算子配合友元可以實現輸出自定義資料型別4.5.3 遞增運算子過載
作用: 通過過載遞增遞減運算子,實現自己的整型資料
遞增示例:
#include using namespace std;
// 過載遞增運算子
// 自定義整型
class myinteger
// 過載前置 ++ 運算子 返回引用是為了一直對乙個資料進行遞增操作
myinteger& operator++()
// 過載後置 ++ 運算子
// void operator++(int) int代表佔位引數,可以用於區分前置和後置遞增
myinteger operator++(int)
private:
int m_num;
};// 過載左移運算子
ostream& operator<<(ostream& cout, const myinteger& myint)
// 前置遞增測試函式
void test01()
// 後置遞增測試函式
void test02()
int main()
遞減示例:
#include using namespace std;
// 過載遞減運算子
// 自定義整型
class myinteger
// 前置遞減
myinteger& operator--()
// 後置遞減
myinteger operator--(int)
private:
int m_num;
};// 過載 << 運算子
ostream& operator<<(ostream& cout, const myinteger& myint)
void test01()
void test02()
int main()
總結: 前置遞增遞減返回引用,後置遞增遞減返回值4.5.4 賦值運算子過載
c++編譯器至少給乙個類新增4個函式
預設建構函式(無參,函式體為空)
預設析構函式(無參,函式體為空)
預設拷貝建構函式,對屬性進行值拷貝
賦值運算子 operator=, 對屬性進行值拷貝
如果類中有屬性指向堆區,做賦值操作時也會出現深淺拷貝問題
示例:
#include using namespace std;
// 賦值運算子過載
class person
~person()
}// 過載 賦值運算子
person& operator=(person& p)
// 深拷貝
m_age = new int(*p.m_age);
// 返回物件本身
return *this;
}int* m_age;
};void test01()
int main()
4.5.5 關係運算子過載
作用:過載關係運算子,可以讓兩個自定義型別物件進行對比操作
示例:
#include using namespace std;
// 過載關係運算子
class person
// 過載 == 號
bool operator==(person& p)
else
}// 過載 != 號
bool operator!=(person& p)
return true;
}string m_name;
int m_age;
};void test01()
else
if (p1 != p2)
else
}int main()
4.5.6 函式呼叫運算子過載
示例:
#include using namespace std;
// 函式運算子過載
// 列印輸出類
class myprint
};void myprint02(string test)
void test01()
// 仿函式非常靈活,沒有固定的寫法
// 加法類
class myadd
};void test02()
int main()
類和物件 運算子過載 3 遞增運算子過載
作用 通過過載遞增運算子,實現自己的整型資料 include include using namespace std 自定義整型 class myinteger 過載前置 運算子 myinteger operator 返回引用為了一直對乙個資料進行遞增操作 過載後置 運算子 myinteger op...
C 類與物件 運算子過載
在某些特殊的運算情況下,以正常的運算方法不匹配時,就可以使用運算子過載 注意 當過載運算子一樣的時候,類內作為友元的只放乙個就可以了 標頭檔案 include class computer 實現cpp檔案 include computer.h include computer computer in...
學習 類和物件 運算子過載
什麼是運算子過載?運算子過載概念 對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別 對於個人而言,學到這裡的感受就是,多了一種能夠自定義方式來進行運算的方式吧,通過類似語法糖的效果operator 來自動實現相應的操作 號運算子過載 作用 實現兩個自定義資料型別相加的運算 在 號運...