友元的简单应用
1,对象 + 对象,或者,对象 + 数字,可以用类的成员函数去重载+号函数,但是,数字 + 对象就不能用类的成员函数去重载+号函数了,
因为编译器会把数字 + 对象翻译成数字.operator+(const 类 &对象),因为数字不是类的对象,无法传递给类的成员函数this指针。
用友元去重载:数字 + 对象
2,用友元去重载:>>运算符和<<运算符。
其实用类的成员函数也可以重载<<运算符,但是使用起来比较怪异,不能使用cout << 对象,只能使用对象 << cout。
#include <iostream>
using namespace std;
class Imaginary{
friend Imaginary operator+(int i, const Imaginary &m);
friend ostream& operator<<(ostream &os, const Imaginary &m);
friend istream& operator>>(istream &is, Imaginary &m);
public:
Imaginary():real(0), imag(0){
cout << \"c:\" << this << endl;
}
Imaginary(int real, int imag):real(real), imag(imag){
cout << \"c:\" << this << endl;
}
Imaginary operator+ (const Imaginary &m){
return Imaginary (real + m.real, imag + m.imag);
}
Imaginary operator+ (int i){
return Imaginary(real + i, imag);
}
Imaginary& operator= (const Imaginary &m){
cout << \"asign\" << endl;
if(this != &m){
real = m.real;
imag = m.imag;
}
return *this;
}
ostream& operator<<(ostream& os){
os << \"[\" << real << \",\" << imag << \"]\";
return os;
}
~Imaginary(){
cout << this << endl;
}
private:
int real;
int imag;
};
Imaginary operator+(int i, const Imaginary &m){
return Imaginary(i + m.real, m.imag);
}
ostream& operator<<(ostream &os, const Imaginary &m){
os << \"(\" << m.real << \",\" << m.imag << \")\";
return os;
}
istream& operator>>(istream &is, Imaginary &m){
is >> m.real >> m.imag;
return is;
}
int main(){
Imaginary m1(10, 20);
Imaginary m2(1, 2);
Imaginary m3 = m1 + m2;
Imaginary m4 = m1 + 10;
Imaginary m5 = 20 + m1;
cout << \"a\" << m5 << \"aa\" << endl;;
m5 << cout << \"bb\" << endl;
Imaginary m6;
cin >> m6;
cout << m6 << endl;
return 0;
} 继续阅读与本文标签相同的文章
下一篇 :
spring_boot pom.xml配置
-
2019 DevOps 必备面试题——配置管理篇
2026-05-18栏目: 教程
-
2019云栖大会 阿里云开发者峰会,议程提前一览!
2026-05-18栏目: 教程
-
开发者云计划参与规则
2026-05-18栏目: 教程
-
AES加密原理和AOE工程实践
2026-05-18栏目: 教程
-
Kubernetes 从懵圈到熟练:集群服务的三个要点和一种实现
2026-05-18栏目: 教程
