社区
C语言
帖子详情
关于运算符重载的问题,求教
DelphiBegin
2003-08-21 12:01:30
构造一个复数类(complex类)。使其能够进行复数的关系运算:= =和 !=;复数的输入和输出运算。创建完这个类之后,请编一个程序进行各项的验证。
请大家帮帮忙 我刚学c++ 对这个不是很清楚 看了论坛上Kusk的文章 C++入门解惑(1)——浅析cout 后 有一点了解 但还不是会做啊 希望各位大虾帮帮我 给个源代码看下 不胜感激!!!!!
...全文
127
15
打赏
收藏
关于运算符重载的问题,求教
构造一个复数类(complex类)。使其能够进行复数的关系运算:= =和 !=;复数的输入和输出运算。创建完这个类之后,请编一个程序进行各项的验证。 请大家帮帮忙 我刚学c++ 对这个不是很清楚 看了论坛上Kusk的文章 C++入门解惑(1)——浅析cout 后 有一点了解 但还不是会做啊 希望各位大虾帮帮我 给个源代码看下 不胜感激!!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nirvana_li
2003-08-23
打赏
举报
回复
这里有一些运算符重载的实例:
myString + yourString 可以连接两个 std::string 对象
myDate++ 可以增加一个 Date 对象
a * b 可以将两个 Number 对象相乘
a[i] 可以访问 Array 对象的某个元素
x = *p 可以反引用一个实际“指向”一个磁盘记录的 "smart pointer" —— 它实际上在磁盘上定位到 p 所指向的记录并返回给x。
ttlb
2003-08-23
打赏
举报
回复
多谢ppm07(浩浩白水)
fancy123
2003-08-22
打赏
举报
回复
建议参照 Thinking C++.
ppm07
2003-08-22
打赏
举报
回复
to ttlb(小鸟):
我对这几条规则的理解是这样的:
1。“+=”的运算速度要比相应的“+”快(“+”的函数要返回一个副本,而“+=”只返回一个引用),所以为了优化程序,建议使用“+=”;而“+”的可读性强,适宜在不影响整体速度而又要求可读性强的代码中使用。
2。用友员重载算术运算符的原因是防止以下代码出问题(如果把它作为了类成员函数重载):
Complex a(3,4);
Complex b(5,6);
Complex c;
c = a + b; //没问题
c = a + 10; //可能也没问题
c = 10 + a; //肯定有问题
3。很显然,防止不必要的构造和析构函数的调用。
4。也很明显,就不多讲了。
有理解不当的地方,请高人指点。
ppm07
2003-08-22
打赏
举报
回复
to ttlb(小鸟):
bool operator!=(Complex &c1, Complex &c2)
{
return !(c1 == c2);
}
//////////////////////////////////////////////
你这样做得话首先要保证Complex类的==运算符已经得到了重载,否则就会报错的。
qhgary
2003-08-22
打赏
举报
回复
up
ttlb
2003-08-21
打赏
举报
回复
up
ttlb
2003-08-21
打赏
举报
回复
请问Tangyongkang(匆匆):
把你的operator!= 改写如下,可以吗?或者有什么不妥或者不符合规范的地方吗?
bool operator!=(Complex &c1, Complex &c2)
{
return !(c1 == c2);
}
ttlb
2003-08-21
打赏
举报
回复
回复人: Polarislee(北极星) ( ) 信誉:105 2003-08-21 14:19:00 得分:0
对于算术运算符的重载,有以下几点需要注意:
1,重载运算符前先重载对应的复合赋值运算符,比如:重载"+"前,先重载"+=",再用"+="实现"+"
2,用类成员函数重载复合赋值运算符,用友原函数重载算术运算符
3,参数应该以应用传递
4,复合赋值运算符返回对象自身的引用,算术运算符返回新对象
好多书上都这么说,为什么要这样?能解释一下吗?
panther8888
2003-08-21
打赏
举报
回复
来晚了,不知道能不能捡点分,运算符重载我比较喜欢<thinking in c++>中相应的部分,建议好好读一下。
cityvagrant
2003-08-21
打赏
举报
回复
按照我的专家门诊--》我的问题--》问题--》管理--》输入密码给分
DelphiBegin
2003-08-21
打赏
举报
回复
我是刚来这个论坛的 感谢你们解答了我问题 但我不知道怎么给分啊 真的不是不想给 是不知道怎么给, 我很抱歉 ! 请教教我啊! 真的很感谢你们 谢谢!
北极猩猩
2003-08-21
打赏
举报
回复
对于算术运算符的重载,有以下几点需要注意:
1,重载运算符前先重载对应的复合赋值运算符,比如:重载"+"前,先重载"+=",再用"+="实现"+"
2,用类成员函数重载复合赋值运算符,用友原函数重载算术运算符
3,参数应该以应用传递
4,复合赋值运算符返回对象自身的引用,算术运算符返回新对象
Tangyongkang
2003-08-21
打赏
举报
回复
// 下面是一个完整的程序。
// 建议背下来, 但千万别死背
// 运算符重载这一块儿, Thinking in C++ 讲的很清楚。好好看看
// 程序很简单,所以没加注释,抱歉
#include<iostream.h>
class Complex
{
protected :
double x;
double y;
public :
Complex( double re = 0, double im = 0)
{
x = re;
y = im;
}
Complex(Complex&c);
double GetRe() const
{
return x;
}
double GetIm() const
{
return y;
}
Complex& operator=(Complex& c);
Complex& operator+=(Complex& c);
friend Complex operator+(Complex& c1, Complex& c2);
friend ostream& operator<<(ostream &os, Complex &c);
friend bool operator ==(Complex &c1,Complex &c2);
friend bool operator !=(Complex &c1,Complex &c2);
};
Complex::Complex(Complex& c)
{
x = c.x;
y = c.y;
}
Complex& Complex::operator=(Complex &c)
{
x = c.x;
y = c.y;
return *this;
}
Complex& Complex::operator+=(Complex& c)
{
x += c.x;
y += c.y;
return *this;
}
Complex operator+(Complex& c1, Complex& c2)
{
Complex temp(c1);
temp.x += c2.x;
temp.y += c2.y;
return temp;
}
ostream& operator<<(ostream& os, Complex& c)
{
os<<"("<<c.x<<"+"<<c.y<<"i)";
return os;
}
bool operator==(Complex &c1,Complex &c2)
{
if( c2.x == c1.x && c2.y == c1.y)
return true;
else return false;
}
bool operator!=(Complex &c1, Complex &c2)
{
if( c2.x == c1.x && c2.y == c1.y)
return true;
else return false;
}
int main()
{
Complex u(1,2),v(3,4),uu(1,2);
Complex z;
z = u+v;
cout<< " u == v? ::"<<( u== v)<<endl;
cout<<" u == uu ? ::" <<(u == uu) <<endl;
cout<<u<<"+"<<v<<"="<<z<<endl;
return 1;
}
wbh0360
2003-08-21
打赏
举报
回复
运算符重载
关于c++的书上有的是,c++primer
C#:
运算符重载
C#:
运算符重载
运算符重载
允许为运算指定用户定义的运算符实现,其中一个或两个操作数是用户定义的类或结构类型。用户定义的运算符实现的优先级总是高于预定义运算符实现:仅当没有适用的用户定义运算符实现时...
Python脚本--利用
运算符重载
简化MongoDB的命令
因为每次输入MongoDB的命令都很复杂,老把自己绕迷糊了,所以写了这个小脚本 ...新手
求教
1 class ff(object): 2 def __init__(self,qq): 3 self.qq = qq 4 def __gt__(self,qq):# > 5 return ff({...
重载赋值运算符
今天是第一个
问题
重载赋值运算符,用的linux编程还不太熟悉,两天一个吧,熟悉了会加快进度,慢慢来总会熟悉的不是,遇到的诸多
问题
和解决方法也写到了下面。 第一题,题目如下: 分析: 1、函数返回值定义为...
erlang的运算符
erlang operator 备忘 ... erlang中的运算符 1)算术运算符 Arithmetic Operators 1234567891011121> +1. 1 2> -1. -1 3> 1+1. 2 4> 2/2. 1.0 5> 5 div 3. 1 6> 5 rem 3. 2 band是按位与运
求教
大数计算器(十万火急)
现在要期末考试了,老师给我们留了计算机程序设计作业,不过真的好难呀。时间紧迫,我只能
求教
...在程序中定义了一个大数类,并重载针对大数的各种运算操作符,在程序中重载输入、输出运算符,并编写两个大数类对象的
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章