类模板与友元
1.C++函数模板案例2.普通函数与函数模板调用规则3.普通函数与函数模板调用规则24.模板的局限性5.类模板6.类模板与函数模板的区别7.类模板中成员函数创建时机8.类模板对象做函数参数9.类模板与继承10.类模板成员函数类外实现11.类模板分文件编写
12.类模板与友元
13.类模板案例14.STL初识15.容器算法迭代器初识16.Vector中存放自定义数据类型17.Vector容器镶套容器18.STL---常用容器19.string赋值操作20.string字符串拼接21.string查找和替换22.string字符串比较/字符存取/插入和删除/子串获取23.vector容器/构造函数/赋值操作/容量和大小/插入和删除/数据存储/互换容器/预留空间24.deque容器/构造函数/赋值操作/大小操作/插入和删除/数据存取/排序25.案例--评委打分26.力扣---两数之和---unordered_map-STL容器学习目标:
掌握类模板配合友元函数的类内和类外实现
全局函数类内实现-直接在类内声明友元即可
全局函数类外实现-需要提前让编译器知道全局函数的存在
#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; }; //1、全局函数在类内实现 void test01() { Person<string,int>p("Tom",20); printPerson(p); } //2、全局函数在类外实现 void test02() { Person<string,int>p("Jerry",20); printPerson2(p); } int main() { test02(); return 0; }
总结:
建议全局函数做类内实现,用法简单,而且编译器可以直接识别
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)