C++之操作符重载和运算符重载

一、学习要点:
1.类中定义的构造器可以必须在类中声明,但定义可以在类内和类外.
2.插入器和吸取器的构造类型必须输入参数和输出参数都含有对象,这样可以不断保证右插.
3.而且输入输出中都含有流的引用,因为流靠的系统托管,
4.输入的参数为什么也为对象的引用,因为类对象占用内存较大,引用传递时,无需在栈内存中开辟空间以装载临时对象,也省去了复制的耗时过程,为了避免改变形参的内容,还需配以const加以修饰。
5.函数参数为对象引用,可以不用在开辟在栈中开辟空间,也省去了类对象的复制时间,高效,但这样是不安全的,容易改变类对象的值,安全起见,在类对象前面加上const,既保证高效性,有保证安全性.
6.关于流引用的理解,重载输入输出操作符函数,会修改操作你的流,而流是全局的,不是临时变量,是系统托管的。如果不返回引用,第二次插入操作将会导致插入到那个临时的流对象,而显示的会是那个全局的流,所以就看不到b了.
7.一个类的成员函数想访问另一个类的成员变量,这个类的成员函数必须声明为另一个类的友元函数.
二、代码实现
友元函数部分:
声明部分

friend istream& operator>>(istream&,Complex &i);
friend ostream& operator<<(ostream&,Complex &c)

定义部分

istream& operator>>(istream& input,Complex &i){
input>>i.real>>i.image;
return input;
}
ostream& operator<<(ostream& output,Complex &c){
output<<"("<<c.real<<"+"<<c.image<<"i"<<")"<<endl;
return output;

}

可运行版完整代码:

#include<iostream>
#include<stdlib.h>
using namespace std;
class Complex{
public:
    Complex():real(0),image(0){};//构造器的函数定义是在类中,使用的是内联函数
    Complex(int r,int i):real(r),image(i){};//构造器的函数定义是在类中,使用的是内联函数
    Complex(int r):real(r),image(0){};
    Complex operator+(Complex &c);
    friend istream& operator>>(istream&,Complex &i);//输入输出属于另一个类的成员函数
    friend ostream& operator<<(ostream&,Complex &c);
private:
    int  real;
    int image;
};
Complex Complex::operator+(Complex &c){
    return Complex(c.real+real,c.image+image);
}

istream& operator>>(istream& input,Complex &i){
    cout<<"please input real and image";
    input>>i.real>>i.image;//重载未完成之前,>>还是流的输入函数
    return input;
}
ostream& operator<<(ostream& output,Complex &c){
    output<<"("<<c.real<<"+"<<c.image<<"i"<<")"<<endl;//重载未完成之前,还是流的输出函数
    return output;
}
int main(){
    Complex c1,c2;
    Complex c3(1);
    cin>>c1>>c2;
    cout<<c1+c2<<endl;
    cout<<c3<<endl;
    system("pause");
    return 0;
}

三、代码运行结果
这里写图片描述
四、注意事项:
1.C++中一切皆对象,对象引用不仅可以节省时间还有空间,为保证对象的安全,多采用在引用之前加const,变引用双向传递为单向传递.
2.重载主要看函数的输入参数,而决定调用那个函数,像上面的例子,<<中重载函数中又有<<不是递归调用,而重载函数中的<<操作对象发生了变化,调用的不是重载本身,调用的是正常的输入函数.
3.流类是系统托管.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值