当前位置: 首页 > news >正文

C++类模版1

类模版作用:

  • 建立一个通用类,类中的成员,数据结构可以不具体制定,用一个虚拟的类型来代表

语法:

template<typename T>
类
#include <iostream>
using namespace std;//类模版
template<typename NameType,typename AgeType>
class Person{public://构造函数Person(NameType name,AgeType age){this->m_Name=name;this->m_Age=age;}void showPerson(){cout<<"name: "<<this->m_Name<<endl;cout<<"age: "<<this->m_Age<<endl;}//但是这两个类型是不一样的,要是这两个类型是一样的,只用一个T就够了NameType m_Name;AgeType m_Age;};void test01()
{//类模版的使用//<>表示的是模版的参数列表Person<string,int> p1("孙悟空",999);p1.showPerson();
}int main()
{test01();return 0;
}

类模版与函数模版语法相似,在声明模版template后面加类,此类称为类模版。

类模版与函数模版区别

1.类模版没有自动类型推导的使用方式

2.类模版在模版参数列表中可以有默认参数

类模版中的成员函数创建时机

  • 普通类中的成员函数一开始就可以创建
  • 类模版中的成员函数在调用时才创建
#include <iostream>
using namespace std;class Person1{public:void showPerson1(){cout<<"Person1 show"<<endl;}
};class Person2{public:void showPerson2(){cout<<"Person2 show"<<endl;}
};template <typename T>
class MyClass{public:T obj;//类模版中的成员函数void func1(){obj.showPerson1();}void showPerson2(){obj.showPerson2();}
};int main() {}

为什么这个代码跑得通,因为这两个成员函数,只要没有调用,就不会被创建的,为什么不会被创建。

#include <iostream>
using namespace std;class Person1{public:void showPerson1(){cout<<"Person1 show"<<endl;}
};class Person2{public:void showPerson2(){cout<<"Person2 show"<<endl;}
};template <typename T>
class MyClass{public:T obj;//类模版中的成员函数void func1(){obj.showPerson1();}void func2(){obj.showPerson2();}
};void test01(){MyClass<Person1> m;m.func1(); // 调用 Person1 的成员函数m.func2();}int main() {test01();return 0;}

但是下面这个就会出错。

总结:类模版中的成员函数并不是一开始就创建的,在调用时才创建。

http://www.dtcms.com/a/276343.html

相关文章:

  • Linux进程的生命周期:状态定义、转换与特殊场景
  • 【Elasticsearch】检索模板(Search Template)
  • 从输入到路径:AI赋能的地图语义解析与可视化探索之旅(2025空间智能全景)
  • C++ Boost 自动链接机制详解
  • Java基础:泛型
  • 单调栈单调队列【算法进阶】
  • 11. JVM中的分代回收
  • 数据结构自学Day6 栈与队列
  • BaseDao 通用查询方法设计与实现
  • 快速过一遍Python基础语法
  • 015---全面理解交易:区块链状态转移的原子单位与链上执行全流程图解
  • 【AI News | 20250711】每日AI进展
  • APP Inventor使用指南
  • LeetCode 3169.无需开会的工作日:排序+一次遍历——不需要正难则反,因为正着根本不难
  • 【使用Pyqt designer时pyside2安装失败】
  • 如何彻底禁用 Chrome 自动更新
  • C++实现二叉树左右子树交换算法
  • vuecil3+版本下,兼容ie等不支持es6的低版本浏览器
  • 内容总监的效率革命:用Premiere Pro AI,实现视频画幅“一键重构”
  • 四、深度学习——CNN
  • 快速上手UniApp(适用于有Vue3基础的)
  • 服务器ssh连接防护指南
  • 软件测试基础1-软件测试需求分析
  • Python技巧记录
  • 详细理解向量叉积
  • CVPR2025 Mamba系列
  • 内容总结I
  • 我的LeetCode刷题笔记——树(2)
  • 带货视频评论洞察 Baseline 学习笔记 (Datawhale Al夏令营)
  • [动态规划]1900. 最佳运动员的比拼回合