4.2 C++ 类模板 (补习)

B战黑马程序员  C++ 

语法

template   <  typename   T  >

{类}

#include 
#include 
using namespace std;

template 
class Student
{
public:
    Student(Num n1, Name n2)
    {
        this->num = n1;
        this->name = n2;
    }
    Num num;
    Name name;

    void ShowMem()
    {
        cout << num << name << endl;
    }
};

int main()
{
    Student s1(5, 'F');
    s1.ShowMem();       //输出: 5F

    Student s2(6,"han meimei" );
    s2.ShowMem();       //输出: 6han meimei
    return 0;
}

类模板和函数模板的区别

  1. 类模板没有自动类型推导的使用方式
  2. 类模板在模板参数列表中可以有默认参数:

    4.2 C++ 类模板 (补习)_第1张图片

类模板中成员函数创建时机

类模板中成员函数和普通类中成员函数创建时机是有区别的:

  1. 普通类中的成员函数一开始就可以创建
  2. 类模板中的成员函数在调用时才创建:

    4.2 C++ 类模板 (补习)_第2张图片

4.2 C++ 类模板 (补习)_第3张图片

类模板对象做函数参数


类模板实例化出的对象,向函数传参的方式,—共有三种传入方式:

  1. 指定传入的类型---直接显示对象的数据类型(使用最多)
  2. 参数模板化---将对象中的参数变为模板进行传递
  3. 整个类模板化---将这个对象类型模板化进行传递
// 类模板对象作函数参数的三种方式:
template 
class Computer
{
public:
    T1 mt1;
    T2 mt2;
    Computer(const T1 &t1,const T2& t2)
    {
        this->mt1=t1;
        this ->mt2=t2;
    }
    void func()
    {
        cout< c)
{
    c.func();
}

// 2.参数模板化---将对象中的参数变为模板进行传递
template 
void test2(Computer c)
{
    c.func();
}

// 3.整个类模板化---将这个对象类型模板化进行传递
template 
void test3( T c)
{
    c.func();
}
int main()
{
    Computer c1("CPU",'A');
    test1(c1);//第一种
    test2(c1);//第二种
    test3(c1);//第三种
    return 0;
}

类模板与继承

//类模板与继承
template 
class Father
{
public:
    T t1;
    Father()    {}
};

//class Son:public Father            //1.报错!!!不知道父类的类型
//class Son:public Father      //2.这种编译通过
template //3.为灵活指定父类中的T类型,这里把子类也变为类模板;
class Son:public Father
{
public:
    T1 t1;
    T2 t2;
    Son()
    {
        cout<<"t1的类型是: "<s1;
    return 0;
}

类模板成员函数的类外实现

// 类模板成员函数的类外实现

template 
class Temp
{
public:
    T1 m_name;
    T2 m_age;

    Temp(T1 name, T2 age);   

    void ShowMem();
};

// 构造函数的类外实现:
template 
Temp::Temp(T1 name, T2 age) // 1.限定作用域  2.指明类型  3.加上类模板
{
    m_name = name;
    m_age = age;
}

// 普通成员函数的类外实现:
template // 1.限定作用域  2.指明类型  3.加上类模板  4.返回值类型
void Temp::ShowMem()
{
    cout<<"m_name ="<

类模板分文件编写

类模板与友元

模板案例:数组类封装

jsetc 课程  C++ 4.2 类模板

栈和队列

会写类模板

缺省参数模板

你可能感兴趣的:(c++,开发语言)