C++_重载运算符<< 使自定义数据可以用cout输出

通过重载运算符<< 输出数据注意事项不能将返回的 ostream 加上const 限定,因为返回的 ostream流对象可能还会插入其他符号如endl 等等。

出错的片段

const ostream& operator<<(ostream &output, const Point &a){
	return output << a.x << " " << a.y ;
}

正确的代码与完整测试程序:

#include <vector>
#include <iostream>

using namespace std;

struct Point{
	int x;
	int y;
};

ostream& operator<<(ostream &output, const Point &a){
	return output << a.x << " " << a.y ;
}

int main(){
	vector<Point> PointList;
	vector<Point>::iterator iter;
	//a[10] = 5;

	Point a;
	a.x = 5;
	a.y = 5;

	PointList.push_back(a);
	for (iter = PointList.begin(); iter < PointList.end(); iter++){
		cout << *iter << endl;
	}
	cout << "The sizeof vector<Point> PointList is ";
	cout << PointList.size() << endl;

	cout << 4 << endl;

	return 0;
}
测试输出

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-26 06:16:17

C++_重载运算符<< 使自定义数据可以用cout输出的相关文章

C++自学笔记_重载运算符_《C++ Primer》

#include <iostream> #include <stdexcept> using namespace std; class CheckedPtr{ public: CheckedPtr(int *b,int *e,int *c): beg(b),end(e),curr(c){ } CheckedPtr(const CheckedPtr &obj): //复制构造函数 beg(obj.beg),end(obj.end),curr(obj.curr){ } Chec

C++ 运算符重载四(自定义数组类)

//自定义数组类 #include<iostream> using namespace std; //分析:能获取数组长度,添加元素,删除元素,修改元素 //要求重载[],=,==,!=运算符 class MyArray { private: int mLength; int* mSpace; public: MyArray(int length){ cout << "有参构造函数被调用了1" << endl; mLength = length; m

C++学习27 用全局函数重载运算符

运算符重载函数既可以声明为类的成员函数,也可以声明为所有类之外的全局函数. 运算符重载函数作为类的成员函数 将运算符重载函数声明为类的成员函数时,二元运算符的参数只有一个,一元运算符不需要参数.之所以少一个参数,是因为这个参数是隐含的. 例如,上节的 complex 类中重载了加法运算符: complex operator+(const complex & A)const; 当执行: c3 = c1 + c2; 会被转换为: c3 = c1.operator+(c2); 通过 this 指针隐式

从C过渡到C++须注意的几个知识点(结构体、引用、重载运算符)

一.结构体和类(class) 下面一个使用结构体类型的例子 1 #include <iostream> 2 using namespace std; 3 struct Point{ // 声明Point结构体类型 4 double x; // 成员变量,没有使用private和public时系统默认为公有类型成员变量 5 double y; 6 }; 7 int main() 8 { 9 Point p; // 定义的p在c里称为结构体变量 10 p.x = 3.2; // 因为x是公有类型可

C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的非explicit构造函数定义一个隐式转换.当提供了实參类型的对象须要一个类类型的对象时.编译器将使用该转换. 于是:这样的构造函数定义了到类类型的转换. 除了定义到类类型的转换之外,还能够定义从类类型到其它类型的转换.即:我们能够定义转换操作符,给定类类型的对象.该操作符将产生其它类型的对象.和其它转换一样,编译器将自己主动应用这个转换. 一.转换为什么实用? 定义一个SmallInt的类,该类实现安全小整

重载运算符实例

C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.例如: class complex {  public:   complex(double r=0.0,double I=0.0){real=r;imag=I;}   void display();  private:   double real;   double imag; }; complex a(10,20),b(5,8); “a+b”运算如何实现?这时候我们需要自己编写程序来说明

c++重载运算符实验定义分数类实现分数间四则运算

实验二           自定义类型的运算 [实验目的] 理解运算符函数与运算符重载方法: 掌握运算符重载为友元函数: [实验内容] 题目: 在C++中,分数不是预先定义的,建立一个分数类,使之具有以下功能:能防止分母为0.当分数不是最简形式时进行约分及分母为负数.用重载运算符完成加法.减法.乘法.除法等四则运算. 源程序代码: #include<iostream> #include<cstdlib> using namespace std; int gcd(int m,int

C++学习之重载运算符1

C++除可重载函数之后,还允许定义已有的运算符,这样通过运算符重载可像处理数据使用它们. 先来个代码 1 #include<iostream> 2 using namespace std; 3 4 class num 5 { 6 public: 7 num(){n=1;} 8 ~num(){} 9 int get() const{return n;} 10 void set(int x){n=x;} 11 private: 12 int n; 13 }; 14 15 int main() 16

矩阵求和--重载运算符

C++习题 矩阵求和--重载运算符 [Submit][Status][Web Board] Description 有两个矩阵a和b,均为2行3列.求两个矩阵之和.重载运算符"+",使之能用于矩阵相加(如c=a+b). 重载流插入运算符"<<"和流提取运算符">>",使之能用于该矩阵的输入和输出. Input 两个2行3列矩阵 Output 矩阵之和 Sample Input 1 2 34 5 67 8 91 2 3 Sa