问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

关于C++重载运算符

发布网友 发布时间:2022-05-01 12:50

我来回答

2个回答

热心网友 时间:2023-10-13 08:15

所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。
运算符也可以重载
运算符重载是对已有的运算符赋予多重含义
必要性
C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)
(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
(二) C++允许重载的运算符C++中绝大部分的运算符允许重载.
不能重载的运算符只有5个:
(1) 成员访问运算符.
(2) 作用域运算符∷
(3) 条件运算符?:
(4) 成员指针运算符*
(5) 编译预处理命令的开始符号#
(三) 重载不能改变运算符运算对象(即操作数)的个数。
(四) 重载不能改变运算符的优先级别。
(五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。
(六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
(七) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。
总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。
运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:
(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
(2)单目运算符最好重载为成员函数。
(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
(4) 对于其它运算符,建议重载为友元函数。
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:
函数类型 operator 运算符名称 (形参表列)
{
对运算符的重载处理
}
重载为类成员函数时参数个数=原操作数个数-1
(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参。
将“+”、“-”运算重载为复数类的成员函数。
规则:
实部和虚部分别相加减。
操作数:
两个操作数都是复数类的对象。
#include<iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0)
{
real=r;
imag=i;
} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出显示复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex complex::operator +(complex c2) //重载函数实现
{
complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return complex(c.real,c.imag);
}
complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{ cout<<"("<<real<<","<<imag<<“i”<<")"<<endl; }
void main() //主函数
{ complex c1(5,4),c2(2,10),c3; //声明复数类的对象
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
c3=c1-c2; //使用重载运算符完成复数减法
cout<<"c3=c1-c2=";
c3.display();
c3=c1+c2; //使用重载运算符完成复数加法
cout<<"c3=c1+c2=";
c3.display();
}
程序输出的结果为:
c1=(5,4i)
c2=(2,10i)
c3=c1-c2=(3,-6i)
c3=c1+c2=(7,14i)
在本程序中对运算符“+”,”-”进行了重载,使之能用于两个复数的相加减。在该例中运算符重载函数operator+ ,operator-作为Complex类中的成员函数。
“+” ,”-”是双目运算符,为什么在程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。
可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。
在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为c1.operator+(c2)
即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex(c1.real + c2.real,c1.imag+c2.imag))。

仔细看下吧 你的问题都在里面 这是我们的PPT

热心网友 时间:2023-10-13 08:15

关于C++重载运算符,请看以下的专题:
http://bbs.data10000.com/bbs/forumdisplay.php?fid=5

热心网友 时间:2023-10-13 08:15

所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。
运算符也可以重载
运算符重载是对已有的运算符赋予多重含义
必要性
C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类)
(一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。
(二) C++允许重载的运算符C++中绝大部分的运算符允许重载.
不能重载的运算符只有5个:
(1) 成员访问运算符.
(2) 作用域运算符∷
(3) 条件运算符?:
(4) 成员指针运算符*
(5) 编译预处理命令的开始符号#
(三) 重载不能改变运算符运算对象(即操作数)的个数。
(四) 重载不能改变运算符的优先级别。
(五) 重载运算符的函数不能有默认的参数,否则就改变了运算符参数的个数,与前面第(3)点矛盾。
(六) 重载的运算符必须和用户定义的自定义类型的对象一起使用,其参数至少应有一个是类对象(或类对象的引用)。也就是说,参数不能全部是C++的标准类型,以防止用户修改用于标准类型数据的运算符的性质。
(七) 用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。
① 赋值运算符(=)可以用于每一个类对象,可以利用它在同类对象之间相互赋值。
② 地址运算符&也不必重载,它能返回类对象在内存中的起始地址。
总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。
运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:
(1)只能使用成员函数重载的运算符有:=、()、[]、->、new、delete。
(2)单目运算符最好重载为成员函数。
(3) 对于复合的赋值运算符如+=、-=、*=、/=、&=、!=、~=、%=、>>=、<<=建议重载为成员函数。
(4) 对于其它运算符,建议重载为友元函数。
运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:
函数类型 operator 运算符名称 (形参表列)
{
对运算符的重载处理
}
重载为类成员函数时参数个数=原操作数个数-1
(后置++、--除外)
重载为友元函数时 参数个数=原操作数个数,且至少应该有一个自定义类型的形参。
将“+”、“-”运算重载为复数类的成员函数。
规则:
实部和虚部分别相加减。
操作数:
两个操作数都是复数类的对象。
#include<iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0)
{
real=r;
imag=i;
} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出显示复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex complex::operator +(complex c2) //重载函数实现
{
complex c;
c.real=real+c2.real;
c.imag=imag+c2.imag;
return complex(c.real,c.imag);
}
complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{ cout<<"("<<real<<","<<imag<<“i”<<")"<<endl; }
void main() //主函数
{ complex c1(5,4),c2(2,10),c3; //声明复数类的对象
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
c3=c1-c2; //使用重载运算符完成复数减法
cout<<"c3=c1-c2=";
c3.display();
c3=c1+c2; //使用重载运算符完成复数加法
cout<<"c3=c1+c2=";
c3.display();
}
程序输出的结果为:
c1=(5,4i)
c2=(2,10i)
c3=c1-c2=(3,-6i)
c3=c1+c2=(7,14i)
在本程序中对运算符“+”,”-”进行了重载,使之能用于两个复数的相加减。在该例中运算符重载函数operator+ ,operator-作为Complex类中的成员函数。
“+” ,”-”是双目运算符,为什么在程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。
可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。
在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为c1.operator+(c2)
即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex(c1.real + c2.real,c1.imag+c2.imag))。

仔细看下吧 你的问题都在里面 这是我们的PPT

热心网友 时间:2023-10-13 08:15

关于C++重载运算符,请看以下的专题:
http://bbs.data10000.com/bbs/forumdisplay.php?fid=5
关于运算符重载,下列表述中正确的是( )。

【答案】:C 重载运算符的规则如下:①c++不允许用户自已定义新的运算符,只能对已有的c++运算符进行重载;②c++不能重载的运算符只有5个;③重载不能改变运算符运算对象的个数;④重载不能改变运算符的优先级和结合性;⑤重载运算符的函数不能有默认的参数;⑥重载的运算符必须和用户定义的自定义类型...

vc的一个运算符重载问题.

这句中,d,f都是double型,因此r势必要转换为double型,这是隐式转换,同样适用于你定义的“转换为double”的操作符重载。就是这个时候调用的函数operator double()。它的返回值减去f,然后加到d上。

关于C++重载运算符

总之,当C++语言原有的一个运算符被重载之后,它原先所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符。运算符重载可以使用成员函数和友元函数两种形式。可以参考以下的经验:(1)只能使用成员函数重载的运算符有:=、()、[]、-&gt;、new、delete。(2)单目运算符最好重载为成员函...

C++中的运算符重载,帮我详细介绍下

运算符重载为类的用户提供了更直观的接口,使类类型的对象也可以像普通变量一样进行运算符的表达式运算。运算符重载允许C/C++的运算符在用户定义类型(类)上拥有一个用户定义的意义。二、运算符重载的规则 (1)C++中的运算符除了少数几个以外,全部可以重载,而且只能重载已有的运算符。可以重载的运算符...

C++重载运算符时为什么有时候需要用&amp;,请举个形象点的例子

引用与一些操作符的重载:流操作符&lt;&lt;和&gt;&gt;,这两个操作符常常希望被连续使用,例如:cout &lt;&lt; "hello" &lt;&lt; endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个...

c++中运算符(\" &lt;&lt; \")重载ostream&amp;是什么意思

运算符重载,是对现有操作符使用于自定义用户类型的一种扩展,但具体的性质不能变,如&lt;&lt;表示流操作符左侧对象为流的本质不能变,+为两元操作符本质不能变,再如,对于-&gt;重载必须返回指针类型不可变!即,即使进行运算符重载,也只是有限自由!friend ostream &amp; operator &lt;&lt; (ostream &amp;os, const C...

C#重载运算符必须静态吗? 为什么必须是静态的?如题 谢谢了

C#要求所有的运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码体不能访问非静态类成员,也不能访问this标识符;这是可以的,因为参数提供了运算符执行任务所需要知道的所有数据。 学习C#静态函数及变量的一个精典例子与代码 (1)用于...

C++重载运算符 看看这几行代码 直接operator int() 是什么意思啊_百度...

把类型转换视为运算,operator int()是类型转换为int的运算符重载。P.S.但printf不能那么这么用,你这程序只是结果看上去是对的,但printf把b视为int可没调用operator int(),而是把b所在空间的前四个字节视为int打印出来,而你的成员变量刚好只有1个就恰巧对了。

c++运算符重载分类总结

由于C++语言支持函数重载,才能将运算符当成函数来用,C 语言就不行。我们要 以平常心来对待运算符重载:(1)不要过分担心自己不会用,它的本质仍然是程序员们熟悉的函数。(2)不要过分热心地使用,如果它不能使代码变得更加易读易写,那就别用,否则会自找麻烦。不能被重载的运算符 在C++运算符...

c++关于运算符重载的问题

1 char &amp;operator[](int i);//请说明此行的&amp;是什么作用 函数的声明,防止在没有定义函数实体之前,被早先调用致使编译错误 2 char &amp;charArray::operator[](int i)//&amp;是什么用,去掉会出错 返回的是一个char 型的变量,去掉的话返回的是char型的值。前者可以作为变量对它进行赋值。后者只是一个...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
孩子的冠姓权是怎么回事? 如何看待孩子冠姓权问题? 意定监护协议样本内容是什么? 自愿放弃监护权合同范本是怎样的? 放弃孩子监护权协议书怎么写? 自愿变更监护权协议书怎么写? 变更监护权协议书怎么写? 子女监护权变更协议范本是怎样的? 变更子女监护权协议书 宝诗龙Epure焦特普尔之蓝腕表:诠释极致经典 运算符重载必须遵循哪些原则 正压式空气呼吸器怎么使用啊,它的价格是多少啊,哪里有卖的,谁能告诉我一下,谢谢! c++运算符重载分类总结 正压式空气呼吸器6.8L气瓶,充一罐要多少钱? C++里重载了的运算符是否还保持原来的优先级别? 上海正压式空气呼吸器价格大概多少?有什么注意特点吗? 运算符重载减法运算符 巴固产的正压式呼吸器多少钱一台 C++里什么是运算符重载?在什么情况下用? C++语言对运算符重载规定了那些限制 运算符重载规则问题 什么是C++重载? C++中的运算符重载,帮我详细介绍下 c++运算符重载的调用的具体规则是怎样的?谢谢 c语言,c++,哪些运算符不能重载? 运算符重载的原则是什么? 统计学中,对于调查问卷的多项选择如何分析 问卷信效度分析,其中有多项选择题,如何进行?还有重复测试的效度分析? 您好,我想咨询一下,如果一个问卷中有包含2到多选题,如何对该问卷进行信效度分析呢? 厕所下水道堵了,陕西西乡那有捅下水道的 买一批专业的呼吸器,大家有没有什么好用的正压式呼吸器推荐? 如何制定婴儿喂养时间表 科学喂养 喂奶时间应该按开始 新生儿喂奶时间和量 新生儿记录吃奶时间。从开始记录还是吃完结束 婴儿吃奶次数及时间 国家规定喂奶时间多久 电脑安装金蝶卸载不掉怎么办 佛山市佑丰国际货运代理有限公司怎么样? 金蝶kis卸载不了总是出现如图所示 但是路径中找不到那些东西 如何彻底卸载金蝶kis应用平台 安装金蝶软件卸载不了就算是把C盘里面的文件夹删了控制面板依然还有软件卸载提示解压文件出错灾难性故障 金蝶友商应用平台卸载时,电脑提示安装程序需要下一张磁盘,为什么卸载不了? 金蝶卸载失败 提问在补充里。原文参见“它夏了夏天”的提问“控制面板没有金蝶软件,金蝶卸载不了”。 我用的WIN7,金蝶财务软件卸载不了,我删了安装目录文件,把intel32文件删了,对电脑有影响吗 我的康佳液晶电视坏了能以旧换新吗40寸 我是康佳电视忠实用户,以前用的老式的那种,还是想换成康佳的电视,请问还能以旧换新么? DVD连接海信电视怎么连接,海信电视接DVD什么都接对了,为什么没有显示没信号呢? 康佳电视以旧换新是不是真的?
  • 焦点

最新推荐

猜你喜欢

热门推荐