模拟所有的int
#include<iostream>
//模拟所有的int
class Integer
{
public:
Integer(int num = 0) :_num(num) {}
// & 取地址运算符 空类中默认生成
// * 空类中默认生成
//无法重载的运算符
// :: 域运算符 ?: 三目运算符 .直接成员访问运算符 sizeof
//Integer &operator=(const Integer& other)
//{
// std::cout << "Integer& operator=(const Integer& " << _num << " )" << std::endl;
// _num = other._num;
// return *this;
//}
Integer& operator=(int num)
{
std::cout << "Integer& operator=(int " << num << " )" << std::endl;
_num = num;
return *this;
}
Integer&operator+(int num)
{
Integer temp = _num; //使用临时变量,否则加后本身为自增
temp._num += num;
return *this;
}
//友元是一种特殊的机制,不属于当前类的任何一个成员函数
//使用对象是不能.出来的
//主要用于运算符的重载
friend Integer&operator+(int num, Integer&me)
{
Integer temp=me._num;
temp._num += num;
return me;
}
Integer& operator++() // 前++
{
_num += 1;
return *this;
//std::cout << "operator++()" << std::endl;
}
Integer& operator++(int) //后++
{
Integer temp = *this;
_num += 1;
return temp; //返回+之前的临时对象
//std::cout << "operator++(int)" << std::endl;
}
bool operator==(const Integer& other)const
{
return _num == other._num;
}
friend std::ostream& operator <<(std::ostream& os, const Integer &me)
{
os << me._num;
return os;
}
friend std::istream&operator >> (std::istream&lhs, const Integer&rhs)
{
lhs >> rhs._num;
return lhs;
}
int GetNum()
{
return _num;
}
private:
int _num;
};
int main()
{
Integer demo = 10,other=20;
demo = other = 100;
//other = 100;==> other.operator=(100);
//demo = other;==> demo.operator=(other);
//===> demo.operator=(other.operator=(100))
//Integer& operator=(int 20) 先调用other
//Integer& operator=(const Integer&)10 再调用默认的
demo = 100 + other + 1000;
// friend operator+
// operator+(int)
// 赋值
return 0;
}