C++学习(8)(运算符重载)

运算符有很多,比如: + - * / << >> += -= [] ++ -- = ()
编写代码时要依次确定以下问题:

  1. 是作为类的成员函数还是作为友元函数?一般单目运算符用成员函数,双目运算符用友元函数,我认为友元函数更清晰明了.
  2. 返回值类型是什么?有的是对象,有的是对象的引用,有的是基本数据类型,还有插入析取运算符固定的返回ostream istream类对象。要注意返回对象时是系统调用一些构造函数,拷贝了一份该对象的副本,缺点在于浪费时间空间,一般返回对象的引用。但是如果要返回的是局部对象(临时对象),就必须返回对象本身,因为它会在函数结束时被销毁,引用就变成野指针了.
  3. 形参是什么形式?一般用对象的引用,避免调用拷贝构造函数。根据情况使用const限定符.

值得一提的几个实例:
一、析取运算符,插入运算符

    //实现复数类的输出读入
    friend ostream &operator<<(ostream &os, Complex &a)
	{
   
   	    os<<a.r<<"+"<<a.i<<"i"<<endl;
    	return os;
	}
    friend istream &operator>>(istream &is, Complex &a)
    {
   
    	is>>a.r>>a.i;
   	    return is;
	}

二、下标运算符

//多用于数组对象
class Array
{
   
private:
    int *a;
    int size;
public:
    Array(int *b,int n);
    ~Array(){
   delete []a;}
    int & operator[](int i){
   return a[i];}
};
Array::Array(int *b,int n)
{
   
    a = new int[n];
    for(int i = 0;i<n;i++)
        a[i] = b[i];
    size = n;
}
int main()
{
   
    int b[10]={
   1};
    Array arr(b,10);
    for(int i = 0;i<10;i++)
        cout<<arr[i]<<endl;
    arr[9] = 100;
    cout<<arr[9]<<endl;
}

三、自加自减运算符

这里要注意是后置还是前置,后置要有一个int形参(C++的规定);后置是要改变对象后还能返回原值,所以只能新建一个局部对象,并且返回对象本身,千万不能返回引用

例题:
时间类的流插入、提取和递增、递减运算
封装一个时间类Time,在类上重载以下运算符,使得main()函数能够正确运行。
流插入操作符“>>”,按照输入格式从标准输入读取三个整数:hh,mm,ss,分别表示时、分、秒,其值在int范围内。
流提取操作符“
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值