C++學習大綱:操作符重載


C++學習大綱:操作符重載

C++ 操作符重載

操作符重載是為了運算更加符合我們在數學上的使用習慣。

1. 定義

operator

2. 原則

1)遵循已有操作符的語法,如單目只能重載成單目

2)遵循已有操作符的語義(但這個不是必須的)

3)操作符重載的實現路徑:可以是一個類的非靜態成員函數,也可以是帶有類、結構、枚舉以及它們的引用類型參數的全局函數

4)可重載的操作符

除了下面五個操作符外,其他的操作符都可以重載

"."(成員選擇符) , ".*"(間接成員選擇符),"::"(域解析符),"?:"(條件操作符),"sizeof"(數據佔用內存大小)

在操作符重載時,要注意是否會發生內存洩漏問題!!

————————————————

C++學習大綱:操作符重載

C++操作符重載的總結

1、加、減、乘、除操作符的重載

概要:重載函數放在類中,返回值類型為 Complex 類類型,參數類型為const Complex&

Complex operator +(const Complex& obj);

Complex operator -(const Complex& obj);

Complex operator *(const Complex& obj);

Complex operator /(const Complex& obj);

Complex Complex::operator +(const Complex& obj)

{

Complex ret;

ret.a = this->a + obj.a;

ret.b = this->b + obj.b;

return ret;

}

Complex Complex::operator -(const Complex& obj)

{

Complex ret;

ret.a = this->a - obj.a;

ret.b = this->b - obj.b;

return ret;

}

Complex Complex::operator *(const Complex& obj)

{

double pa = a * obj.a - b * obj.b;

double pb = a * obj.b + b * obj.a;

Complex ret(pa, pb);

return ret;

}

Complex Complex::operator /(const Complex& obj)

{

double pc = obj.a * obj.a + obj.b * obj.b;

double pa = (a * obj.a + b * obj.b) / pc;

double pb = (b * obj.a - a * obj.b) / pc;

Complex ret(pa, pb);

return ret;

}

2、 ==、!= 操作符重載

概要:重載函數放在類中,返回值類型為 bool 類型,參數類型為const Complex&

bool operator ==(const Complex& obj);

bool operator !=(const Complex& obj);

bool Complex::operator ==(const Complex& obj)

{

return (this->a = obj.a) && (this->b = obj.b);

}

bool Complex::operator !=(const Complex& obj)

{

return (!(this == &obj));

}

3、= 操作符重載

概要:重載函數只能放在類中,返回值類型為 Complex& 類型,參數類型為const Complex&

Complex& operator=(const Complex& obj);

1

Complex& Complex::operator=(const Complex& obj)

{

if (this != &obj)

{

this->a = obj.a;

this->b = obj.b;

}

return *this;

}

4、數組操作符重載

概要:重載函數只能通過類的成員函數重載,返回值類型為 int 類型,參數類型為int i,這個的返回值類型和參數類型都是不確定的。

int operator[](int i)

1

int IntArray::operator[](int i)

{

return m_pointer[i];

}

5、函數操作符重載

概要:重載函數只能通過類的成員函數重載,返回值類型為 int 類型,參數類型為(),這個的返回值類型和參數類型都是不確定的,可以定義不同參數的重載函數。

int operator()();

6、邏輯操作符重載

概要:重載函數通過全局函數函數進行重載,返回值類型為 bool 類型,參數類型不確定

bool operator &&(const Test& l, const Test& r);

bool operator ||(const Test& l, const Test& r);

bool Test::operator &&(const Test& l, const Test& r)

{

return (l.getI() && r.getI());

bool operator ||(const Test& l, const Test& r)

{

return (l.getI() || r.getI());

}

7、逗號操作符重載

概要:重載函數通過全局函數函數進行重載,返回值類型為 類引用 類型,參數類型為const Test&

Test& operator,(const Test& a, const Test& b);

1

Test& Test::operator,(const Test& a, const Test& b)

{

return const_cast< Test& >(b);

}

8、前置操作符和後置操作符

全局函數和成員函數均可進行重載(推薦成員函數重載);重載前置 ++ 操作符不需要額外的參數;重載後置 ++ 操作符需要一個 int 類型的佔位參數

Test& operator++();

Test operator++(int);

Test& Test::operator++()//前置++重載

{

++i;

return *this;

}

Test Test::operator++(int)//後置++重載

{

Test ret(i);

i++;

return ret;

}

————————————————


C++學習大綱:操作符重載

通過分享實用的計算機編程語言乾貨,推動中國編程到2025年基本實現普及化,使編程變得全民皆知,最終實現中國編程之崛起,這裡是中國編程2025,感謝大家的支持。

原文鏈接:https://blog.csdn.net/xiebs/article/details/102911267

原文鏈接:https://blog.csdn.net/haitaolang/article/details/70780374


分享到:


相關文章: