首页 > 编程语言 >c++模版

c++模版

时间:2022-10-09 20:37:06浏览次数:42  
标签:name int 模版 age c++ person 函数


1.什么是模版?

生活中比如常用的ppt模版,年终报告模版等,共有的特性通用性、不能直接使用、不是万能的

2.c++中的模版

c++处理面向对象编程思想还有面向泛型编程,面向泛型编程主要用的技术就是模版,模版有函数模版和类模版

3.函数模版

建立一个通用的函数,返回值类型和形参类型不具体指定,是通用类型,使用的时候才确定。

比如交换两个整型数字函数

c++模版_#include

如果要交换两个浮点型,又得写一个函数

c++模版_#include_02

此时可以定义一个用于交换两个数的函数模版,但是具体数的类型不知道

#include <iostream>
using namespace std;

template<typename T>//告诉编译器紧跟着的是一个函数模版 T是通用的数据类型
void myswap(T &a,T &b) {
T temp= a;
a = b;
b = temp;
}

int main() {
int a = 10;
int b = 20;
//调用模版函数第一种方式
myswap(a, b);
//调用模版函数第二种方式,支出T具体类型
myswap<int>(a, b);
cout << "a="<<a<<"b="<< b;
}

注意:

1.上面的typename可以替换成关键字class

2.调用的时候T必需明确什么数据类型

3.函数模版也可重载,这点就可以为特定类型提供具体化的模版

class person {
public:
int age;
string name;
};

template<typename T>
int compare(T& a, T& b) {
if (a == b) {
return 1;
}
else {
return -1;
}
};
//具体化模版规则,指出数据类型
template<> int compare(person &a, person &b) {
if (a.age== b.age) {
return 1;
}
else {
return -1;
}
}


int main() {
person p;
p.age = 10;
person p1;
p1.age = 20;
//优先调用具体化模版
compare(p, p1);
}

4.学习模版主要是为了使用stl中的模版,而不是自己写模版

4.类模版

一个通用的类,成员变量的数据类型不确定

template<class ageType,class nameType>//ageType和nameType是通用类型
class person {
public:
person(ageType age, nameType name) {
this->age = age;
this->name = name;
}
public:
ageType age;
nameType name;
void say() {
cout << "年龄:"<<age << "姓名:" << name;
}
};


int main() {
person<int, string> p(10, "lisi");
p.say();
}

类模版在模版的参数列表中可以有默认的参数类型,如下

template<class ageType,class nameType=string>

注意:

1.普通函数中的成员函数一开始就创建,但是类模版只有调用才创建

2.类模版对象作为函数参数传递方式有以下三种

c++模版_模版_03

#include <iostream>
#include <string>
using namespace std;

template<class ageType,class nameType=string>
class person {
public:
person(ageType age, nameType name) {
this->age = age;
this->name = name;
}
public:
ageType age;
nameType name;
void say() {
cout << "年龄:"<<age << "姓名:" << name;
}
};
//1.第一种
void test1(person<int, string>& p) {
p.say();
}
//2.第二种参数模板化 但是调用的时候给出
template<class T1 ,class T2>
void test2(person<T1, T2>& p) {
p.say();
}
//3.第三种整个类模板化 但是调用的时候给出
template<class T>
void test3(T& p) {
p.say();
}

int main() {
person<int, string> p(10, "lisi");
test1(p);
test2(p);
test3(p);
}

3.类模版与继承

c++模版_函数模版_04

template<class ageType,class nameType=string>
class person {

};
//子类
class man :public person<int, string> {

};

4.类模版中的函数在类外实现

#include <iostream>
#include <string>
using namespace std;

template<class ageType,class nameType=string>
class person {
public:
person(ageType age, nameType name);//类内声明
public:
ageType age;
nameType name;
void say();
};
//类外实现
template<class T1,class T2>
person<T1,T2>::person(T1 age, T2 name) {
this->age = age;
this->name = name;
}
int main() {
person<int, string> p(10, "lisi");

}

5.类模版中成员函数分文件编写问题以及解决

c++模版_#include_05

标签:name,int,模版,age,c++,person,函数
From: https://blog.51cto.com/u_11334685/5741382

相关文章

  • c++面向对象概述、内存分析、引用、函数
    1.c++内存分区模型c++程序在运行的过程中,内存会被划分为以下四个分区代码区:程序的所有程序的二进制代码,包括注释会被放到此区全局区:存放静态变量、全局变量、常量(字符串常量......
  • C++函数
    目录​​函数作用​​​​函数定义​​​​函数声明​​​​函数调用​​​​函数值传递​​​​函数常见的样式​​​​函数的分文件书写​​函数作用将经常使用的代码封装......
  • C++数据类型
    目录 ​​1.数据类型概述​​​​2.基本的内置类型​​​​整型​​​​实型(浮点型)​​​​字符型​​​​转义字符​​​​字符串型​​​​c风格的字符串​​​​c++风......
  • C++数组
    概述C++支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个......
  • C++运算符
    目录 ​​算术运算符(进行四则运算)​​​​赋值运算符(表达式的值赋给变量)​​​​比较运算符(表达是比较,返回一个真值或假值)​​​​逻辑运算符(返回表格式的结果真或......
  • C++注释、变量、常量、关键字、标识符、输入输出
    目录​​1.注释​​​​注释作用​​​​注释的方式​​​​2.变量​​​​变量基本知识​​​​定义变量​​​​3.常量​​​​常量基本知识​​​​整数常量​​​​浮点......
  • c++开发环境搭建、visual studio安装
    1.C++简介C++是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++被认为是一种中级语言,它综合了高级语言......
  • c++ calendaring system
    c++calendaringsystemDefineandimplementacollectionofclassesthatmodelaneventhierarchyforacalendaringsystem.Yourdesignwillincludethebasec......
  • python调用c++的方法,加速运算
    cpp源代码#include"iostream"usingnamespacestd;classCalc{public:intadd(inta,intb);};intCalc::add(inta,intb){cout<<"收到参数为a,b:"<<a<......
  • Tita 360 评估:新员工转正评估模版
    此项360度测评为新员工转正调研活动。Tita「360 评估」,申请试用请联系售前/售后顾问,或者直接在线预约演示在这项调研中,我们希望收集有关该被测评人行为方面的信息。......