前言:自从开始学模板了后,小编在练习的过程中。常常一编译之后出现几十个错误,而且还是那种看都看不懂那种(此刻只想一句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++类模板之友元函数的更多相关文章

  1. C++ 类模板二(类模版与友元函数)

    //类模版与友元函数 #include<iostream> using namespace std; template<typename T> class Complex{ p ...

  2. C++学习笔记(2)----类模板和友元

    当一个类包含一个友元声明时,类与友元各自是否是模板是相互无关的.如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定 ...

  3. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  4. error LNK2019 无法解析的外部符号------类模板和内敛函数

    今天用类模型实现一个单链表,开始是.h和.cpp将类模板的声明与实现分开写的,结果总是报错: 错误 error LNK2019: 无法解析的外部符号 ?$SingleList@H@@QAE@XZ),该 ...

  5. C++模板类中友元函数的写法

    首先,已声明好的类Triangle file://Triangle.h template<class T> class Triangle{ public: Triangle(T width ...

  6. [Reprint] C++函数模板与类模板实例解析

    这篇文章主要介绍了C++函数模板与类模板,需要的朋友可以参考下   本文针对C++函数模板与类模板进行了较为详尽的实例解析,有助于帮助读者加深对C++函数模板与类模板的理解.具体内容如下: 泛型编程( ...

  7. C++学习之函数模板与类模板

    泛型编程(Generic Programming)是一种编程范式,通过将类型参数化来实现在同一份代码上操作多种数据类型,泛型是一般化并可重复使用的意思.泛型编程最初诞生于C++中,目的是为了实现C++ ...

  8. C++函数模板&类模板

    函数模板 模板概念及语法 主要目的,简化代码,减少重复代码.基本语法格式:  template<class T> 或者 template<typename T> //末尾不加分 ...

  9. C++ 模板常见特性(函数模板、类模板)

    背景 C++ 是很强大,有各种特性来提高代码的可重用性,有助于减少开发的代码量和工作量. C++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...

随机推荐

  1. opencv3.2.0图像处理之均值滤波blur API函数

    ##.均值滤波:blur函数 ##函数原型 : ,-),int borderType=BORDER_DEFAULT) (参数详解同boxFilter函数) /**********新建Qt控制台程序** ...

  2. 手动解除联合的ArcGIS Server

    ArcGIS Server可以通过和Portal联合,组建WebGIS系统. 假如已经联合的ArcGIS Server已经无法访问,例如服务器宕机了,或者网络断开了.需要手动解除联合的ArcGIS S ...

  3. linux centos7最小化安装桥接模式网络设置、xshell、xftf

    一.网络连接设置1.桥接模式 使用电脑真实网卡,可以和自己的电脑连接,也可以和外部网络连接2.NAT模式 使用wmware network adapter vmnet8虚拟网卡,可以和自己的电脑连接, ...

  4. 4.使用bat调用可执行jar文件

    一.项目需求 1.maven工程 2.有properties配置文件. 3.有内部jar包 二.简单的是实现实例 1.项目文件放置 注意:如果是web工程,我们会将jar文件当到我们项目WEB-INF ...

  5. Kubernetes简述

    一.Kubernetes特性 1.自动装箱 建构于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于一点以提高资源利用率. 2.自 ...

  6. [UI] 精美UI界面欣赏[4]

    精美UI界面欣赏[4]

  7. Windows下使用Git Bash上传项目到GitHub

    http://blog.csdn.net/qq_28304687/article/details/69959238?locationNum=8&fps=1

  8. 如何创建一个Quartz.NET的工作,需要注射autofac

    问题: 使用 Quartz.Net 做定时任务时,实现IJob对象的服务,Autofac不会自动注入,使用构造函数会直接出现异常,无法执行Execute方法. 解决方式 方法一: 使用 Autofac ...

  9. Eclipse解决运行、启动缓慢问题思路

    我的Eclipse近几天运行时速度奇慢,具体表现为: 1.只要ECLIPSE启动后,硬盘灯就狂闪,不停的读盘: 2.发布TOMCAT经常在0%: 3.偶尔CPU占满: 网上讲优化的文章无数,但是总是有 ...

  10. python pandas dataframe 操作记录

    从数据看select出数据后如何转换为dataframe df = DataFrame(cur.fetchall()) 如何更改列名,选取列,进行groupby操作 df.columns = ['me ...