二元运算符重载
Posted wanghao-boke
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二元运算符重载相关的知识,希望对你有一定的参考价值。
以非成员函数方式重载运算符
/*** overtwo.cpp ***/ #include<iostream> using namespace std; class Box public: Box(double l = 2.0,double b = 2.0,double h = 2.0) length = l; breadth = b; height = h; double getVolume() return length*breadth*height; private: double length; double breadth; double height; friend Box operator+(const Box& a,const Box& b); ; Box operator+(const Box& a,const Box& b) Box box; box.length = a.length+b.length; box.breadth = a.breadth+b.breadth; box.height = a.height + b.height; return box; int main() Box box1(3.3,1.2,1.5); Box box2(8.5,6.0,2.0); Box box3; double volume = 0.0; volume = box1.getVolume(); cout << "Volume of box1 : " << volume << endl; volume = box2.getVolume(); cout << "Volume of box2 : " << volume << endl; box3 = box1 + box2; volume = box3.getVolume(); cout << "Volume of box3 : " << volume << endl; return 0;
运算结果:
exbot@ubuntu:~/wangqinghe/C++/20190808$ g++ overtwo.cpp -o overtwo
exbot@ubuntu:~/wangqinghe/C++/20190808$ ./overtwo
Volume of box1 : 5.94
Volume of box2 : 102
Volume of box3 : 297.36
当两个对象相加时是没有顺序要求的,但是要重载+让其与一个数字相加有顺序要求,可以通过加一个友元函数使另一个顺序的输出合法。
/*** overfriend.cpp ***/ #include<iostream> using namespace std; class A private: int a; public: A(); A(int n); A operator+(const A &obj); A operator+(const int b); friend A operator+(const int b,A obj); void display(); ; A::A() a = 0; A::A(int n) a = n; A A::operator +(const A& obj) //重载+号,用于对象相加 return this->a+obj.a; A A::operator+(const int b) //对象和数相加 return A(a+b); A operator+ (const int b, A obj) // 友元函数调用第二个重载+的成员函数,相当于obj.operator(b) return obj+b; void A::display() cout << a << endl; int main() A a1(1); A a2(2); A a3,a4,a5; a1.display(); a2.display(); int m = 1; a3 = a1 + a2; //可以调换顺序,相当于a3=a1.operator+(a2); a3.display(); a4 = a1 + m; //加了一个友元函数可调换顺序 a4.display(); a5 = m + a1; a5.display(); return 0;
运算结果:
exbot@ubuntu:~/wangqinghe/C++/20190808$ ./overfrined
1
2
3
2
2
以上是关于二元运算符重载的主要内容,如果未能解决你的问题,请参考以下文章