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++ 提高代码的可重用性主要有两方面: 继承 模板 继承的特性我已在前面篇章写过了,本篇主要是说明「模板」的 ...
随机推荐
- linux 安装 zookeeper 集群
关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.servicesystemctl status firewalld ...
- Oracle Sequence Cache 参数说明
转自 http://blog.csdn.net/tianlesoftware/article/details/5995051 之前整理的一篇文章: ORACLE SEQUENCE 介绍 http:// ...
- JS JSON序列化 Ajax form表单
# JS序列化 a = {"k1":"v1"} #序列化为字符串 类似python json.dumps(a) b = JSON.stringify(a) &q ...
- OpenLDAP权限配置
安装好了openldap之后,就是对它进行配置了,其中一项就是设置访问控制,限制普通用户只能修改/访问他们能修改/访问的项.这就是ACL需要做的事情. 设置方法 1.可以将 include行放在/et ...
- Sass带来的变革_sass, scss 教程_w3cplus - Google Chrome
Sass带来的变革 作者:大漠 日期:2014-11-17 点击:5291 sass scss 接触Sass差不多有一个年头了,在这一年来的时间中,也花了不少心思在Sass的学习上.同时也让自己喜欢上 ...
- 如何监视和更新 Azure 中的 Linux 虚拟机
为确保 Azure 中的虚拟机 (VM) 正常运行,可以查看启动诊断.性能指标,并管理程序包更新. 本教程介绍如何执行下列操作: 在 VM 上启用启动诊断 查看启动诊断 在 VM 上启用诊断扩展 基于 ...
- 小鸡G4工程款 上手体验
前言:之前只是抱着试一试的态度在小鸡活动贴下报名,说实话之前并没有抱希望能够没选中.所以非常感谢小鸡团队给我的这次机会.这应该是我第一次参与厂家的内测活动.希望能给小鸡团队,给广大玩家带来一片实用的上 ...
- iOS设计模式 - 迭代器
iOS设计模式 - 迭代器 原理图 说明 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 源码 https://github.com/YouXianMing/iOS-Des ...
- 铁乐学python_day05-作业
1,有如下变量(tu是个元祖),请实现要求的功能 tu = ("alex", [11, 22, {"k1": 'v1', "k2": [&q ...
- 索引&切片 切割split
索引 s[n] # 中括号里n为一个数字 切片 s[0:9] ...