CPP:06类的模版

2020-07-10  本文已影响0人  放纵的卡尔
CPP06-类的模版
//
// Created by 87572 on 20/7/10.
//

#include "../include/StateEight.h"

#include <iostream>

/**
 * K1:-------------------------类的模版--------------------------------
 * 1.就是java中的泛型编程
 *
 */

class EightPerson {

};

class EightPersonSon:public EightPerson{

};

template<class T>
void swap(T t) {

}


template<class T>
class TemplateBase1 {

};
template <class T>
class TemplateSon1 :public TemplateBase1<T>{

};

template <class T,class T2>
class TemplateSon2 :public TemplateBase1<T2>{

};

class TemplateSon3 :public TemplateBase1<EightPerson>{

};
void useTemplate() {
    swap<EightPerson>(EightPerson());
    TemplateSon2<EightPerson,EightPerson>  templateSon3();
}

/**
 * K2:-----------------hpp文件------------------------
 * 类模板的声明和实现放到一个文件中,我们把这个文件命名为.hpp(这个是个约定的规则,并不是标准,必须这么写).
 */


/**
 * K3:-------------类型转换------------------
 *
 * 1.静态类性转换 static_cast
 *   1) 进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
 *   2) 进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
 *   3) 用于基本数据类型之间的转换,如把int转换成char,把char转换成int。这种转换的安全性也要开发人员来保证。
 *2.动态类型转换
 *  1)进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
 *  2)父类指针转换成子类指针 不可以;子类->父类可以
 *  3)基本类型,不可以.
 *3.const 转换
 *   常量指针被转化成非常量指针,并且仍然指向原来的对象;
 *   常量引用被转换成非常量引用,并且仍然指向原来的对象;
 *
 *   
 *
 */

void useChange(){
    int a=10;
    char b='C';
    b= static_cast<char>(a);
    auto *templateSon3=new TemplateSon2<EightPerson,EightPerson>();
    auto *templateBase1=new TemplateBase1<EightPerson>();
    templateSon3= static_cast<TemplateSon2<EightPerson, EightPerson> *>(templateBase1);


    const int* p = NULL;
    int* np = const_cast<int*>(p);

    int* pp = NULL;
    const int* npp = const_cast<const int*>(pp);

    const int a2= 10;  //不能对非指针或非引用进行转换
//    int b2 = const_cast<int>(a2);  不可以.


}

上一篇下一篇

猜你喜欢

热点阅读