打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
c++学习笔记(八):运算符重载的推演
为什么要有运算符重载
先看一个例子:
[cpp] view plain copy
public:
Complex(int a, int b)
{
this->a = a;
this->b = b;
}
public:
int a;
int b;
};
void Test1()
{
{
int a = 0, b = 0;
int c = a + b;
//对于基础类型,编译已经知道如何进行加减
}
Complex c1(1, 2), c2(3, 4);
Complex c3 = c1 + c2;
system("pause");
}
程序执行时会出错。
原因 Complex是用户自定义类型。。编译器根本不知道如何进行加减。
编译器给你提供了一种机制,让用户自己去完成,自定义类型的加减操作。
这个机制就是运算符重载机制
当然我们也可以写一个全局函数来完成相加运算:
[cpp] view plain copy
//通过全局函数完成对象加
Complex add(Complex &c1, Complex &c2)
{
Complex c3(c1.a + c2.a, c1.b+c2.b);
return c3;
}
[cpp] view plain copy
void Test2()
{
{
int a = 0, b = 0;
int c = a + b;
//对于基础类型,编译已经知道如何进行加减
}
Complex c1(1, 2), c2(3, 4);
Complex c3 = add(c1, c2);
system("pause");
}
注意:此时的成员变量都是pubic。
给全局函数换个名字:
[cpp] view plain copy
Complex operator+(Complex &c1, Complex &c2)
{
Complex c3(c1.a + c2.a, c1.b+c2.b);
return c3;
}
[cpp] view plain copy
void Test3()
{
{
int a = 0, b = 0;
int c = a + b;
//对于基础类型,编译已经知道如何进行加减
}
Complex c1(1, 2), c2(3, 4);
Complex c3 = operator+(c1, c2);
system("pause");
}
程序可以仍然没有出错,调用是把函数名字换成加号看看:
[cpp] view plain copy
void Test4()
{
{
int a = 0, b = 0;
int c = a + b;
//对于基础类型,编译已经知道如何进行加减
}
Complex c1(1, 2), c2(3, 4);
Complex c3 = c1 + c2;
system("pause");
}
程序仍然可以运行没有错误。
可是平时操作的类成员一般都是私有成员(private修饰的),怎么让类外全局变量访问呢?
刚刚学到的友元函数闪亮登场了,哈哈哈。。。
[cpp] view plain copy
class Complex
{
public:
friend Complex operator+(Complex &c1, Complex &c2);
Complex(int a, int b)
{
this->a = a;
this->b = b;
}
void printCom()
{
cout<<a<<" + "<<b<<"i "<<endl;
}
private:
int a;
int b;
};
Complex operator+(Complex &c1, Complex &c2)
{
Complex c3(c1.a + c2.a, c1.b+c2.b);
return c3;
}
void main()
{
{
int a = 0, b = 0;
int c = a + b;
//对于基础类型,编译已经知道如何进行加减
}
Complex c1(1, 2), c2(3, 4);
Complex c3 = c1 + c2;
c3.printCom();
system("pause");
}
哈哈,运算符重载的基本演化先到这里吧。。
0
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
编程入门基础知识总结
这样的运算符重载总结,太爱了!
关于c++的运算符重载那些事
C++类的构建--complex(复数)类的设计过程与思考总结
C++之运算符重载(1)
C 的多态性(二)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服