当前位置:  开发笔记 > 编程语言 > 正文

为什么不会cout <<使用重载*运算符?

如何解决《为什么不会cout<<使用重载*运算符?》经验,为你挑选了1个好方法。

我正在创建我的第一堂课,主要由Overland的C++ Without Fear引导.我已经制作了重载的朋友ostream operator <<,它工作得很好.我也重载了*运算符,这很好用.当我尝试直接输出*运算符的结果时,什么不起作用:

BCD bcd(10);  //bcd is initialised to 10
BCD bcd2(15); //bcd2 is initialised to 15
cout << bcd;  //prints 10
bcd2 = bcd2 * 2; //multiplies bcd2 by 2
cout << bcd2; //prints 30

cout << bcd * 2 //SHOULD print 20, but compiler says
//main.cpp:49: error: no match for 'operator<<' in 'std::cout << BCD::operator*(int)(2)'

有关信息,这是我的原型:

BCD operator*(int z);
friend ostream &operator<<(ostream &os, BCD &bcd);

据我所知,operator*返回一个BCD,因此operator <<应该能够打印它.请帮忙!



1> Eclipse..:

正在发生的bcd * 2是生成一个临时的BCD,不能绑定到BCD &.尝试<<使用以下方法之一替换运算符:

friend ostream &operator<<(ostream &os, const BCD &bcd);

要么

friend ostream &operator<<(ostream &os, BCD bcd);

甚至

friend ostream &operator<<(ostream &os, const BCD bcd);

第一个工作,因为绑定临时变量到常量引用是明确允许的,不像绑定到非const引用.其他的工作是制作临时变量的副本.

编辑:正如评论中所述 - 在大多数情况下更喜欢const和版本,因为修改流媒体操作符中的对象对于使用您的类的任何人都会感到惊讶.要编译它可能需要const在适当的时候向类成员函数添加声明.

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有