重载关键词:operator
C++运算符分为单目运算符(!、++、–)、双目运算符(+、-、*)、三目运算符(?😃,可使用operator重载运算符
使用示例
class Person
{
public:
int age;
};
void operator+ (Person& p1, Person& p2) //重载 + 运算符
{
p1.age += p2.age;
}
int main()
{
int a = 1,b = 2;
a + b;//a和b都是int类型,没有使用重载的+运算符
Person b1,b2;
b1.age = 3;
b2.age = 4;
b1 + b2; //b1,b2的类型满足重载
operator+(b1,b2); //和b1+b2等价
}
以上就是重载 + 运算符,因为是双目运算符,所以需要传入两个参数
运算符重载和函数重载类似,根据参数类型来判断使用哪个重载函数
在类中使用时默认将自身传入重载的第一个参数
class Person
{
public:
int age;
bool bFlag;
Person* operator-> () //返回对象指针
{
cout << "指针指向符重载" << endl;
return this;
}
void operator++()
{
cout << "前置++重载" << endl;
age++;
}
void operator++(int) //后置++需要在参数中传入int
{
cout << "后置++重载" << endl;
age++;
}
void operator+ (Person& p1) //+ 重载
{
p1.age += age;
}
};
int main()
{
Person p1, p2;
p1.age = 3;
p2.age = 4;
p1->age;//->被重载了,所以非指针也可以使用->
p1++; //前置++
++p1; //后置++
p1 + p2; //重载+
}
重载类型转换
class Hero
{
public:
int age;
bool bFlag;
Hero() : age(1), bFlag(false) //C++11的列表初始化
{
cout << "这是无参构造" << endl;
}
operator bool(); //重载类型转换规则bool,不能有参数,必须有一个bool类型的返回值
operator int(); //重载类型转换规则int,不能有参数,必须有一个int类型的返回值
};
Hero::operator bool()
{
return bFlag;
}
Hero::operator int()
{
return age;
}
int main()
{
Hero monkey;
bool a = monkey; //此处发生重载类型转换到bool,monkey可以当做monkey.bFlag来用
int n = monkey; //此处发生重载类型转换到int,monkey可以当做monkey.age来用
system("pause");
}