• C++的模板与类属类


    1.类属类

    按照类定义中是否带参数,类可分为类属类非类属类,采用参数化类型定义的类(也称为 类模板)称为类属类(generic class),或参数 化类(parameterized class)。它仅仅是描述 了一组类型的通用样板。反之,非类属类就是定义中不带参数的类。  
         由于类属类里面所处理的对象的数据类型尚未确定,程序员不可以使用类属类来直接创建对象实例,即一个类属类还不能认为是一种真正的类类型。必须先

    类属类———(实例化)———具体的类-----(实例化)----具体的对象

    可分为:

    无约束类属类
    – 类属类实例化的实际类属参数可以是任何类型。无约 束类属类的实际参数的类型并不要求具有共同的祖先 类,类属类中的操作与类属参数之间基本没有关联。
     有约束类属类
    – 类属类要求类属参数必须具有某些特殊的性质,以使 得类属类中可应用某些特殊操作,这种类属类称为受 约束类属类。例如:设计一个类属队列Queue中,希望 类属参数只能是Teacher,Worker或Student等类型, 就可通过增加约束,要求所有实际参数必须是人员类 Person的派生类。

         使用模板机制实现的类属类是无约束类属类, 模板机制无法支持受约束类属类。C++语言的 受约束类属类必须采用继承与动态绑定实现, 多态数据结构即是一种受约束类属类。

       --类属类的定义形式

    template <class 类属参数1,class 类属参数2,...>

    class 类名字 { …… };

    其中,用尖括号括起来的是形式类属参数表,它列 出了类属类的每个形式类属参数,多个形式类属参数之间 用逗号分隔开。每一个类属参数由保留字class引入。

    类属类的声明与定义必须在同一个文件中,具体可参见前面的为什么类模版的声明和实现不能分开

    类属类实例化的一般形式: 类属类名字<实际类属参数表> 对象实例名; CList<int> d2(15); CList<float> d3(15); CList<Student> d3(15);

    类属类的继承和派生
      类属类的派生与普通类的派生一样,也分为公有派生类、受保护派生类和私有派生类三种, 继承成员的访问控制规则也是相同的。一个类 属类可以作为一个普通类的派生类,类属类也 可作为其他类属类的基类。

    普通类派生出类属类
     •  普通类为基类,生成派生类时引入了形式化类 型参数,故派生类成为了类属类。

    class Base{  //普通类为基类
    ...
    ..}
    
    
    template<class TYPE> 
    class Derived: public Base //Derived 为类属类{
    ...
    ...}

    主函数里实例化时:Base base(15,20);Derived<int> d1(15,20,325);

    类属类派生出类属类的例子
    • 基类是类属类,生成派生类时可以加入形 式化类型参数,也可能未加入形式化类型 参数。在派生类属类实例化时,注意为基 类参数传递实际类属参数。

    template<class T> 
    class List { //基类为类属类 ...
    ...} template
    <class T> class Set: public List<T> { //派生类也是类属类 ... ...}

    类属类派生出普通类的例子
    • 基类是类属类,而生成派生类时,对基类指定了实际类型参数,所以,所形成的派生 类变成了非类属类(普通类)

    template<class T> 
    class List  {  //基类是类属类
    ...
    ...}
    
    class Set: public List<int> { //派生类是普通类
    ...
    ...}
  • 相关阅读:
    .Net业务搭配实用技术栈(转)
    基于WebGL/Threejs技术的BIM模型轻量化之图元合并
    设计模式之六大原则
    osgearth介绍
    OSG中的示例程序简介
    共有49款Windows GUI开发框架开源软件 【转】
    地球坐标系与投影方式的理解(关于北京54,西安80,WGS84;高斯,兰勃特,墨卡托投影)(转)
    c#串口编程(转)
    c++消息队列的实现
    SQL总结 连表查询
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/2856686.html
Copyright © 2020-2023  润新知