c语言operator,C++操作符(Operator)用法(new和重载)

关于operator, 在 < the c++ programing language > 里的描述,可以用做overload的如下:+ * / % ^ & | ~ ! = < > += = *= /= %= ^= &= |= << >> >>= <<= == != <=

>= && || ++ >* , > [] () new new[] delete delete[]

返回类型 operator 运算符号(参数说明),例如上例中对加法的重载: COperator operator +(COperator &op);

C++中规定,运算符中参数说明是内部类型时,不能重载。运算符重载过程中不会改变改运算符的运算优先级。

2、运算符重载的参数

运算符重载的参数,往往是初学者难以掌握的。其实很简单:参加运算的所有变量都是运算符的参数。比如说加法重载过程中,有两个参与的变量:加数和被加数。那我们就认为对它进行重载的过程中需要两个参数。需要指出的增量运算符有两种形式,前增量(运算符在变量前面)和后增量。前增量我们可以把他看做只有一个参数,而后增量我们可以看为a++1。事实上他是两个参数。只是在运算过程中,第二个参数我们不用而已。运算符的重载有两个方式,一种是做为成员函数,另一种是做为友元函数。第一种C++默认省略第一个参数(事实上是对象本身),而后一种是所有的参数都要写全。比如对加法的重载:

成员方式为:COperator operator +(COperator &op);在调用的过程中我们可以理解为result = operator+(op)

友元方式为:friend COperator operator - (COperator &op1,COperator &op2);

在调用的过程中我们可以理解为result = operator-(op1,op2);

注:上面的理解方式可以看出,除了在调用形式上不同,重载的运算符和普通的函数是等效的。

C++中没有对重载函数的返回值做太多的限制。为了使调用都能够理解你所重载的函数,不会产生二义性。一般来讲重载运算符的返回值会是该类的对象或是该类对象的引用。在C++中所有函数(包括重载的运算符)在返回的过程中会构建一个返回类型的临时对象。当函数执行完之后,这个对象会消失。应该说它是C++中生命周期最短的变量。值得指出的是,系统构建这个临时对象的过程中会调用COPY构造函数。关于这一点笔都会在另一个话题中说明。重载返回值是返回引用还是返回一个对象是由我们需要决定的。为了不让调用者曲解,如果在运算过程中改变了参与运算的变量的值往往我们返回引用,如果不改变的话我们返回对象。例如:在加法重载中,两个参与运算的变量都没有改变,所以我们就要返回一个新的对象,而不是两个对象中的一个。(不要返回一个局部引用,会出错的)。而在前增量运算的过程中,返回的是我们改变后的对象,这样直接返回引用就可以的。

重载运算符坚持4个“不能改变”:

不能改变运算符操作数的个数;

不能改变运算符原有的优先级;

不能改变运算符原有的结合性;

不能改变运算符原有的语法结构。

4 实例代码

代码举例1:class Test {

private:

int internalData;

public:

// constructor and destructor

Test(int data = 0) : internalData(data) {};

Test(const Test & Para) : internalData(Para.internalData) {};

~Test() {};

// Operator overlording

Test & operator += (const Test & Para1);

Test operator + (const Test & Para1);

};

Test & Test::operator += ( const Test & Para1 )

{

internalData += Para1.internalData;

return * this;

}

Test Test::operator + (const Test & Para1)

{

return Test(*this) += Para1;

}

示例代码2:class COperator

{

public:

int a;

int b;

public:

COperator (void);

COperator (COperator &op);

~COperator (void);

//操作符重载

COperator operator +(COperator &op);

friend COperator operator - (COperator &op1,COperator &op2);

COperator &operator ++ (int);

COperator operator ++();

};

#include ".opartor.h"

#include

using namespace std;

COperator::COperator(void)

{

}

COperator::~COperator(void)

{

}

COperator::COperator(COperator &op)

{

this->a = op.a;

this->b = op.b;

cout << "COPY构造被调用"<

}

COperator COperator::operator +(COperator &op)

{

COperator temp;

temp.a = this->a + op.a;

temp.b = this->b + op.b;

cout << "重载加法被调用"<

return temp;

}

COperator operator -( COperator &op1,COperator &op2)

{

COperator temp;

temp.a = op1.a - op2.b;

temp.b = op1.b - op2.b;

cout << "友元重载减法被调用" <

return temp;

}

COperator COperator::operator ++()

{

COperator temp(*this);

(this->a)++;

(this->b)++;

cout << "右增量被调用" <

return temp;

}

COperator &COperator::operator ++(int)

{

cout << "左增量被调用" <

(this->a)++;

(this->b) ++;

return *this;

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值