c++中什么是 *** 作符函数?

c++中什么是 *** 作符函数?,第1张

   *** 作函数就是在重载 *** 作符的时候需要对 *** 作符进行重新定义的函数。

  比如,要多+ *** 作符进行重新定义:

  int operator +(int a,int b)

  {

  reurn a+b;

  }

  形式与实现过程与普通的函数非常相似,只是在使用时形势不大一样。

   *** 作符:指令系统的每一条指令都有一个 *** 作符,它表示该指令应进行什么性质的 *** 作。不同的指令用 *** 作符这个字段的不同编码来表示,每一种编码代表一种指令。组成 *** 作符字段的位数一般取决于计算机指令系统的规模。

这句的意思,我理解是:你可以把运算符重载作为成员函数;或者做一个这个类的全局运算符重载函数。

区别:

如果是单目运算,只能用类内成员函数;

如果是双目运算,两者都可以。

不过全局的有个好处,在你做双目运算时,不用考虑那个在前,那个在后。

例子:

全局:

A operator+(const A& a1,const A& a2)

{

cout<<"test"<<endl;

int sum = a1data+a2data;

return A(sum);

}

如果是类内成员函数,双目运算符重载的话,参数就只有一个了。

大多数C++运算符可以重载。运算符重载是一种形式的C++多态。运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。

单目运算符重载:

单目运算符只有一个 *** 作数,如!a,-b,&c,p,还有最常用的++i和--i等。由于单目运算符只有一个 *** 作数,因此运算符重载函数只有一个参数,如果运算符重载函数作为成员函数,则还可省略此参数。

下面以自增运算符”++“为例,介绍单目运算符的重载。

[例] 有一个Time类,包含数据成员minute(分)和sec(秒),模拟秒表,每次走一秒,满60秒进一分钟,此时秒又从0开始算。要求输出分和秒的值。

可以看到:在程序中对运算符“++”进行了重载,使它能用于Time类对象。“++”和“--”运算符有两种使用方式,前置自增运算符和后置自增运算符

针对“++”和“--”这一特点,C++约定,在自增(自减)运算符重载函数中,增加一个int型形参,就是后置自增(自减)运算符函数。

双目运算符重载:

双目运算符(或称二元运算符)是C++中最常用的运算符。双目运算符有两个 *** 作数,通常在运算符的左右两侧,如3+5,a=b,i<10等。在重载双目运算符时,不言而喻在函数中应该有两个参数。

[例] 定义一个字符串类String,用来存放不定长的字符串,重载运算符“==”、“<”和“>”,用于两个字符串的等于、小于和大于的比较运算。

有了这个基础后,再增加其他必要的内容。现在增加对运算符重载的部分。为便于编写和调试,先重载一个运算符“>”。程序如下:

程序运行结果为1。

这只是一个并不很完善的程序,但是,已经完成了实质性的工作了,运算符重载成功了。其他两个运算符的重载如法炮制即可。

。。。看来是初学者。。。

有几点建议:

1 把=重载成显示信息很不合理,毕竟=通常是用来赋值的。建议输出信息可以用成员函数代替。或者重载<<也可以。

2 既然重载了>,那么<也有必要重载下。

3 对于< == 等这类双目运算符重载的时候,如果定义为成员函数,通常是函数的都有一个此类型的形参的引用。

4 重载运算符的话,你最起码要在类里面声明下吧。

#include<iostream>

using namespace std;

class Date

{

public:

Date(){ month=01;day=01;}

Date(int m,int d){ month=m;day=d;}

void setDate(int m,int d);

void Display();

bool operator==(const Date &MyDate);

void operator>(const Date &MyDate);

private:

int month;

int day;

};

void Date::setDate(int m,int d)

{

month=m;

day=d;

}

bool Date::operator==(const Date &MyDate)

{

if(month == MyDatemonth && day == MyDateday)

return true;

else return false;

}

void Date::operator>(const Date &MyDate)

{

if(month > MyDatemonth)

cout<<"The first input date is bigger than later"<<endl;

else if(month == MyDatemonth)

{

if(day > MyDateday)

cout<<"The first date is bigger than later"<<endl;

else

cout<<"The first date is smaller than later"<<endl;

}

else

cout<<"The first date is smaller than later"<<endl;

}

void Date::Display()

{

cout<<"The Date is"<<month<<" "<<day<<endl;

}

int main()

{

return 0;

}

//否决了你重载=的想法,自己定义个函数输出吧。

//重载==没什么好说的,返回值bool型的。至于>的重载,其实是不太好重载的,毕竟Date有两个参数,理论上来说返回值最好也设置成为bool型的,这样比较合理。至于什么时候返回false,什么时候返回true,你自己修改下吧。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/11676288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存