模板15-类模板与友元

全局函数类内实现-直接在类内声明友元即可

全局函数类外实现-需要提前让编译器知道全局函数的存在

#include <iostream>
using namespace std;
//通过全局函数打印Person的信息//提前让编译器知道Person类存在
template <class T1, class T2>
class Person;//类外实现
template <class T1, class T2>
void printPerson2 (Person <T1, T2> p)
{cout << p.m_name << " " << p.m_age << endl;
}template<class T1, class T2>
class Person
{//全局函数,类内实现friend void printPerson (Person <T1, T2> p){cout << p.m_name << " " << p.m_age << endl;}//全局函数类外实现//加空模板参数列表//如果全局函数是类外实现,需要让编译器提前知道这个函数的存在friend void printPerson2<> (Person <T1, T2> p);public:Person (T1 name, T2 age){this->m_name = name;this->m_age = age;}private:T1 m_name;T2 m_age;
};void test01 ()
{Person<string, int> p("tom", 20);printPerson(p);
}void test02 ()
{Person <string, int> p("jack", 22);printPerson2(p);
}
int main ()
{test01();test02();return 0;
}

总结:

建议全局函数做类内实现,用法简单,而且编译器可以直接识别。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/720625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序——堆排序

本节继续复习排序算法。这次复习排序算法中的堆排序。 堆排序属于选择排序。 目录 什么是堆&#xff1f; 堆排序 堆排序的思想 堆排代码 向下调整算法 堆排整体 什么是堆&#xff1f; 在复习堆排序之前&#xff0c; 首先我们需要回顾一下什么是堆 。 堆的本质其实是一个数…

C语言代码 创建一个整形数组,完成对数组的操作

创建一个整形数组&#xff0c;完成对数组的操作&#xff1a; 实现函数 init() 初始化数组为全0.实现 print() 打印数组的每个元素。实现 reverse() 函数完成数组元素的逆置。 代码示例&#xff1a; #include <stdio.h> void init(int arr[], int sz) {int i 0;for (i…

游戏引擎用什么语言开发上层应用

现在主流的游戏引擎包括&#xff1a; 1、Unity3D&#xff0c;C#语言&#xff0c;优点在于支持几乎所有平台 丹麦创立的一家公司&#xff0c;现已被微软收购。在中国市场占有率最高&#xff0c;也是社群很强大&#xff0c;一般解决方案也能在网上找到&#xff0c;教程丰富。物理…

【C++ 23种设计模式】

C 23种设计模式 ■ 创建型模式(5种)■ 工厂模式■ 抽象工厂模式■ 原型模式■ 单例模式■ 建造者模式 ■ 结构型模式(7种)■ 适配器模式■ 桥接模式■ 组合实体模式■ 装饰器模式■ 外观模式■ 享元模式■ 代理模式 ■ 行为型模式(11种)■ 责任链模式■ 中介者模式■ 策略模式■…

Golang pprof 分析程序的使用内存和执行时间

