c++运算符本身就是函数,视作中缀函数,就是lef + rig,体会一下就行,那么运算符函数含义是
(- return type) (- name_of_operator) (- what type left,- what type right)
使用就是(what type left operator?? what type right)
或者官方说法是:
data1 + data2; // 普通的表达式
operator+(data1, data2); // 上面等价于调用,此时隐含一个东西是函数返回值, 但是我不知道
data1 += data2; // 基于调用+=函数的表达式
data1.operator+=(data2); // 等价于成员函数调用
! 你不应该做:逗号,取地址符,与和或运算符的重载
#include <iostream>
using namespace std;
class Test
{
private:
int a;
public:
// desc: I don't want to convert any basic type to Test implicitly
explicit Test(){} // not support implicit convert like `Test(1:int)`
// desc: this function don't belong to the Test class
friend ostream& operator<<(ostream& out, const Test test);
// desc: this is a function for add a int num by op+
int operator+(int);
// desc: to set this->a
void set_a(int);
};
ostream& operator<<(ostream& out, const Test test)
{
out << test.a << std::endl;
return out;
}
int Test::operator+(int a)
{
return this->a + a;
}
void Test::set_a(int a)
{
this->a = std::move(a);// std::move作用主要可以将一个左值转换成右值引用,从而可以调用C++11右值引用的拷贝构造函数
// cout << a << endl; a is still visitable
}
int main()
{
// Test t = 1;
// Test t{1}; is like above line
Test t;
t.set_a(1);
int b = t+1; // t.operator+(1:int)
cout << t << endl;
cout << b << endl;
return 0;
}
友元是声明式的,声明别人为我的朋友,单向性,该朋友能访问我的私有成员(含数据和函数成员)