栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++类和对象(4):运算符重载——=、==、()函数调用运算符

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++类和对象(4):运算符重载——=、==、()函数调用运算符

赋值运算符重载:


注意第四点:C++编译器自动生成复制运算符operator=,对属性进行值拷贝;

如果类中有属性指向堆区,做赋值操作时也会出现深浅拷贝问题;

P1 = p2;


重载赋值运算符的一个重要原因是在堆区开辟了存储空间;但是赋值的过程中只是进行了浅拷贝(并未再在堆区开辟空间),所以导致堆区的数据重复释放报错;

int a=10,b = 20, c = 30;
a = b = c;
p1 = p2 = p3;

为了解决上述问题,所以重载赋值运算函数要放回引用类型;

关系运算符重载:

作用:重载关系运算符,可以让两个自定义类型对象进行对比操作;

	class Person {
public:
	bool operator==(Person &p) {
		if (this->age == p.age&&this->sex == p.sex) {
			return true;
		}
		return false;
	}
	Person(int age,string sex) {
		this->age = age;
		this->sex = sex;
	}
private:
	int age;
	string sex;
};
int main() {
	Person p1(18, "李四");
	Person p2(18,"王五");
	if (p1 == p2) {
		cout << "这两个人的年龄和名字相符;"< 

重载"==“和”!="相似;

函数调用运算符重载
  • 函数调用运算符 () 也可以重载
  • 由于重载后使用的方式非常像函数的调用,因此称为仿函数
  • 仿函数没有固定写法,非常灵活
class MyPrint {
public:
	void operator()(string text) {
		cout << text << endl;
	}
};
class MyAdd {
public:
	int operator()(int a, int b) {
		return a + b;
	}
};
int main() {
	MyPrint print;
	print("加油");
	MyAdd add;
	int sum = add(100, 50);
	cout << "sum = "< 

注:可以使用匿名对象进行调用;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号