C++:模板编程入门

什么是模板编程

假设我们需要实现对整形、浮点型、双精度型数据的交换函数,一般情况我们需要重载三个函数,但是使用模板,我们使用一个函数就能解决。
函数在编译时进行重载。

#include <iostream>

using namespace std;

template <typename T>
void swapfun(T& a, T& b) {
  T t;
  t = a;
  a = b;
  b = t;
}

void test0708(void) {
  float a = 9.9;
  float b = 5.6;
  cout << "a:" << a << endl;
  cout << "b:" << b << endl;
  cout << "swapfun:" << endl;
  swapfun(a, b);
  cout << "a:" << a << endl;
  cout << "b:" << b << endl;

  int i = 90;
  int j = 11;
  cout << "i:" << i << endl;
  cout << "j:" << j << endl;
  cout << "swapfun:" << endl;
  swapfun(i, j);
  cout << "i:" << i << endl;
  cout << "j:" << j << endl;
}

在这里插入图片描述

模板的理解和几个细节

模板功能
1、编写类型无关函数
2、是一种抽象的维度
3、使用模板写库函数更好,按需生产
4、拿复杂的换劳动量

可以定义多个模板名称



template <typename T ,typename T1>
void swapfun(T& a, T1& b) {
  cout << "a:" << a << endl;
  cout << "b:" << b << endl;
}

void test0708(void) {
  float a = 9.9;
  int b = 5.6;

  swapfun(a, b);
}

在这里插入图片描述

函数模板和类模板

函数模板:在函数参数列表当中使用
类模板:类成员变量、类成员函数的参数列表

多模板参数的类模板

template <typename T>
class People {
 private:
  /* data */
  int age;

 public:
  People(/* args */);
  People(int a);

  void myprint(T x);
};
template <typename T>
void People<T>::myprint(T x) {
  cout << "x = " << x << endl;
  cout << "age = " << age << endl;
}
/// @brief /

template <typename T>
People<T>::People(int a) {
  age = a;
}

void test070802(void) {
  int a = 90;
  double b = 89.99;

  People<int> p1(12);
  p1.myprint(a);

  People<double> p2(12);
  p2.myprint(b);
}

同类型多参数

template <typename T>
class People {
 private:
  /* data */
  int age;

 public:
  People(/* args */);
  People(int a);

  void myprint(T x);
  void funtest(T a, T b);
};

template <typename T>
void People<T>::funtest(T a, T b) {
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
}
template <typename T>
void People<T>::myprint(T x) {
  cout << "x = " << x << endl;
  cout << "age = " << age << endl;
}
/// @brief /

template <typename T>
People<T>::People(int a) {
  age = a;
}

void test070802(void) {
  int a = 90;
  double b = 89.99;

  People<int> p1(12);
  p1.funtest(a,2);

  People<double> p2(12);
  p2.funtest(b,88.88);
}

不同类型多参数

template <typename T,typename T1>
class People {
 private:
  /* data */
  int age;

 public:
  People(/* args */);
  People(int a);

  void myprint(T x);
  void funtest(T a, T1 b);
};

template <typename T,typename T1>
void People<T,T1>::funtest(T a, T1 b) {
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
}
template <typename T,typename T1>
void People<T,T1>::myprint(T x) {
  cout << "x = " << x << endl;
  cout << "age = " << age << endl;
}
/// @brief /

template <typename T,typename T1>
People<T,T1>::People(int a) {
  age = a;
}

void test070802(void) {
  int a = 90;
  double b = 89.99;

  People<int,int> p1(12);
  p1.funtest(a,2);

  People<double,float> p2(12);
  p2.funtest(b,88.88);
}

成员函数在类内部的模板类

template <typename T, typename T1>
class People {
 private:
  /* data */
  int age;

 public:
  People(/* args */);
  People(int a);

  void myprint(T x);
  void funtest(T a, T1 b) {
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
  }
};

// template <typename T,typename T1>
// void People<T,T1>::funtest(T a, T1 b) {
//   cout << "a = " << a << endl;
//   cout << "b = " << b << endl;
// }
template <typename T, typename T1>
void People<T, T1>::myprint(T x) {
  cout << "x = " << x << endl;
  cout << "age = " << age << endl;
}
/// @brief /

template <typename T, typename T1>
People<T, T1>::People(int a) {
  age = a;
}

void test070802(void) {
  int a = 90;
  double b = 89.99;

  People<int, int> p1(12);
  p1.funtest(a, 2);

  People<double, float> p2(12);
  p2.funtest(b, 88.88);
}

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li星野

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值