运算符重载就是“想法转换”,他的目标是简化函数调用的方式,同一个运算符可以表达不同的功能。
例:关键字 operator + 运算符
//头文件 // Created by MrWangS7 on 2020/8/31. // #ifndef TEST3_INTEGER_H #define TEST3_INTEGER_H //自己定义的整型类,将整型封装成类,以便实现面向对象的封装 class Integer { public: Integer(); Integer(int value); //重载+运算符 Integer operator+(Integer other); int value() { return this->m_value; } ~Integer(); private: int m_value; //实际的数据 }; #endif //TEST3_INTEGER_H //------------------------------------------------------------------------------- //实现文件 // Created by MrWangS7 on 2020/8/31. // #include "Integer.h" Integer::Integer() : m_value(0){ //cotr } Integer::Integer(int value) :m_value(value){ //ctor } Integer Integer::operator+(Integer other) { Integer result(this->m_value + other.m_value); //用来返回结果对象 return result; } Integer::~Integer() { } //-------------------------------------------------------------------------------- //测试文件 #include <iostream> #include "Integer.h" using namespace std; void TestInteger(); int main() { TestInteger(); std::cout << "Hello, World!" << std::endl; return 0; } void TestInteger(){ Integer int1(1024), int2(2048), int3; int3 = int2 + int1; cout << int3.value() << endl; }不能重载的运算符: . (点运算符)、 * (成员指针访问运算符)、 :: (域运算符)、 sizeof (长度运算符)、 ? : (三元运算符/条件运算符)。
重载不能修改运算变量个数;
重载不能修改运算的优先级;
重载不能修改运算顺序;
const 修饰变量时:
1 只有一个 const 时,如果位于 * 的左侧,表示所指向的数据时常量,指向可以修改,不能修改值;
如果位于 * 的右侧,表示指针本身为常量,指向不可修改,但内容可以修改;
2 两侧都有 指向和内容都不可修改。
const 修饰引用时,不能修改引用对象的任何成员 - 好处是可以保护传递参数
使用 const 传递对象的引用时,可以起到不 copy 对象的目的(节省效率)