• 3.5 C++高级编程_类模板


    对于代码相似的函数,我们可以使用函数模板

    类似的,对于那些代码相似的,我们也可以使用类模板

    类模板

    修改代码,首先声明一个类模板AAA。

    1. template<typename T>
    2. class AAA {
    3. private:
    4. T t;
    5. public:
    6. void test_func(const T &t);
    7. void print(void);
    8. };

    这个类模板中有一个私有成员t,它的数据类型由传入的模板参数T决定。

    还有两个公有的成员函数test_func和print。

    分别实现这两个函数。

    test_func函数

    设置私有成员t的值。

    1. template
    2. void AAA::test_func(const T &t)
    3. {
    4. this->t = t;
    5. }

    print函数

    输出私有成员t的值。

    1. template
    2. void AAA::print(void)
    3. {
    4. cout << this->t << endl;
    5. }

    在main函数中分别定义两个类,T分别是int和double。

    main函数

    1. int main(int argc, char **argv)
    2. {
    3. AAA<int> a;
    4. a.test_func(1);
    5. a.print();
    6. AAA<double> b;
    7. b.test_func(1.23);
    8. b.print();
    9. return 0;
    10. }

    编译测试,可以看到使用了AAA模板成功创建了两个对象。

    使用类模板

    类模板的使用可以分为两种:

    1. 用到时再实例化;
    2. 事先实例化;

    上面的测试代码,使用的就是用到时再实例化

    在main函数中,只有使用 AAA a 语句的时候,编译器才通过类模板,创建了a对象;对于a对象的成员函数,编译器只有在使用到的时候,才会去创建对应的函数。

    也可以在使用前,事先实例化。

    即先使用:

    template AAA<int>;
    

    再使用:

    AAA<int> a;

    (事先实例化部分存疑,可能是我的理解有误,在代码中添加 template AAA; 编译会报错)

    重载/定做类模板

    C++可以重载函数,类似的,也可以重载类模板,也叫作定做类模板。

    修改代码,重载类模板AAA。

    注意只是重载了T为int时的类模板,T为其他类型时模板还是会使用原来的AAA。

    1. template <>
    2. class AAA<int> {
    3. public:
    4. void test_func_int(const int & t)
    5. {
    6. cout << t << endl;
    7. }
    8. void print_int(void);
    9. };
    10. void AAA<int>::print_int(void)
    11. {
    12. cout << "for test" << endl;
    13. }

    main函数

    1. int main(int argc, char **argv)
    2. {
    3. AAA<int> a;
    4. a.test_func_int(1);
    5. a.print_int();
    6. AAA<double> b;
    7. b.test_func(1.23);
    8. b.print();
    9. return 0;
    10. }

    编译测试如下,可以看到T为int时,重载了类模板AAA,T为double时,没有影响。

     

     

  • 相关阅读:
    如何评估RPA需求?
    linux中mkdir -p用法
    JavaScript-Vue基础语法-创建-组件-路由
    人工智能生成 logo 神器
    nacos集群搭建
    Zabbix安装与部署
    vue+elementui网上线上教学平台python+java
    Python异常处理——走BUG的路,让BUG无处可走
    Redis 学习笔记
    【论文阅读】多模态模型CoCa
  • 原文地址:https://blog.csdn.net/qq_33141353/article/details/126330776