C 類和物件 運算子的過載

2022-09-10 15:09:29 字數 3564 閱讀 2257

運算子過載概念:對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別

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 來自動實現相應的操作 號運算子過載 作用 實現兩個自定義資料型別相加的運算 在 號運...