一、分析程序执行的内存情况 package mainimport ("os""runtime/pprof" )func main() {// ... 你的程序逻辑 ...// 将 HeapProfile 写入文件f, err : os.Create("heap.prof")if err ! nil {panic(err)}defer f.Close()pprof.WriteHeapProfile(f…

139.乐理基础-一四五八度为何用纯?

上一个内容&#xff1a;138.乐理基础-等音、等音程的意义-CSDN博客 上一个内容里练习的答案&#xff1a; 以乐理里写的知识&#xff0c;没办法完全解释透彻 一四五八度为何用纯&#xff1f;这个问题&#xff0c;要透彻的话要从各个文明怎么发现音高、发明音高、制定规则等&…

Vue3+element-plus复杂表单分组处理

一、为什么表单要分组处理&#xff1f; 方便表单字段的复用&#xff1a;例如&#xff0c;你的表单有十个字段会在很多的表单都会用到&#xff0c;那么表单则需要进行分组进行表单复用&#xff1b;实现不同角色的表单权限控制&#xff1a;例如一个表单有60个字段&#xff0c;角…

c# 加载图片到img控件

1、加载函数 private Image LoadPicFromPath(string fileName) { Image img null; if (System.IO.File.Exists(fileName)) { Image img Image.FromFile(fileName); System.IO.MemoryStream mStream new Syste…

VisualStudio 2022的安装

1.IDE 推荐最新版VisualStudio2022&#xff0c;功能十分强大&#xff0c;社区版就够用了。下载地址 2.安装 工作负载选择桌面开发&#xff0c;Web开发可以暂时不选中&#xff08;大部分都用不到&#xff09;。 单个组件选中NET 6.0和NET Frameword4.6.1 也就可以了。 后面安…

14-RPC-自研微服务框架

RPC RPC 框架是分布式领域核心组件&#xff0c;也是微服务的基础。 RPC &#xff08;Remote Procedure Call&#xff09;全称是远程过程调用&#xff0c;相对于本地方法调用&#xff0c;在同一内存空间可以直接通过方法栈实现调用&#xff0c;远程调用则跨了不同的服务终端&a…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中&#xff0c;零部件的生产是整个制造流程的关键一环。这些零部件&#xff0c;包括但不限于制动系统、转向系统和传动系统&#xff0c;是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求&#xff0c;制造商们纷纷投入到高度…

HTML <script>元素的10个属性

将javascrip插入HTML的主要方法是使用<script>元素&#xff0c;这个元素是网景公司&#xff08;Netscape&#xff09;创造出来的&#xff0c;script 元素所属类型因其用法而异。位于 head 元素中的 script 元素属于元数据元素&#xff0c;位于其他元素&#xff08;如 bod…

Jetpack Compose: Hello Android

Jetpack Compose 是一个现代化的工具包&#xff0c;用于使用声明式方法构建原生 Android UI。在本博文中&#xff0c;我们将深入了解一个基本的 “Hello Android” 示例&#xff0c;以帮助您开始使用 Jetpack Compose。我们将探讨所提供代码片段中使用的函数和注解。 入门 在…

软件测试--性能测试工具JMeter

软件测试--性能测试工具JMeter 主流性能测试工具1.主流性能测试工具Loadrunner和Jmeter对比 —— 相同点2.主流性能测试工具Loadrunner和Jmeter对比 —— 不同点JMeter基本使用JMeter环境搭建1.安装JDK:2.安装Jmeter:3.注意点:JMeter功能概要1. JMeter文件目录介绍1.1 bin目…

瑞_23种设计模式_享元模式

文章目录 1 享元模式&#xff08;Flyweight Pattern&#xff09;1.1 介绍1.2 概述1.3 享元模式的结构1.4 享元模式的优缺点1.5 享元模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;Integer类&#xff09; &#x1f64a; …

如何保证某个程序系统内只运行一个,保证原子性

GetMapping("/startETL") // Idempotent(expireTime 90, info "请勿90秒内连续点击")public R getGaugeTestData6() {log.info("start ETL");//redis设置t_data_load_record 值为2bladeRedis.set("t_data_load_record_type", 2);Str…

13-Java代理模式 ( Proxy Pattern )

Java代理模式 摘要实现范例 代理模式&#xff08;Proxy Pattern&#xff09;使用一个类代表另一个类的功能 代理模式创建具有现有对象的对象&#xff0c;以便向外界提供功能接口 代理模式属于结构型模式 摘要 1. 意图 为其他对象提供一种代理以控制对这个对象的访问2. 主…

力扣206反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1&#xff0c;双指针 2&#xff0c;递归。递归参考双指针更容易写&#xff0c; 为什么不用头插…

如何开通 chatGPT4 会员

如何开通 chatGPT4 会员 你是否对最新的人工智能技术充满好奇&#xff1f;想要体验OpenAI的最新成果&#xff0c;ChatGPT-4&#xff1f;现在&#xff0c;通过https://bewildcard.com/i/XUE16 这个链接注册WildCard&#xff0c;你可以轻松实现这一切&#xff01; 详细教程Wild…

3.1_2024ctf青少年比赛部分web题

php后门 根据x-powered-by知道php的版本 该版本存在漏洞&#xff1a; PHP 8.1.0-dev 开发版本后门 根据报错信息&#xff0c;进行提示&#xff0c;前 GET / HTTP/1.1 Host: challenge.qsnctf.com:31639 User-Agentt:12345678system(cat /flag);var_dump(2*3);zerodium12345678…