C++运算符重载

重载关键词: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");
}

你可能感兴趣的:(C++,c++,开发语言)