c++ 操作符<<重载

原创
2014/12/07 13:51
阅读数 40
  • CheckoutRecord.h

/*
 * CheckoutRecord.h
 *
 *  Created on: 2014-12-7
 *      Author: blade
 */

#ifndef CHECKOUTRECORD_H_
#define CHECKOUTRECORD_H_

#include <iostream>
using namespace std;

class CheckoutRecord {
public:
	CheckoutRecord();
	CheckoutRecord(string title,double bookId);
	virtual ~CheckoutRecord();
	friend ostream& operator<<(ostream&, const CheckoutRecord&);

private:
	double bookId;
	string title;
	pair<string, string> borrower;
};

#endif /* CHECKOUTRECORD_H_ */

  • CheckoutRecord.cpp

/*
 * CheckoutRecord.cpp
 *
 *  Created on: 2014-12-7
 *      Author: blade
 */

#include "CheckoutRecord.h"

using namespace std;

CheckoutRecord::CheckoutRecord() {
	// TODO Auto-generated constructor stub

}

CheckoutRecord::CheckoutRecord(string title,double bookId):title("ddd"),bookId(33){
	this->title = title;
	this->bookId = bookId;
}


CheckoutRecord::~CheckoutRecord() {
	// TODO Auto-generated destructor stub
}


ostream& operator<<(ostream& out, const CheckoutRecord& cr){

	out << cr.bookId << "\t" << cr.title <<
			"\t" << cr.borrower.first <<
			"\t" << cr.borrower.second ;
	return out;
}


  • main.cc

/*
 * main.cc
 *
 *  Created on: 2014-12-7
 *      Author: blade
 */
#include <iostream>

#include "example/CheckoutRecord.h"

using namespace std;

int main(){
	pair<string,string> borrower;
	CheckoutRecord cr("ddd",33);

	cout << cr;

}

说明:c++primer4 指导原则:

  1. 赋值(=)、下标([])、调用(())和成员访问箭头等操作符必须定义为成员,将这些操作符定义为非成员变量函数将在编译时标记为错误。

  2. 像赋值一样,复合赋值操作符通常应该定义为类成员,与赋值不同的是,不一定非得这样做,如果定义非成员复合赋值操作符,不会出现编译错误。

  3. 改变对象状态与给定类型紧密联系的其他一些操作符,如自增、自减和解引用,通常应定义为类成员。

  4. 对称的操作符,如算术操作符,相等操作符、关系操作符和位操作符符,最好定义为普通非成员函数。

本文章参考了:<<c++ primer>>第4版

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部