【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

简介: 【C++ 语言】面向对象 ( 模板编程 | 函数模板 | 类模板 )

函数模板


1. 模板编程 : 类似于 Java 中的泛型编程 ;


① 函数模板 : 对应着 Java 中的泛型方法 ;

② 类模板 : 对应 Java 中的泛型类 ;

2. Java 中的泛型方法 :


void <T> fun( T t ){
}


3. C++ 中的模板方法 :


//函数模板 , 对应 Java 泛型方法
//  其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
  return a + b;
}


4. 函数模板作用 : 避免反复定义重载函数 , 例如两个数字相加时 , 需要考虑 int 类型数字相加 , float 类型数字相加 等 , 这些函数的内部行为都是一致的 , 如果使用了模板函数 , 就可以只写一个模板方法即可 ;


5. 对应的函数重载 : 上述函数模板与下面的函数重载实现的功能部分一致 ;


i

nt add(int a, int b) {
  return a + b;
}
float add(float a, float b) {
  return a + b;
}
double add(double a, double b) {
  return a + b;
}


模板函数功能要比重载多很多 , 上面有很多类型没有列出 ;


6. 代码示例 :


① 模板函数定义 :

//函数模板 , 对应 Java 泛型方法
//  其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
  return a + b;
}


② 模板函数调用代码示例 :

//调用模板函数 , 传入两个 int 类型参数
  int number_int = add(8, 8);
  cout << " 函数模板 两个 int 类型相加 : " << number_int << endl;
  //调用模板函数 , 传入两个 float 类型参数
  float number_float = add(0.8f, 0.8f);
  cout << " 函数模板 两个 float 类型相加 : " << number_float << endl;


③ 执行结果 :


函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6



类模板


1. 类模板示例 :


//类模板
template <class T , class E>
class Template {
public:
  T add(T t, E e) {
  return t + e;
  }
};


2. 类模板调用 :


//2. 类模板
  Template <float, int> templ;
  float result = templ.add(0.8f, 88);
  cout << "输出模板类计算结果 : " << result << endl;


3. 执行结果 :


输出模板类计算结果 : 88.8


C++ 中创建了大量的模板类 , 如 queue , vector , list 等容器 , 都是模板类 ;




代码示例


1. 函数模板与类模板定义 :


//函数模板 , 对应 Java 泛型方法
//  其中 typename 也可以写成 class
template <typename T>
T add(T a, T b) {
  return a + b;
}
//类模板
template <class T , class E>
class Template {
public:
  T add(T t, E e) {
  return t + e;
  }
};


2. 模板编程调用 :


//V. 模板编程
  //1. 函数模板 
  //调用模板函数 , 传入两个 int 类型参数
  int number_int = add(8, 8);
  cout << " 函数模板 两个 int 类型相加 : " << number_int << endl;
  //调用模板函数 , 传入两个 float 类型参数
  float number_float = add(0.8f, 0.8f);
  cout << " 函数模板 两个 float 类型相加 : " << number_float << endl;
  //2. 类模板
  Template <float, int> templ;
  float result = templ.add(0.8f, 88);
  cout << "输出模板类计算结果 : " << result << endl;


3. 执行结果 :


函数模板 两个 int 类型相加 : 16
 函数模板 两个 float 类型相加 : 1.6
输出模板类计算结果 : 88.8
目录
相关文章
|
3天前
|
C++
c++的学习之路:7、类和对象(3)
c++的学习之路:7、类和对象(3)
19 0
|
2天前
|
设计模式 Java C++
【C++高阶(八)】单例模式&特殊类的设计
【C++高阶(八)】单例模式&特殊类的设计
|
2天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
3天前
|
存储 编译器 C语言
c++的学习之路:5、类和对象(1)
c++的学习之路:5、类和对象(1)
19 0
|
28天前
|
存储 C++ 容器
C++入门指南:string类文档详细解析(非常经典,建议收藏)
C++入门指南:string类文档详细解析(非常经典,建议收藏)
37 0
|
28天前
|
存储 编译器 C语言
C++入门: 类和对象笔记总结(上)
C++入门: 类和对象笔记总结(上)
33 0
|
6天前
|
存储 安全 C语言
【C++】string类
【C++】string类
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
8天前
|
编译器 C++
标准库中的string类(上)——“C++”
标准库中的string类(上)——“C++”
|
8天前
|
编译器 C++
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”
自从学了C++之后,小雅兰就有对象了!!!(类与对象)(中)——“C++”

热门文章

最新文章