美文网首页
C++函数类模板的具体实践

C++函数类模板的具体实践

作者: 司马捷 | 来源:发表于2016-08-05 19:57 被阅读12次

    1.这里有类模板的具体实践.
    2.类的继承,基类是模板类,派生类是具体类,和模板类两种情况.

    #include <iostream>
    using namespace std;
    
    //基类是模板类
    template <class T>
    class A{
    public:
        A(T a){
            this->a  = a;
            
        }
    public:
        void printA(){
            cout<<"a :"<<a <<endl;
        }
    protected:
        T a;
        
    };
    
    /**
     *  从模板类 派生普通类
     模板类派生时,需要具体化模板类,C++ 编译器 需要知道,父类的数据类型是什么样子的
     
     //要知道父类所占的内存大小是多少,只有数据类型固定下来,才知道如何分配内存.
     */
    class B :public A<int>{
    public:
        B(int a = 10,int b = 20):A<int>(a){
            this->b = b;
            
        }
        void printB(){
            cout<<"a :"<<a<<" b: "<<b<<endl;
        }
    private:
        int b;
        
    };
    
    //从模板类 派生 模板类
    template <typename T>
    class C :public A<T> {
    private:
        T c;
        
    public:
        C(int a = 0):A<T>(a){
            this->c = a;
        }
        void printC(){
            cout<< "C:"<<c<<endl;
        }
    };
    
    
    /**
     *  C++编译器要求具体的类,所以 写成A<int >&a
     *
     *  @param A<int>&a
     */
    void UserA(A<int>&a){
        
        a.printA();
    }
    
    int main(int argc, const char * argv[]) {
        // insert code here...
        std::cout << "Hello, World!\n";
        
        // 模板类 本身就是类型化的 具体的类,定义具体的变量.
        A<int> a1(10);
        
        UserA(a1);//调用模板创建的类 需要制定具体的类.
        
        
        B b(1,2);
        b.printB();
        
        C<int>c(10);//模板类 需要具体化的时候,需要定义具体的变量类型.
        c.printC();
        
        
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:C++函数类模板的具体实践

          本文链接:https://www.haomeiwen.com/subject/laxksttx.html