C++学习笔记(一)

输入输出操作符重载

知识点一:

<<和>>操作符重载,不能以成员函数的形式重载,必须以独立函数的形式重载,并声明为类的友元。

知识点二:

如果形参中含有模板类,需要在声明与定义的地方加上对应模板参数的声明,比如template<typename T> 或 template<T>。

赋值操作符重载

模板类的赋值操作符重载的返回值不需要使用命名空间限制。具体见下面代码中赋值操作符重载的类外定义。

例子

头文件

#include <iostream>

typedef enum {
	RB_RED,
	RB_BLACK
}RBColor;

template <typename T> class BinNode {
	// 知识点一:
	// <<和>>操作符重载,不能以成员函数的形式重载,必须以独立函数的形式重载,并声明为类的友元。
	// 知识点二:
	// 如果形参中含有模板类,需要在声明与定义的地方加上对应模板参数的声明,比如
	// template<typename T> 或 template<T>.
	template<typename T>
	friend std::ostream& operator<<(std::ostream& os, BinNode<T> const& bn);
	public:
		// data
		BinNode<T>* parent;
		BinNode<T>* left;
		BinNode<T>* right;
		T data;
		unsigned int height;
		RBColor color; // red-black tree

		// interface
		BinNode():parent(nullptr), left(nullptr), right (nullptr), height(0), data(0), color(RB_RED) {}
		BinNode(T d, BinNode<T>* p = nullptr, BinNode<T>* l = nullptr, BinNode<T>* r = nullptr, unsigned int h = 0, RBColor c = RB_RED) : data(d), parent(p), left(l), right(r), height(h), color(c) {}

		// operator
		bool operator<(BinNode<T> const& bn) { return data < bn.data; }
		bool operator==(BinNode<T> const& bn) { return data == bn.data; }
		bool operator>(BinNode<T> const& bn) { return data > bn.data; }
		//BinNode<T>& operator=(BinNode<T> const& bn);
		//std::ostream& operator<<(BinNode<T> const& bn);
};

template <typename T> 
BinNode<T>& BinNode<T>::operator=(BinNode<T> const& bn) { // 返回值不需要使用BinNode<T>::BinNode<T>&的形式,即不需要加命名空间
 this->parent = bn.parent;
 this->left = bn.left;
 this->right = bn.right;
 this->color = bn.color;
 this->data = bn.data;
 return *this;
}

template <typename T>
std::ostream& operator<<(std::ostream& os, BinNode<T> const& bn) {
	os << "parent:\t" << bn.parent << std::endl;
	os << "left child:\t" << bn.left << std::endl;
	os << "right child:\t" << bn.right << std::endl;
	os << "data:\t" << bn.data << std::endl << std::endl;
	return os;
}

 

测试代码

#include <iostream>
#include "../header/BinaryTree.h"

int main(){
	BinNode<int> bn1(5);
	BinNode<int> bn2(3);
	BinNode<int> bn0;
	int i;
	std::cout << bn1 << bn2;
	std::cout << (bn1 == bn2) << std::endl;
	std::cin >> i;
	return 0;
}

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

17 − 13 =

65 − 59 =