C++如何重载加法输出运算符重载?

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 73, 距离下一级还需 127 积分
论坛徽章:1
本帖最后由 luoage 于
18:41 编辑
小弟今天看了c++运算符重载大感惊奇,以前被多个char类型合并搞死了,遂打算使用char + char +....实现strcat的功能......
but ....世事不尽如人意啊..#include &iostream&
#include &string&
char* operator+(const char *m,const char *t){
& & & & int len = strlen(t)+strlen(m)-1;
& & & & char *buf = new char[len];
& & & & strcpy(buf,m);
& & & & strcat(buf,t);
& & & &
}
int main(){
& & & & char c[] = &abc&;
& & & & char c1[] = &abc&;
& & & & return 0;
}
复制代码错误如下&g++ char.cpp -o char.exe
char.cpp:5: `operator +(const char *, const char *)' must have an argument of cl
ass or enumerated type复制代码求解惑
&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp&&nbsp|&&nbsp
小富即安, 积分 3475, 距离下一级还需 1525 积分
论坛徽章:4
错误写得很清楚。c++标准要求运算符重载函数必须有一个参数为class、class引用、枚举或枚举引用。
白手起家, 积分 73, 距离下一级还需 127 积分
论坛徽章:1
井蛙夏虫 发表于
错误写得很清楚。c++标准要求运算符重载函数必须有一个参数为class、class引用、枚举或枚举引用。
c++说所有类型都是对象啊,char不就是类吗 ?
丰衣足食, 积分 856, 距离下一级还需 144 积分
论坛徽章:0
luoage 发表于
c++说所有类型都是对象啊,char不就是类吗 ?
哪里说的?
白手起家, 积分 73, 距离下一级还需 127 积分
论坛徽章:1
Fixend 发表于
哪里说的?
好吧,也许我被误导了
小富即安, 积分 3308, 距离下一级还需 1692 积分
论坛徽章:13
class去重载啊
小富即安, 积分 3021, 距离下一级还需 1979 积分
论坛徽章:12
不说能不能实现,你的思路就不对头,应该是string + string实现strcat啊。在C++中如何重载运算符_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
在C++中如何重载运算符
上传于|0|0|文档简介
&&C++ 运算符重载
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩13页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢欢迎加入我们,一同切磋技术。 &
用户名: &&&
密 码: &
共有 2384 人关注过本帖
标题:要求实现矩阵的加法,减法,乘法,利用重载运算符,指针完成, 急
等 级:新手上路
结帖率:100%
&&问题点数:0&&回复次数:2&&&
要求实现矩阵的加法,减法,乘法,利用重载运算符,指针完成, 急
#include &math.h&
#include &iostream.h&
const int m=2;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//设定的行数
const int n=3;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//设定的列数
&class matrix&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//矩阵类
&private: int mem[m][n];
&&&&&&&&matrix();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//无参构造函数
&&&&&&&&matrix(int a[m][n]);&&&&&&&&&&&&&&&&&&&&//含参构造函数
&friend matrix operator+(matrix &a,matrix &b);&&& //运算符加重载
&friend matrix operator-(matrix &a,matrix &b);&&& //运算符减重载
&friend matrix operator*(matrix &a,matrix &b);&&& //运算符乘重载
&void display();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//显示函数
&matrix::matrix()&&&&&&&&&&&&&&&&&&&&&&&&&&//无参时设定为零矩阵
&&& for(int i=0;i&m;i++)
&&&&&& for(int j=0;j&n;j++)
&&&&&&&&mem[i][j]=0;
&matrix::matrix(int a[m][n])&&&&&&&&&&&&&&&&&//有参时将矩阵赋值
&&& for(int i=0;i&m;i++)
&&&&&& for(int j=0;j&n;j++)
&&&&&&&&& mem[i][j]=a[i][j];
matrix operator +(matrix &a,matrix &b)&&&//加号重载时将要相加的两个矩阵的元//素依次相加后赋给第三个类并把第三个类返回
&&& matrix&&c;
&&& int i,j;
&&& for(i=0;i&m;i++)
&&&&&& for(j=0;j&n;j++)
&&& c.mem[i][j]=a.mem[i][j]+b.mem[i][j];
matrix operator -(matrix &a,matrix &b)&&//减号重载时将要相减的两个矩阵
//的元素依次相减后赋给第三个类并把第三个类返回
&&& matrix&&c;
&&& int i,j;
&&&&&& for(i=0;i&m;i++)
&&&&&& for(j=0;j&n;j++)
&&& c.mem[i][j]=a.mem[i][j]-b.mem[i][j];
matrix operator *(matrix &a,matrix &b) //乘号重载时将要相乘的两个矩阵的元素
//相乘后赋给第三个矩阵并把它返回&&
&&& matrix&&c;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&& int i,j,k;
&&& for(i=0;i&m;i++)&&&&&&&&&&&&&&&&&&&&&//先确定某一行
&&&&&&for(k=0;k&n;k++)&&&&&&&&&&&&&&&&&&//确定乘积的列
&&&&&& for(j=0;j&n;j++)&&&&&&&&&&&&&&&&&&//确定原第一个矩阵的列和第二个行
&&&c.mem[i][k]+=a.mem[i][j]*b.mem[j][k];//乘积的结果赋给第三个矩阵的某一个元素&&&&&&&&
void matrix::display()
&&& int i,j;
&&& for(i=1;i&m+1;i++)
&&&&&& cout&&&&&&&&&;
&&&&&& for(j=1;j&n+1;j++)
&&&&&&&&& cout&&mem[i-1][j-1]&&' ';
&&&&&&&&&&&if(j==n)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&//如果等于列数则换行
&&&&&&&&& cout&&
void main()
&&& int a[m][n],b[m][n];
&&& int i=0,j=0;&&&&&&&&&
&&& cout&&&输入第一个矩阵X:&&&&&&&&&&&&&&&&&&&&& //输入矩阵
&&& cout&&&*********************************&&&
&&& for(i=0;i&m;i++)
&&&&&& for(j=0;j&n;j++)
&&&&&&&&& cin&&a[i][j];
&&& cout&&&********************************&&&
&&& cout&&&输入第二个矩阵Y:&&&&&&&&&&&&&&&&&&&&& //输入矩阵
&&& for(i=0;i&m;i++)
&&&&&& for(j=0;j&n;j++)
&&&&&&&&& cin&&b[i][j];
&&& cout&&&*******************************&&&&&&&&&//输出第一个矩阵
&&& matrix x(a),y(b);
&&& cout&&&x=&&&
&&& x.display();
&&& cout&&&*******************************&&&&&&&&&//输出第二个矩阵
&&& cout&&&y=&&&
&&& y.display();
&&& cout&&&********************************&&&&&&&&&//输出矩阵的和
&&& cout&&&x+y=&&&
&&& (x+y).display();
&&& cout&&&********************************&&&&&&&&&//输出矩阵的差
&&& cout&&&x-y=&&&
&&& (x-y).display();
&&& cout&&&********************************&&&&&&&&&//输出矩阵的积
&&& cout&&&x*y=&&&
&&& (x*y).display();
&&& cout&&&********************************&&&
最后为什么乘法会实现不了啊
有没有高手能重新鞋一个出来啊
[ 本帖最后由 新生儿宝贝 于
14:21 编辑 ]
搜索更多相关主题的帖子:
等 级:新手上路
因为这两个矩阵不能乘
等 级:等待验证会员
帖 子:128
专家分:720
附件: 您没有浏览附件的权限,请
C++ 用无参数构造函数生成对象时候请勿在构造函数后添加无用的那一对括号,否则有可能会被当成函数声明而忽略,嗯,栈上构建的时候就是这样。
版权所有,并保留所有权利。
Powered by , Processed in 0.048036 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reserved学习,从教程网开始!
部分带宽赞助
Copyright & 2016
All Rights Reserved. By在C++随处可见operator重载运算,目前正处于学习C++中,谨以此记录。
什么是函数重载
函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这样的函数称为重载函数。重载函数通常用来命名一些功能相似的函数,这样可减少函数命名的数量,避免命名空间的混乱不堪。
函数重载的作用
不言而喻, 不仅可以节省宝贵的命名空间,而且可以使得同一个函数实现多种不同功能。
实例,对运算符重载
对运算符的重载定义如下:Box operator+(const Box &); 其中Box表示返回类型,+是要重载的运算符号,小括号内的为参数列表。
#include &iostream&
class complex {
complex():real(0.0),image(0.0) {};
complex(double a,double b):real(a),image(b){};
friend complex operator+(const complex &A,const complex &B);
friend complex operator-(const complex &A,const complex &B);
friend istream & operator&&(istream &in,complex &A);
friend ostream & operator&&(ostream &out,complex &A);
//重载加法运算符
complex operator+(const complex &A,const complex &B)
complex C;
C.real = A.real + B.
C.image = A.image + B.
//重载减法
complex operator-(const complex &A,const complex &B)
complex C;
C.real = A.real - B.
C.image = A.image - B.
//重载输入
istream &operator&&(istream &in,complex &A)
in&&A.real&&A.
ostream & operator && (ostream &out, complex &A) //如果没有重载,就不会输入复数的
out && A.real&&"+"&&A.image&&"i"&&
int main ()
complex c1,c2,c3;
cin&&c1&&c2;
c3 = c1 + c2;
cout&&"c1 + c2="&&c3&&
c3= c1 - c2;
cout&&"c1 -c2= "&&c3&&
cout&&"c1 is:"&&c1&&
上面的重载运算符实现了复数的加减和输入输出功能。
再来看一个更好玩的(引自实验室“扫地僧”)
#include &iostream&
class boss {
boss(const char *str) {info =}
boss(string s) {info =}
boss operator+(const boss &b) {
if (!pare("习大") && !pare("奥黑")) {
return boss("安倍好捉急!");
return boss(this-&info + b.info);
//注意:这里为public成员,所以"operator&&"不必声明为类的友元函数
ostream & operator&&(ostream &os, const boss &b) {
os && b.info &&
int main(void)
boss xi_da("习大");
boss ao_hei("奥黑");
cout && xi_da + ao_hei &&
如果运行上面的程序,它会输出安倍好捉急,是不是很有意思!
函数重载或是运算符重载的出现,可以使得自己定制个性化的程序,并能使得同样函数名的程序实现不同的功能,总之,它的出现为人类进步做出了巨大贡献,感谢开发者!
一些相关链接:
你可能感兴趣的文章
5 收藏,2.9k
30 收藏,2.3k
1 收藏,479
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
我要该,理由是:
扫扫下载 App

我要回帖

更多关于 输出运算符重载 的文章

 

随机推荐