• c++语言 类模板的使用 类模板的实现


    //类模板的使用
    //针对不同数据类型要设计不同版本的类,但是内部的实现是一样的.这样做不但重复劳动还容易出错,后期和调试的工作量相当大.类模板解决了上述的问题.
    //#类模板的声明和实例化
    //类模板能够为类的数据成员,成员函数的参数,返回值提供动态参数化的机制,使得用户可以方便地设计出功能更为灵活的类.
    /*
    temple <class T>
    class Calculate
    {
        public:
            Calculate(T a, T b);
            T Add();
            T Subtraction();
        private:
            T m_a;
            T m_b;
    };
    */
    //其中,第一行为模板声明.格式为template <class 类型参数名>.
    //template的意思是"模板", 是声明模板类时必须加上的关键字.在template后的"<>"中是参数列表,关键字class表示后面的是类型参数.
    //对类模板进行实例化定义类对象的时候也要注意定义的形式:
    //类模板名 <实际类型名> 对象名(实参列表); 例如在主程序中定义一个Calculate的整形参数对象应该为:Calculate<int> cal(20, 10);
    
    //类模板的实现
    //无论是声明还是定义都少不了template关键字.
    //当定义类中的函数时,格式如下:
    /*
    template <参数类型列表>
    返回值 类名<参数类型列表>::函数名(参数列表)
    {函数体内容;}
    */
    //类模板的实现
    
    #include "stdafx.h"
    #include <iostream>
    using namespace std;
    
    template <class T>
    class Compare
    {
    public:
        Compare(T a, T b);
        T Min();
        T Max();
    private:
        T num1;
        T num2;
    };
    template <class T>
    Compare<T>::Compare(T a, T b)
    {
        num1 = a;
        num2 = b;
    }
    template <class T>
    T Compare<T>::Min()
    {
        if(num1>num2)
            return num2;
        else
            return num1;
    }
    template <class T>
    T Compare<T>::Max()
    {
        if(num1<num2)
            return num2;
        else
            return num1;
    }
    
    int main(int argc, char * argv[])
    {
        Compare<int> com1(20.12,30);
        cout << "Min is:" << com1.Min() << endl;
        cout << "Max is:" << com1.Max() << endl;
        Compare<double> com2(40.51, 50);
        cout << "Min is:" << com2.Min() << endl;
        cout << "Max is:" << com2.Max() << endl;
    
    
        return 0;
    }
    //在上面的代码中,首先定义了一个类模板(Compare).为了使定义的类为类模板,要在类的定义前编写template<class T>.在类中声明类模板的构造函数和成员函数,并且添加两个私有成员变量num1和num2,
    //用来存放要进行比较的数据.类定义完之后,要对类中的成员函数进行定义,这里选择在类外进行定义.每一次定义成员函数时都要编写template<class T>,并且将其放在函数定义之前.
    //在主函数(main)中,可以看到当希望使用的数据是int型时,要在定义对象的同时给予声明Compare<int> com1(20, 10);.
    //通过这个实例可以更深刻地认识到,要在每次编写类和函数的定义时在前面加上template<class T>.
  • 相关阅读:
    计算机编码规则之:Base64编码
    java高级用法之:在JNA中将本地方法映射到JAVA代码中
    java高级用法之:JNA类型映射应该注意的问题
    netty系列之:netty中的核心MessageToMessage编码器
    netty系列之:netty中的核心MessageToByte编码器
    ClickHouse遇到的一些配置导致的报错问题记录
    ClickHouse如何引用多个配置文件
    DM达梦数据库License的替换安装
    【高并发】不得不说的线程池与ThreadPoolExecutor类浅析
    【高并发】深度解析线程池中那些重要的顶层接口和抽象类
  • 原文地址:https://www.cnblogs.com/pythonschool/p/2762628.html
Copyright © 2020-2023  润新知