25 个解决方案
#1
往上顶一下,请有志之士来回答。
#2
比如说我们可以用一个非成员函数来实现对自定义类型的自加,如:
void operator++(A&r){r.x++;}
那么1+1是不是可看作是operator+(1,1)呢?
我们知道,C++禁止对内置运算符进行重载,那么假如取消这个禁止的话,是不是可以看作如上的函数呢?
void operator++(A&r){r.x++;}
那么1+1是不是可看作是operator+(1,1)呢?
我们知道,C++禁止对内置运算符进行重载,那么假如取消这个禁止的话,是不是可以看作如上的函数呢?
#3
楼主的这些问题
《c++ prime plus》第十一章 使用类 第一节 操作符重载
当中有简单的介绍。
我就不大段大段的打字了。
《c++ prime plus》第十一章 使用类 第一节 操作符重载
当中有简单的介绍。
我就不大段大段的打字了。
#4
抱歉我翻遍了这本书,也没有找到一点对这个问题有帮助的资料。请看清题目再回答。
#5
如果C++允许对内置运算符进行重载,那么1+1是否可看作是如下调用:
operator+(1,1);
operator+(1,1);
#6
不一样。函数结束以后有序列点,副作用必须计算完毕。内置类型的运算没有这个特征。
#7
序列点是否可看作是一个断点,为什么&&、||、?:和,这几个运算符才有序列点?
#8
比如说定义一个operator++(),执行x+y的操作(x和y的类型为int),不知道可以吗?
-------------------------------------------------------------------------------------
不可以
第一、重载操作符不能违背原先的句法规则, ++规定只有1个参数
第二、重载操作符必须至少有1个参数是用户定义类型。
内置类型的操作符是怎么定义的?
--------------------------------
这个我不清楚。
operator函数称之为重载运算符函数,是不是类的内部自动生成了这样的函数,我们定义了这样的函数就是重载?
-------------------------------------------------------------------------------------------------
类的内部只自动生成2个和操作符有关的函数,1个是=赋值,1个是&取地址。
其他能够被重载(有的运算符不能重载,比如:: sizeof 等)的运算符必须要用户自己完成相关函数的实现。
所谓的重载,是针对基本类型的操作符的功能来说的。是功能上的重载,而不是函数的重载。
#9
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
#10
数组不是用户自定义类型,不能用。
#11
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
#12
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
枚举类型本来就能做算术运算的吧,运算的时候会提升成int,返回的值是int
重载还真没试过。
枚举类型也属于内置类型的。
#13
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
枚举类型本来就能做算术运算的吧,运算的时候会提升成int,返回的值是int
重载还真没试过。
枚举类型也属于内置类型的。
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
#14
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
#15
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
我刚才测试枚举参数有问题,是不是可以推倒该书的论断,即operator函数只能用于自定义类型,而应该是operator函数只能用于类类型,因为用在其他类型中会有问题,比如说枚举类型,或者自定义的数组类型,
#16
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
好了,是失误,枚举类型没问题,测试了一下,居然union类型也没问题,晕呼。还有什么是自定义类型?
#17
为什么要重载内置类型的操作符??
#18
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
亲测 可以用在结构体里边
#19
哈哈哈哈哈。
#20
标准
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
An operator function shall either be a non-static member function or be a non-member function and have
at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an
enumeration. It is not possible to change the precedence, grouping, or number of operands of operators.
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
#21
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
亲测 可以用在结构体里边
#22
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
#23
运算符重载不能改变内置内型。
++
标准An operator function shall either be a non-static member function or be a non-member function and have
at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an
enumeration. It is not possible to change the precedence, grouping, or number of operands of operators.
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
++
#24
比如说定义一个operator++(),执行x+y的操作(x和y的类型为int),不知道可以吗?内置类型的操作符是怎么定义的?operator函数称之为重载运算符函数,是不是类的内部自动生成了这样的函数,我们定义了这样的函数就是重载?
原因是非自定义内置类型的全局运算符函数已经由编译器隐含声明了,客户不能自行声明,客户只能进行重载。
#25
重载就是函数重名。定义了和其他函数同名的函数。
内置类型的运算符由编译器,隐性定义。
虽然编译器可能,并没有真的实现内置类型的运算符函数。但是编译器可以对每一种内置类型执行运算(
编译期计算,如常量表达式的计算,以及一些对一些变量计算的优化),
并且可以为内置类型的表达式,安排对应的运算代码。
可以视为,内置类型的 operator 函数,都已经由编译器实现了定义。
这样,你为自己定义的类型,定义operator 函数,就是函数重名了,所以就是重载了。
内置类型的运算符由编译器,隐性定义。
虽然编译器可能,并没有真的实现内置类型的运算符函数。但是编译器可以对每一种内置类型执行运算(
编译期计算,如常量表达式的计算,以及一些对一些变量计算的优化),
并且可以为内置类型的表达式,安排对应的运算代码。
可以视为,内置类型的 operator 函数,都已经由编译器实现了定义。
这样,你为自己定义的类型,定义operator 函数,就是函数重名了,所以就是重载了。
#1
往上顶一下,请有志之士来回答。
#2
比如说我们可以用一个非成员函数来实现对自定义类型的自加,如:
void operator++(A&r){r.x++;}
那么1+1是不是可看作是operator+(1,1)呢?
我们知道,C++禁止对内置运算符进行重载,那么假如取消这个禁止的话,是不是可以看作如上的函数呢?
void operator++(A&r){r.x++;}
那么1+1是不是可看作是operator+(1,1)呢?
我们知道,C++禁止对内置运算符进行重载,那么假如取消这个禁止的话,是不是可以看作如上的函数呢?
#3
楼主的这些问题
《c++ prime plus》第十一章 使用类 第一节 操作符重载
当中有简单的介绍。
我就不大段大段的打字了。
《c++ prime plus》第十一章 使用类 第一节 操作符重载
当中有简单的介绍。
我就不大段大段的打字了。
#4
楼主的这些问题
《c++ prime plus》第十一章 使用类 第一节 操作符重载
当中有简单的介绍。
我就不大段大段的打字了。
抱歉我翻遍了这本书,也没有找到一点对这个问题有帮助的资料。请看清题目再回答。
#5
如果C++允许对内置运算符进行重载,那么1+1是否可看作是如下调用:
operator+(1,1);
operator+(1,1);
#6
不一样。函数结束以后有序列点,副作用必须计算完毕。内置类型的运算没有这个特征。
#7
不一样。函数结束以后有序列点,副作用必须计算完毕。内置类型的运算没有这个特征。
序列点是否可看作是一个断点,为什么&&、||、?:和,这几个运算符才有序列点?
#8
比如说定义一个operator++(),执行x+y的操作(x和y的类型为int),不知道可以吗?内置类型的操作符是怎么定义的?operator函数称之为重载运算符函数,是不是类的内部自动生成了这样的函数,我们定义了这样的函数就是重载?
比如说定义一个operator++(),执行x+y的操作(x和y的类型为int),不知道可以吗?
-------------------------------------------------------------------------------------
不可以
第一、重载操作符不能违背原先的句法规则, ++规定只有1个参数
第二、重载操作符必须至少有1个参数是用户定义类型。
内置类型的操作符是怎么定义的?
--------------------------------
这个我不清楚。
operator函数称之为重载运算符函数,是不是类的内部自动生成了这样的函数,我们定义了这样的函数就是重载?
-------------------------------------------------------------------------------------------------
类的内部只自动生成2个和操作符有关的函数,1个是=赋值,1个是&取地址。
其他能够被重载(有的运算符不能重载,比如:: sizeof 等)的运算符必须要用户自己完成相关函数的实现。
所谓的重载,是针对基本类型的操作符的功能来说的。是功能上的重载,而不是函数的重载。
#9
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
#10
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
#11
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
#12
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
枚举类型本来就能做算术运算的吧,运算的时候会提升成int,返回的值是int
重载还真没试过。
枚举类型也属于内置类型的。
#13
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
数组不是用户自定义类型,不能用。
那枚举类型呢?我写了个操作枚举类型的程序,有问题,请问问题在哪里呢?
enum open{one,two,three};
int operator+(open r1,open r2){return r1+r2;}
int h=one+two;
cout<<h<<endl;
枚举类型本来就能做算术运算的吧,运算的时候会提升成int,返回的值是int
重载还真没试过。
枚举类型也属于内置类型的。
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
#14
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
#15
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
我刚才测试枚举参数有问题,是不是可以推倒该书的论断,即operator函数只能用于自定义类型,而应该是operator函数只能用于类类型,因为用在其他类型中会有问题,比如说枚举类型,或者自定义的数组类型,
#16
那为啥有的书说:重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。
从这段话可以看出,可以给重载操作符提供一个枚举类型的操作数呀,怎么我刚才的程序有异常?这不是说明不行吗?
我看的书少,很多细节我都不清楚。
好了,是失误,枚举类型没问题,测试了一下,居然union类型也没问题,晕呼。还有什么是自定义类型?
#17
为什么要重载内置类型的操作符??
#18
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
亲测 可以用在结构体里边
#19
哈哈哈哈哈。
#20
标准
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
An operator function shall either be a non-static member function or be a non-member function and have
at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an
enumeration. It is not possible to change the precedence, grouping, or number of operands of operators.
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
#21
operator函数只能用在类类型中?不能用在其他类型中?比如说数组类型等等。
亲测 可以用在结构体里边
#22
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!
单步类的实例“构造”或“复制”或“作为函数参数”或“作为函数返回值返回”或“参加各种运算”或“退出作用域”的语句对应的汇编代码几步后,就会来到该类的“构造函数”或“复制构造函数”或“运算符重载”或“析构函数”对应的C/C++源代码处。
VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。
不要迷信书、考题、老师、回帖;
要迷信CPU、编译器、调试器、运行结果。
并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。
任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!
有人说一套做一套,你相信他说的还是相信他做的?
其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗?
不要写连自己也预测不了结果的代码!
#23
运算符重载不能改变内置内型。
++
标准An operator function shall either be a non-static member function or be a non-member function and have
at least one parameter whose type is a class, a reference to a class, an enumeration, or a reference to an
enumeration. It is not possible to change the precedence, grouping, or number of operands of operators.
顺便c++认为union是一种特殊的class
操作符重载不能改变结合方向,优先级和参数个数
++
#24
比如说定义一个operator++(),执行x+y的操作(x和y的类型为int),不知道可以吗?内置类型的操作符是怎么定义的?operator函数称之为重载运算符函数,是不是类的内部自动生成了这样的函数,我们定义了这样的函数就是重载?
原因是非自定义内置类型的全局运算符函数已经由编译器隐含声明了,客户不能自行声明,客户只能进行重载。
#25
重载就是函数重名。定义了和其他函数同名的函数。
内置类型的运算符由编译器,隐性定义。
虽然编译器可能,并没有真的实现内置类型的运算符函数。但是编译器可以对每一种内置类型执行运算(
编译期计算,如常量表达式的计算,以及一些对一些变量计算的优化),
并且可以为内置类型的表达式,安排对应的运算代码。
可以视为,内置类型的 operator 函数,都已经由编译器实现了定义。
这样,你为自己定义的类型,定义operator 函数,就是函数重名了,所以就是重载了。
内置类型的运算符由编译器,隐性定义。
虽然编译器可能,并没有真的实现内置类型的运算符函数。但是编译器可以对每一种内置类型执行运算(
编译期计算,如常量表达式的计算,以及一些对一些变量计算的优化),
并且可以为内置类型的表达式,安排对应的运算代码。
可以视为,内置类型的 operator 函数,都已经由编译器实现了定义。
这样,你为自己定义的类型,定义operator 函数,就是函数重名了,所以就是重载了。