c++类运算符重载
1.1 重载()增加val值
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
auto operator () (int y)
{
cout<<val+y<<endl;
return val+y;
}
private:
int val;
};
int main()
{
Str x(4);
x(2);
}
1.2 输出结果
6
2.1 重载+,相加两个对象val值
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
Str operator + (Str x)
{
Str res(0);
res.val = x.val + val;
cout<<res.val<<endl;
return res;
}
private:
int val;
};
int main()
{
Str x(4);
Str y(1);
Str z=x+y;
}
2.2 输出结果
5
3.1 重载<<,返回引用以便于使用<<连续输出,使用friend关键字能够使用私有变量val
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
friend auto& operator << (ostream& ostr, Str input)
{
ostr << input.val;
return ostr;
}
private:
int val;
};
int main()
{
Str x(4);
cout<<x<<endl;
}
3.2 输出结果
4
4.1 重载=实现复制
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
Str& operator= (const Str& input)
{
val = input.val;
cout<<val<<endl;
return *this;
}
private:
int val;
};
int main()
{
Str x(4);
Str z(1);
z=x;
}
4.2 输出结果
4
5.1 重载[],第一种重载非常量,支持读写,第二种重载常量仅支持读
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
int& operator[] (int id)
{
return val;
}
int operator[] (int id) const
{
return val;
}
private:
int val;
};
int main()
{
Str x(4);
cout<<x[0]<<endl;
x[0]=1;
cout<<x[0]<<endl;
const Str y(9);
cout<<y[0]<<endl;
}
5.2 输出结果
4
1
9
6.1 重载前缀++,前缀++更容易实现
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
Str& operator++()
{
++val;
return *this;
}
private:
int val;
};
int main()
{
Str x(4);
++x;
}
6.2 输出结果
7.1 重载后缀++,实现先运算再自加,不能返回自己的引用
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
Str operator++(int)
{
Str tmp(*this);
++val;
return tmp;
}
private:
int val;
};
int main()
{
Str x(4);
Str y = x++;
}
7.2 输出结果
8.1 重载int
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
operator int() const
{
return val;
}
private:
int val;
};
int main()
{
Str x(4);
int a=x;
cout<<a<<endl;
}
8.2 输出结果
4
9.1 重载==、>两种重载方式均可
#include <iostream>
using namespace std;
class Str
{
public:
Str(int x):val(x)
{}
friend bool operator == (Str obj1, Str obj2)
{
return obj1.val==obj2.val;
}
bool operator > (Str obj)
{
return val>obj.val;
}
private:
int val;
};
int main()
{
Str x(4);
Str y(4);
cout<<(x==4)<<endl;
cout<<(x==y)<<endl;
cout<<(x>y)<<endl;
}
9.2 输出结果
1
1
0