C/C++ - 类模板

目录

类模板的定义与使用

类模板的定义

类模板实例化

类外成员函数

继承中的类模板规则

父类普通类,子类模板类

父类模板类,子类普通类

父类模板类,子类模板类


  • 类模板的定义与使用

    • 类模板的定义

      • ​template​​ 声明创建模板
      • ​typename​​ 后续标识符为数据类型
      • 类模板可以存在默认参数类型
      • 类模板可以指定非类型的参数
      • template 
        class classname
        {
        public:
        	//todo:
        };
        
      • #include 
        
        template 
        class MyClass
        {
        public:
        	T m_T;
        };
        
        
        int main()
        {
        
        
        	return 0;
        }
        
    • 类模板实例化

      • 函数模板可以自动推导出类型(C++17类模板亦可)
      • 类模板实例化需要在类名后追加​​指定生成对应类型对象
      • #include 
        
        template 
        class MyClass
        {
        public:
        	T m_T;
        	MyClass(T t) : m_T(t){}
        };
        
        
        int main()
        {
        	//C++ 17 推导类型
        	MyClass obj1(10);
        
        	//显示指定类型实例化类对象
        	MyClass obj1(0);
        
        	return 0;
        }
        
    • 类外成员函数

      • 类模板中函数在类外定义时,需要增加模板参数列表

      • classname为类名

      • classname为对应类型

        #include 
        
        template 
        class Base
        {
        public:
        	Base();
        	~Base();
        	Base* GetObjAddr();
        
        	T m_BaseT;
        };
        
        template
        Base::Base()
        {
        	std::cout << "Base()" << std::endl;
        }
        
        template
        Base::~Base()
        {
        	std::cout << "~Base()" << std::endl;
        }
        
        template
        Base* Base::GetObjAddr()
        {
        	std::cout << "GetObjAddr()" << std::endl;
        	return this;
        }
        
        int main()
        {
        	{
        		Base b1;
        		b1.GetObjAddr();
        	}
        
        	return 0;
        }
        
  • 继承中的类模板规则

    • 父类普通类,子类模板类

      #include 
      
      class Base
      {
      public:
      
      	int m_Base;
      };
      
      template 
      class Son : public Base
      {
      public:
      
      	T m_SonT;
      };
      
      int main()
      {
      	//实例化子类对象指定类型
      	//使用与普通继承类似
      	Son s;
      	s.m_Base = 1;
      	s.m_SonT = 2;
      
      	return 0;
      }
      
    • 父类模板类,子类普通类

      #include 
      
      template 
      class Base
      {
      public:
      
      	int m_BaseT;
      };
      
      //继承父类为类模板时需要指定继承类型方式
      class Son : public Base
      {
      public:
      	int m_Son;
      };
      
      int main()
      {
      	Son s;
      	s.m_BaseT = 1;
      	s.m_Son = 2;
      
      	return 0;
      }
      
    • 父类模板类,子类模板类

      #include 
      
      template 
      class Base
      {
      public:
      
      	int m_BaseT;
      };
      
      template 
      class Son : public Base
      {
      public:
      	int m_SonT;
      };
      
      int main()
      {
      	Son s;
      	s.m_BaseT = 1;
      	s.m_SonT = 2;
      
      	return 0;
      }
      

你可能感兴趣的:(编程基础-C/C++,c语言,c++,开发语言)