C++__模板

//参考博客
//1.https://blog.csdn.net/low5252/article/details/94654468
//2.https://blog.csdn.net/low5252/article/details/94622335
//3.https://www.runoob.com/w3cnote/c-templates-detail.html

#include <iostream>
#include <string>
using namespace std;

//1.函数模板 class关键字也可用typename关键字替代
template<class T, class T2>
void swap1(T& x, T&  y, T2& z)
{
    T temp = x;
    x = y;
    y = temp;
    y = z;
}
//2.编译器由模板自动生成函数的过程叫模板的实例化。由模板实例化而得到的函数称为模板函数。
//3.在某些编译器中,模板只有在被实例化时,编译器才会检查其语法正确性。

//4.模板实例化并非只能通过形参,主动指明要用哪种类型也可以。
template <class T>
T fun1(T n)
{
    return n + 1;
}

//5.类模板
template <class T>
class A
{
public:
    A(T t)
    {
        this->t = t;
    }

    T &getT()
    {
        return t;
    }

    void fun_aaa(T &t);

private:
    T t;
};

//6.类模板成员函数在类外定义
template<class T>
void A<T>::fun_aaa(T &t)
{
    //
}

//7.类模板派生
template<class T>
class Car
{
public:
    Car(T t)
    {
        this->t = t;
    }
    void out()
    {
        cout << t << endl;
    }

private:
    T t;
};

//从模板类派生时,需要具体化模板类,C++编译器需要知道基类的数据类型
class Toyota : public Car<string>
{
public:
    Toyota(int money, string from) : Car<string>(from)
    {
        this->money = money;
    }

    void out()
    {
        Car::out(); //Car<string>::out();
        cout << money << endl;
    }

private:
    int money;
};

void main()
{
    //例1:函数模板
    {
        int a = 1;
        int b = 3;
        double c = 5;
        swap1(a, b, c);
    }

    //例2:明确实例化类型
    /*
    double fun1(double n)
    {
    return n + 1;
    }
    */
    {
        int a = 8;
        cout << fun1<double>(a) / 2 << endl; //输出4.5
    }

    //例3:类模板
    {
        A<int> a(2);
    }
    //类模板的模板形参类型,必须在类名后的<>中明确指定

    //例4:类模板派生
    string from = "Japan";
    Toyota car1(200000, from);
    car1.out();

    system("pause");
    return;
}

//todo 先到这

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值