C++第09课 模板 (一)
时间:2021-09-06
本文章向大家介绍C++第09课 模板 (一),主要包括C++第09课 模板 (一)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.函数模板
//普通与模板同时存在的时候,优先使用普通函数 int Max(int a, int b) { return a > b ? a : b; } template <typename _Ty> _Ty Max(_Ty a, _Ty b) { return a > b ? a : b; } class MM { friend ostream& operator<<(ostream& out, const MM& obj); public: MM(string name, int age) :name(name), age(age) {} bool operator>(MM object) { return this->age > object.age ? true : false; } protected: string name; int age; }; ostream& operator<<(ostream& out, const MM& obj) { out << obj.name << "\t" << obj.age << endl; return out; } //类中的成员函数为模板 class Test { public: template<class _Ty> void print(_Ty data) { cout << data << endl; } }; int main() { cout << Max("张三", "李四") << endl; //隐式调用 cout << Max<string>("张三", "李四") << endl; //显示调用 MM mm1("小可爱", 12); MM mm2("小宝贝", 9); cout << Max(mm1, mm2) << endl; Test t; t.print("小甜心"); return 0; }
2.类模板
/* 类模板: 类中用到未知类型 1.必须显式调用 2.所有用到类名的地方都是: 类名<未知类型的> 的方式使用 */ template<class _Ty> class MM { public: void print(); void print2() { cout << "Hello" << endl; } protected: static int num; }; template<class _Ty> int MM<_Ty>::num = 0; template<class _Ty> void MM<_Ty>::print() { cout << "类模板" << endl; } template<class _Ty> class Girl :public MM<_Ty> { }; template <class _Ty1, class _Ty2> class Test { public: Test(_Ty1 first, _Ty2 second) :first(first), second(second) { } void print() { cout << first << "\t" << second << endl; } protected: _Ty1 first; _Ty2 second; }; struct Score { int english; int math; int py; Score(int english, int math, int py) :english(english), math(math), py(py) {} }; ostream& operator<<(ostream& out, const Score& object) { out << object.english << "\t" << object.math << "\t" << object.py; return out; } void testFunc() { Test<string, int> test(string("李四"), 18); test.print(); Test<string, string> *test1=new Test<string,string>(string("小可爱"), string("小宝贝")); test1->print(); Test<string, Score>* pScore = new Test<string, Score>("小美", Score(88, 18, 99)); pScore->print(); } //类模板的特化 template <class T1, class T2, class T3> class A { public: void print() { cout << "原版模板" << endl; } protected: }; //局部特化:局部特化是把类型特殊化,还是一个未知类型 template <class T1> class A<T1, T1, T1> { public: void print() { cout << "局部特化" << endl; } protected: }; //完全特化: 所有未知类型具体化 template <> class A<string, int, char> { public: void print() { cout << "完全特化" << endl; } protected: }; void testAObject() { A<string, string, string> a; //局部特化 a.print(); A<string, string, char> b; //原版特化 b.print(); A<string, int, char> c; //完全特化 c.print(); } //类模板不是一个真正类,所以,不可以在多文件中分开写 //声明和实现必须写在一起 int main() { MM<int> mm; MM<int>* pmm = new MM<int>; //testFunc(); testAObject(); return 0; }
原文地址:https://www.cnblogs.com/creature-lurk/p/15235869.html
- Cmd Markdown编辑器简明语法手册
- 如何让spring mvc web应用启动时就执行特定处理
- CSS魔法堂:小结一下Box Model与Positioning Scheme
- jboss EAP 6.2+ 通过代码控制JNDI数据源
- jboss CLI 命令行接口学习(适用JBOSS EAP 6.2+)
- WebComponent魔法堂:深究Custom Element 之 面向痛点编程
- 修复bootstrap daterangepicker中的3个问题
- 搭建AngualarJS开发环境
- CSS魔法堂:重拾Border之——更广阔的遐想
- Jboss EAP:native management API学习
- linux:手动校准系统时间和硬件CMOS时间
- CSS3魔法堂:说说Multi-column Layout
- 数据可视化-EChart2.0使用总结2
- rpc框架之 thrift 学习 2 - 基本概念
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php基础教程 第七步数组补充及循环基础
- php基础教程 第八步循环补充
- php基础教程 第九步 自定义函数
- php基础教程 第十步 阶段性知识补充
- php基础教程 第十一步 面向对象
- php基础教程 第十一步 面向对象补充
- Serverless|Framework——图文玩转 AWS Lambda
- C++入门指南及实战 第一步 概述及经典HelloWorld
- C++入门指南及实战 第二步 HelloWorld及扩展详解
- 依托于GitLab持续集成基础配置和使用
- C++入门指南及实战 第三步 基本变量
- 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
- FlexSDK工具包的介绍与编译使用
- 《零基础看得懂的C语言入门教程 》——(二)C语言没那么难简单开发带你了解流程
- Ansible自动化运维学习笔记5