c++运算符重载总结

1、运算符重载的本质是函数重载。


2、具体格式:
函数类型 operator 运算符名称(形参表列)    
{    
    重载实体;        
}


3、举例:
const    Complex    operator+(const    Complex    &c1,const    Complex    &c2);
我们会说,operator+ 重载了运算符+ 。


4、重载的规则:
    
    4.1 C++不允许用户自己定义新的运算符,只能对已有的 C++运算符进行重载。
    
    4.2 不能重载的运算符只有 4 个:(.成员选择符 .*成员对象选择符 ::域解析操作符 ?:条件操作符)
    
    4.3 重载不能改变运算符运算对象的个数。比如+需要两个参数,重载后也是一样的。
    
    4.4 重载不能改变运算符的优先级别。
    
    4.5 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数。
    
    4.6 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。
    也就是说,参数不能全部是 C++的标准类型,以防止用户修改用于标准类型数据成员的运算符的性质。
    下面这样是不对的:
    int operator + (int a,int b) 
    {
        return(a-b); 
    }
    原来运算符+的作用是对两个数相加,现在企图通过重载使它的作用改为两个数相减。
    如果允许这样重载的话,如果有表达式 4+3,它的结果是 7 还是 1 呢?显然,这是绝对要禁止的。
    
    4.7 运算符重载函数可以是类的成员函数,也可以是类的友元函数,还可以是普通函数。


5、一个特例总结:

//前++的成员函数
    Complex & operator++() // c1.operator++()
    {
        this->a++;
        this->b++;

        return *this;
    }

//后++成员函数
    const Complex operator++(int)
    {
        Complex temp(this->a, this->b);

        a++;
        b++;
        return temp;
    }

6、以重载+为例,看下具体代码:

//全局提供一个+号操作符重载
Complex operator+(Complex &c1, Complex &c2)
{
	Complex temp(c1.a + c2.a, c1.b + c2.b);
	return temp;
}

//操作符重载的成员函数
Complex operator+(Complex &another)
{
	Complex temp(this->a + another.a, this->b + another.b);
	return temp;
}

7、等号操作符:

Student & operator=(const Student & another_s)
	{
		if (this->name != NULL)
		{
			//原来有数据 需要释放
			delete[] this->name;
			this->name = NULL;
			this->id = 0;
		}
		//到这位置,之前的数据释放完毕
		this->id = another_s.id;
		int len = strlen(another_s.name);
		this->name = (char*)malloc(len + 1);
		strcpy(this->name, another_s.name);

		return *this;
	}

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值