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


分享到:


相關文章: