c++类模板之友元函数
前言:自从开始学模板了后,小编在练习的过程中。常常一编译之后出现几十个错误,而且还是那种看都看不懂那种(此刻只想一句MMP)。于是写了便写了类模板友元函数的用法这篇博客。来记录一下自己的学习。
普通友元函数的写法:
第一种:(直接上代码吧)
#include <iostream>
#include <string> using namespace std; template<class T>
class Person{
public:
Person(T n)
{
cout << "Person" << endl;
this->name = n;
}
~Person()
{
cout << "析构函数" << endl;
}
//友元函数
/********************************/
template<class T>
friend void print(Person<T> &p);
/*******************************/
private:
T name;
}; //友元函数
template<class T>
void print(Person<T> &p)
{
cout << p.name << endl;
} int main()
{
Person<string>P("XiaoMing");
print(P); system("pause");
return ;
}
第二种方法:
#include <iostream>
#include <string> using namespace std; //方法二必不可缺的一部分
/**************************************/
template<class T> class Person;
template<class T> void print(Person<T> &p);
/****************************************/
template<class T>
class Person{
public:
Person(T n)
{
cout << "Person" << endl;
this->name = n;
}
~Person()
{
cout << "析构函数" << endl;
}
//友元函数
/********************************/
friend void print<T>(Person<T> &p);
/*******************************/
private:
T name;
}; //友元函数
template<class T>
void print(Person<T> &p)
{
cout << p.name << endl;
} int main()
{
Person<string>P("XiaoMing");
print(P); system("pause");
return ;
}
运算符重载中的友元函数:
方法一:
#include <iostream>
#include <string> using namespace std; template<class T>
class Person{
public:
Person(T n)
{
cout << "Person" << endl;
this->name = n;
}
~Person()
{
cout << "析构函数" << endl;
}
//友元函数
/********************************/
template<class T>
friend ostream& operator<<(ostream &os, Person<T> &p);
/*******************************/
private:
T name;
}; //运算符重载
template<class T>
ostream& operator<<(ostream &os, Person<T> &p)
{
os << p.name << endl;
return os;
} int main()
{
Person<string>P("XiaoMing");
cout << P << endl;
system("pause");
return ;
}
方法二:
#include <iostream>
#include <string> using namespace std; template<class T>
class Person{
public:
Person(T n)
{
cout << "Person" << endl;
this->name = n;
}
~Person()
{
cout << "析构函数" << endl;
}
//友元函数
/********************************/
//template<class T>
friend ostream& operator<<<T>(ostream &os, Person<T> &p);
/*******************************/
private:
T name;
}; //运算符重载
template<class T>
ostream& operator<<(ostream &os, Person<T> &p)
{
os << p.name << endl;
return os;
} int main()
{
Person<string>P("XiaoMing");
cout << P << endl;
system("pause");
return ;
}
c++类模板之友元函数的更多相关文章
- C++ 类模板二(类模版与友元函数)
//类模版与友元函数 #include<iostream> using namespace std; template<typename T> class Complex{ p ...
- C++学习笔记(2)----类模板和友元
当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定 ...
- c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别
一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...
- error LNK2019 无法解析的外部符号------类模板和内敛函数
今天用类模型实现一个单链表,开始是.h和.cpp将类模板的声明与实现分开写的,结果总是报错: 错误 error LNK2019: 无法解析的外部符号 ?$SingleList@H@@QAE@XZ),该 ...
- C++模板类中友元函数的写法
首先,已声明好的类Triangle file://Triangle.h template<class T> class Triangle{ public: Triangle(T width ...
- [Reprint] C++函数模板与类模板实例解析
这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下 本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...
- C++学习之函数模板与类模板
泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思.泛型编程最初诞生于C++中,目的是为了实现C++ ...
- C++函数模板&类模板
函数模板 模板概念及语法 主要目的,简化代码,减少重复代码.基本语法格式: template<class T> 或者 template<typename T> //末尾不加分 ...
- C++ 模板常见特性(函数模板、类模板)
背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量. C++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...
随机推荐
- Excel2010取消隐藏的工作簿
背景 Excel 2010文件,其中包含针对业务需要涉及的计算器等,其中一个Worksheet用于存放计算器用到的常量,针对业务人员(即此Excel文件的用户)是隐藏的,并有密码保护. 现象 因业务变 ...
- WPF 中的OpenFileDialog和 OpenFolderDialog
OpenFolderDialog: using (var dialog = new System.Windows.Forms.FolderBrowserDialog() { SelectedPath ...
- OneNet平台初探成功
1.经过半个月的研究,终于成功对接OneNet平台,实现远程控制LED灯的亮灭 2.在调试的过程中也遇到了很多问题,做一下总结 3.硬件:STM32F103C8T6的最小系统板,ESP8266-WiF ...
- Sublime Text 的使用笔记
Sublime Text 是一个代码编辑器(Sublime Text 2,3是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner ...
- 2.Spring——maven依赖
1.spring-core 2.spring-context 3.spring-orm 4.spring-web spring-webmvc others pmo demo1 pmo demo2 1. ...
- 开源一款私藏Management Studio插件,ProjkyAddin,送给所有使用SQLServer的园友们
ProjkyAddin 是一款Management Studio 插件,安装包才500多kb,兼容SSMS 2005.SSMS 2008.SSMS 2008 R2.SSMS 2012.SSMS 201 ...
- linux ubuntu 本地镜像 软件源 制作方法
1.配置当前软件源,镜像非常大,所以首先要配置一下载速度快的软件源http://fffo.blog.163.com/blog/static/2119130682014322104136601/2.安装 ...
- js拼接字符串,字符串转数组
想要把字符串按一定的规则拼起来如 1,2,3 var a = []; a.push(1); a.push(2); a.push(3); a.join(','); =>> 1,2,3 想要把 ...
- RHEL7:如何配置I / O调度程序
介绍 I / O调度程序用于优化磁盘上的读/写. RHEL 7中有三种类型的I / O调度程序(也称为I / O电梯): CFQ(C fullly F air Q ueuing)促进来自实时流程的I ...
- Windows Pre-commit hook for comment length Subversion
@echo off :: Stops commits that have empty log messages. @echo off setlocal rem Subversion sends thr ...