模板类中使用友元
2018-03-08 19:44
120 查看
#include<iostream> using namespace std; //不要滥用友元 //类前声明 template<class T>class Preson; template<class T> void PrintPerson(Preson<T>& p); template<class T> class Preson{ public: Preson(T age, T id); /*windows下写: template<class T> friend ostream& operator<<(ostream&os, Preson<T>&p); 可以,而在Linux下报错,这是因为编译器的差异; 而写成这样都可以: friend ostream& operator<<<T>(ostream&os, Preson<T>&p); */ template<class T> friend ostream& operator<<(ostream&os, Preson<T>&p); //普通友元函数 /*windows下写: template<class T> friend void PrintPerson(Preson<T>& p); 可以,而在Linux下报错,这是因为编译器的差异; 而写成这样都可以: 先在类外做一个类外声明 friend void PrintPerson<T>(Preson<T>& p); */ friend void PrintPerson<T>(Preson<T>& p); void show(); private: T mAge; T mID; }; template<class T>//记住添加 Preson<T>::Preson(T age, T id)/*Preson::Preson(T age, T id)这样写错误,类内编写不需要添, 添加说明是个具体类,实现时可以传进参数类型*/ { this->mID = id; this->mAge = age; } //重载左移运算操作符 template<class T> ostream& operator<<(ostream&os, Preson<T>&p) { os << "Age:" << p.mAge << " ID:" << p.mID << endl; return os; } template<class T>//记住添加 void Preson<T>::show(){ cout << "Age:" << mAge << " ID:" << mID << endl; } template<class T> void PrintPerson(Preson<T>& p) { cout << "Age:" << p.mAge << " ID:" << p.mID << endl; } void test01() { Preson<int>p(10, 20); p.show(); cout << p; PrintPerson(p); } int main() { test01(); return 0; }
相关文章推荐
- 友元模板类使用
- C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数 和友员非模版函数!使用不当出现编译错误:无法解析的外部符号…
- C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数
- -C++中模板类使用友元模板函数
- C++中模板类使用友元模板函数
- 友元模板类使用
- 模板类中使用友元模板函数
- 模板函数以及模板类的使用
- (选做)-模板类中使用友元函数
- 单利 Singleton 模板类的使用
- 使用模板类,实现用两个栈模拟队列的功能
- 模板类的使用方法
- 在VC6里把偏特化后的模板类(或者整个模板类族)声明为另一个类的友元的方法
- 模板类之间的友元关系实现Blob和BlobPtr
- 一个可复用的C++ 3阶实方阵类和4阶实方阵类(兼容与扩展了DX中的4阶实方阵类);四元数(quaternion)模板类的使用
- 从模板和友元看类模板的使用
- c++模板类的简单使用