重载operator<<
学习《深入探索》时,发现原文中提供的一个代码大致如下(书中第3页)
class Point3d
{
inline ostream&
operator <<(ostream& os, const Porint3d &pt)
{
...
}
};
竟然编译不过(g++)。╮(╯_╰)╭实在有点坑啊,天真的我以为都是可以编译过的,果然实践是检验真理的唯一标准。网上一堆查,发现大致有两种说法:
- 输入输出运算符一般重载为友元函数,...
- 双目运算符可以重载为友元函数,也可以重载为成员函数,...
不免疑惑,怎么个情况啊,没具体说什么时候可以,什么时候不可以啊。好吧,自己来吧。
#include <iostream>
using namespace std; class Point3d
{
private:
double x;
double y;
double z;
public:
Point3d(double tx, double ty, double tz); friend ostream&
operator <<(ostream& os, const Point3d &pt); inline ostream&
operator <<(ostream& os)
{
os<<"inline method, "<<"x: "<<x<<", y: "<<y<<", z: "<<z;
return os;
}
}; ostream&
operator <<(ostream& os, const Point3d &pt)
{
os<<"friend method, "<<"x: "<<pt.x<<", y: "<<pt.y<<", z: "<<pt.z;
return os;
} Point3d::Point3d(double tx, double ty, double tz)
{
x=tx;
y=ty;
z=tz;
} int main(void)
{
Point3d a(,,);
cout<<a<<endl;
a<<cout<<endl;
}
看着第42行代码那傲娇的样子,我只能给跪了。输出结果如下:
friend method, x: , y: , z:
inline method, x: , y: , z:
总之一句话,输入运算符>>,输出运算符<<,可以成员可以友元。
重载operator<<的更多相关文章
- 重载operator new实现检测内存泄漏是否可行
行与不行,就凭我这水平,说出来未免显示太过自大.不还,我还想根据自己的代码来讨论这个问题. 重载operator new来检测内存只的办法,那就是在new的时候记录指针地址及文件名.行号,在delet ...
- C++重载operator的示例
#include<iostream>#include<vector>using namespace std; class test{public: int v; / ...
- 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)
注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
先来说下实现思路:可以实现一个Trace类,调用 operator new 的时候就将指向分配内存的指针.当前文件.当前行等信息添加进Trace 成员map容器内,在调用operator delete ...
- 操作符重载operator
发现一篇好文: 转载: http://www.cnblogs.com/xiehongfeng100/p/4040858.html #include <iostream>#include & ...
- C++面向对象高级编程(九)Reference与重载operator new和operator delete
摘要: 技术在于交流.沟通,转载请注明出处并保持作品的完整性. 一 Reference 引用:之前提及过,他的主要作用就是取别名,与指针很相似,实现也是基于指针. 1.引用必须有初值,且不能引用nul ...
- c++重载operator的示例 非原创
#include<iostream> #include<vector> using namespace std; class test{ public: int v; /*构造 ...
- c++ 运算符重载operator
一般格式为: 函数类型 operator 运算符名称(形参列表){ 对运算符的重载 } 注意函数名是由operator和运算符组成.在上面的一般格式中,operator是关键字,是专门用于重载运算符函 ...
- C++ 操作符重载 (operator)
重载不能改变操作符的优先级 如果一个内建操作符是一元的,那么所有对它的重载仍是一元的.如果是二元的重载后也是二元的 下面看一个有代表性的例子:: 头文件Complex.h: #includeusing ...
随机推荐
- java 的sigola orm 的开发,第一次学写java,可以用在play上面
当然还是开源:https://github.com/xiaose1205/sigola 初学者有用,高手可以给点建议,勿喷啊.net转java,有些思想还没有那么快转.希望得到大家的支持啊 使 ...
- ios学习笔记(二)之Objective-C类、继承、类别和协议
二:Objective-C类与继承和协议 在前面已经提过了对象的初始化,这里首先讲的是变量. 2.1 变量 局部变量(内部变量): 局部变量是在方法内作定义说明的,其作用域仅限于方法内,离开方法后使用 ...
- opengl离屏渲染(不需要和窗口绑定,仅当作一个可以渲染一张图片的API使用)+ opencv显示
具体过程参考的是这篇BLOG: http://wiki.woodpecker.org.cn/moin/lilin/swig-glBmpContext 这一片BLOG的代码有个 BOOL SaveBmp ...
- 解析JSON、扩展Fiddler
解析JSON.扩展Fiddler 按文章结构,这部分应该给出WCFRest项目示例,我想WinForm示例足够详尽了,况且WCFRest还不需要使用插件AppDomain那一套,于是把最近写的Fidd ...
- Ubuntu13.04使用Mesa
3年前写过一些关于如何使用Mesa的文章,如今再试.有些东西已经变了. 首先安装: sudo apt-get install libgl1-mesa-dev sudo apt-get install ...
- Jquery控制点击时一、二级菜单自由隐藏与出现
一.基本HTML和CSS HTML中产生一.二级导航的代码: {loop $nav $key $value} <div class=”u_con”> <span class=” xg ...
- php的sendmail发件人邮箱设定
以前就碰到过设置发件人后缀的方式,这次迁移服务器居然忘记,从头开始记录下 1:第一种方法,修改/etc/hosts,据说sendmail使用hosts里面的本地设置域名,修复方法如下 127.0.0. ...
- 分区数据库oracle自动分区
首先声明,我是一个菜鸟.一下文章中出现技术误导情况盖不负责 oralce在linux下主动备份并删除5天前备份 导出脚本: export ORACLE_BASE=/opt/oracle ...
- WPF 自定义数字文本框:NumericBox
由于项目需要,最近写了一个数字输入文本框,在此作个备忘. 1.代码调用 <controls:NumericBox Height="32" Width="80&quo ...
- jQuery2.x源码解析(DOM操作篇)
jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) jQuery这个类库最为核心重要的功能就是DOM ...