C++ 操作符重載
操作符重載是為了運算更加符合我們在數學上的使用習慣。
1. 定義
operator
2. 原則
1)遵循已有操作符的語法,如單目只能重載成單目
2)遵循已有操作符的語義(但這個不是必須的)
3)操作符重載的實現路徑:可以是一個類的非靜態成員函數,也可以是帶有類、結構、枚舉以及它們的引用類型參數的全局函數
4)可重載的操作符
除了下面五個操作符外,其他的操作符都可以重載
"."(成員選擇符) , ".*"(間接成員選擇符),"::"(域解析符),"?:"(條件操作符),"sizeof"(數據佔用內存大小)
在操作符重載時,要注意是否會發生內存洩漏問題!!
————————————————
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;
}
————————————————
通過分享實用的計算機編程語言乾貨,推動中國編程到2025年基本實現普及化,使編程變得全民皆知,最終實現中國編程之崛起,這裡是中國編程2025,感謝大家的支持。
原文鏈接:https://blog.csdn.net/xiebs/article/details/102911267
原文鏈接:https://blog.csdn.net/haitaolang/article/details/70780374
閱讀更多 中國編程2025 的文章