c++重载ostream的实现

#include <iostream>
using namespace std;

class Point{
public:
	Point(int _x = 0, int _y = 0, int _z = 0):x(_x), y(_y), z(_z){}
	Point(){}
	~Point(){}
	friend ostream& operator<<(ostream &os, const Point &pd);
private:
	int x;
	int y;
	int z;
};

ostream& operator<<(ostream &os, const Point &pd){
	os << pd.x<<" "<<pd.y<<" "<<pd.z;
	return os;
}

int main() {
	Point pd(1,2,3);
	cout<<pd;
	return 0;
}

主要的注意点就是,要把函数作为class Point的友元函数,在类的外面进行定义,此外要注意return os,达到链式的作用。

时间: 2024-08-01 11:42:36

c++重载ostream的实现的相关文章

[c++primer][14]重载操作符与转换

14.1 重载操作符的定义 不能重载的操作符:.  ?:  sizeof  ::  .* 不能为任何内置类型定义额外的新的操作符:优先级和结合性是固定的:不再具备短路求值特性(不建议重载&&.||.逗号): 一般将算术和关系操作符定义为非成员函数,而将赋值操作符定义为成员: 使用重载操作符的方式: 1)  与内置类型使用操作符方式一样: 2)  也可像调用普通函数一样调用重载操作符函数,指定函数并传递适当类型适当数目的形参: item1 += item2; // expression ba

不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换

[源码下载] 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自定义类型转换 示例CppOperator.h #pragma once #include <string> using namespace std; namespace NativeDll { class CppOperator { public: string Demo(); }; } CppOperator.cpp /* * 运算符重载, 自定义类型转换 */ #include &qu

14.2. 输入和输出操作符重载

#include<iostream> #include<string> using namespace std; class sales_item { friend istream& operator>>(istream &,sales_item&); friend ostream& operator<<(ostream&,const sales_item&); public: sales_item&

友元函数实现操作符重载的应用场景-友元函数实现左移右移操作符重载

先定义一个测试类Complex,其中用成员函数的方法重载了+.-.前置++.前置--.后置++.后置--这6个运算符,当然,这6个操作符也可以用友元函数方式重载,但习惯上这些都直接用成员函数方式重载. demo #include <iostream> using namespace std; class Complex { public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } ~Complex();

重载操作符与转换

?  重载操作符的定义 重载操作符是具有特殊名称的函数:保留字operator 后接需定义的操作符号.像任意其他函数一样,重载操作符具有返回类型和形参表,如下语句: Sales_item  operator+(const Sales_item&, constSales_item&); ?  可以和不可以重载的操作符 ?  重载操作符必须具有一个类类型操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义. ?  操作符的优先级.结合性或操作数不能改变. ?  重载操作符并

复数中的运算符重载(续)

输入代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年5月11日 *版 本 号:v2.0 * *问题描述:在复数类中的运算符重载基础上 (1)再定义一目运算符 -,-c相当于0-c. (2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然. *程序输入:按要求输入两个复

C++ 流插入&quot;&lt;&lt;&quot;和流提取&quot;&gt;&gt;&quot;运算符的重载

01 流插入<<运算符的重载 C++ 在输出内容时,最常用的方式: std::cout << 1 <<"hello"; 问题: 那这条语句为什么能成立呢? cout 是什么?"<<" 运算符能用在 cout 上呢? 原因: 实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象. "<<" 能够用在 cout 上是因为,在 ostream 类对 "&

算法之美_源代码发布(5)

本文辑录了<算法之美--隐匿在数据结构背后的语言>(电子工业出版社2016年出版)一书第5~6章之代码(P149~P183).全文目录."45个算法"目录."22个经典问题目录",以及有奖捉虫活动详情请见如下链接:http://blog.csdn.net/baimafujinji/article/details/50484348 附录中的经典笔试.面试问题参考答案请见: http://blog.csdn.net/baimafujinji/article/

C++提高1 【泛型编程】函数模板 类模板

[本文谢绝转载] [泛型编程] 函数模板 为什么会有函数模板 现象: 函数的业务逻辑一样 函数的参数类型不一样 [最常用]函数模板  显式的调用 [不常用]类型推导 多个参数,参数定义了必须要用 函数模板,实现int类型数组,char字符串排序: 函数模板 与 普通函数的本质区别 函数模板 和 普通函数在一起 的调用型研究: C++是如何支持函数模板机制的? 函数模板机制结论 类模板 类模板的定义 类模板做函数的参数 类模板的派生成普通类 模板类的派生成模板类 复数类,所有函数都写在类的内部,运