前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++的重载流输出运算符

C++的重载流输出运算符

作者头像
一见
发布2018-08-02 09:25:24
6520
发布2018-08-02 09:25:24
举报
文章被收录于专栏:蓝天蓝天

// 下列代码输出什么? #include #include // typedef basic_ostream ostream; class A { private:     int m1,m2; public:     A(int a, int b) {         m1=a;m2=b;     }     operator std::string() const { return "str"; }     operator int() const { return 2018; } }; int main() {     A a(1,2);     std::cout << a;     return 0; }; 答案是2018, 因为类basic_ostream有成员函数operator<<(int), 而没有成员函数operator<<(const std::string&), 优先调用同名的成员函数,故输出2018,相关源代码如下: // 名字空间std中的全局函数 /usr/include/c++/4.8.2/bits/basic_string.h: template inline basic_ostream<_CharT, _Traits>& operator <<(basic_ostream<_CharT, _Traits>& __os,             const basic_string<_CharT, _Traits, _Alloc>& __str) {     return __ostream_insert(__os, __str.data(), __str.size()); } // 类basic_ostream的成员函数 //  std::cout为名字空间std中的类basic_ostream的一个实例 ostream: __ostream_type& basic_ostream::operator<<(int __n); // 下列代码有什么问题,如何修改? #include #include class A { public:     int m1,m2; public:     A(int a, int b) {         m1=a;m2=b;     }     std::ostream& operator <<(std::ostream& os) {         os << m1 << m2; return os;     } }; int main() {     A a(1,2);     std::cout << a;     return 0; }; 类basic_ostream没有成员函数“operator <<(const A&)”, 也不存在全局的: operator <<(const basic_ostream&, const A&) 而只有左操作数是自己时才会调用成员重载操作符, 都不符合,所以语法错误。 有两种修改方式: 1) 将“std::cout << a”改成“a.operator <<(std::cout)”, 2) 或定义全局的: std::ostream& operator<<(std::ostream& os, const A& a) {     os << a.m1 << a.m2; return os; }

window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档