C++_模板类的友元运算符重载_原理
来源:互联网 发布:办理网络400电话 编辑:程序博客网 时间:2024/05/18 22:16
方法一
#include<iostream>using namespace std;template <class T>class Test{private: T num;public: Test( T n) { num=n; }friend ostream& operator<< <>(ostream &out,const Test<T> &);};template <class T>ostream& operator<< <>(ostream &out,const Test<T> &obj){ out<<obj.num; return out;};void main(){ Test<int> t(414); cout<<t;}
方法二
// 第二种格式#include <iostream>using namespace std;template<class T>class Test{public:template<class S> // 注意<class S>Sfriend ostream& operator << (ostream& out, const Test<S>& obj);Test(T n = 0) :num(n) {}Test(const Test<T>& copy){num = copy.num;}private:T num;};// 注意<class T>和<class S>都行template<class T>ostream& operator << (ostream& out, const Test<T>& obj){out << obj.num << endl;return out;}int main(){Test<int> t(2);cout << t;return 0;}
正确的写法就是代码段中的写法。<>也必不可少,其实<>有两
重意思:
一是,表明此友元函数是函数模板;
二是,此模板使用的模板类型参数为当前
模板类的类型参数class。
关于friend关键字:
· 虚函数必须是成员函数。如果f必须是虚函数,就让它成为c的成员函数。 operator>>;和operator<<;决不能是成员函数。如果f是operator>>;或operator<<;,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函数。 ·只有非成员函数对最左边的参数进行类型转换。如果f需要对最左边的参数进行类型转换,让f成为非成员函数。如果f还需要访问c的非公有成员,让f成为c的友元函数。 ·其它情况下都声明为成员函数。如果以上情况都不是,让f成为c的成员函数。
然后在类体外对友元函数进行定义,定义的格式和普通函数相同,但可以通过对象作为参数直接访问对象的私有成员。
1)必须在类的说明中说明友元函数,说明时以关键字friend开头,后跟友元函数的函数原型,友元函数的说明可以出现在类的任何地方,包括在private和public部分; 2)注意友元函数不是类的成员函数,所以友元函数的实现和普通函数一样,在实现时不用"::"指示属于哪个类,只有成员函数才使用"::"作用域符号; 3)友元函数不能直接访问类的成员,只能访问对象成员, 4)友元函数可以访问对象的私有成员,但普通函数不行; 5)调用友元函数时,在实际参数中需要指出要访问的对象, 6)类与类之间的友元关系不能继承。
0 0
- C++_模板类的友元运算符重载_原理
- C++_模板类的友元运算符重载_原理
- c++_类的运算符重载
- C++_运算符重载的注意事项
- C++_运算符重载的注意事项
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- C++_运算符重载
- Catch That Cow 杭电2717【BFS】
- HDU5348
- 蓬莱电话
- HDOJ--1728--逃离迷宫(广搜)
- Acrobat里打开时怎么快速转到上次看的位置,每次都是从0页开始,很麻烦
- C++_模板类的友元运算符重载_原理
- 南邮 OJ 1682 非递减字符串问题
- win7安装
- word文档与pdf文档的转换问题
- TCP协议详解(五)
- HDU 2703 The Bridges of San Mochti
- HDU 5344
- ImageView出现警告[Accessibility]Missing contentDescription attribute on imag
- 使用 TextView 缓存显示html页面中图片