这是她 发表于 2020-6-4 21:19:40

C++旅程第10站——类模板3

Luck is what you have left over after you give 100 percent.

类模板成员函数类外实现
#include<iostream>
#include<string>

using namespace std;

template<class T1,class T2>
class Student
{
        public:
                T1 m_name;
                T2 m_num;
               
                //成员函数类内声明
                Student(T1 name,T2 num);
               
                void showstudent();
};

//构造函数 内外实现
template<class T1,class T2>
Student<T1,T2>::Student(T1 name,T2 num)
{
        this->m_name = name;
        this->m_num = num;
}

//成员函数 类外实现
template<class T1,class T2>
void Student<T1,T2>::showstudent()
{
        cout << "name : " << this->m_name << "num : " << this->m_num << endl;
}

void test1()
{
        Student<string,int>p("回锅肉",50);
        p.showstudent();
}

int main()
{
        test1();
       
        return 0;
}
类模板分文件编写
1、直接包含.cpp源文件
2、将声明和实现写到同一个文件中,并更改后缀名为.hpp(hpp是约定的名称不是强制)

类模板和友元
全局函数类内实现——直接在类内声明友元
全局函数类外实现——需提前让编译器知道全局函数的存在
#include<iostream>
#include<string>

using namespace std;

//全局函数配合友元类外实现
//函数声明模板->函数模板定义->友元

//增加类模板声明
template<class T1,class T2>
class Student;

//需要将实现体写在前面让编译器看到    也可以将实现体写到后面

//实现体写在后面,先声明
template<class T1,class T2>
void showstudent3(Student<T1,T2>&p);

//实现体写在前面
template<class T1,class T2>
void showstudent2(Student<T1,T2>&p)
{
        cout << "showstudent2!!!!!!!!!!!!!!!!!" << endl;
        cout << " name : " << p.m_name << "   num : " << p.m_num << endl;
}

template<class T1,class T2>
class Student
{
        //全局函数类内实现
        friend void showstudent1(Student<T1,T2>&p)
                {
                        cout << "showstudent1!!!!!!!!!!!!" << endl;
                        cout << "name : " << p.m_name << "   num : " << p.m_num << endl;
                }
        //全局函数类外实现类内声明
        //加空模板参数列表
        friend void showstudent2<>(Student<T1,T2>&p);
        friend void showstudent3<>(Student<T1,T2>&p);
       
        public:
                T1 m_name;
                T2 m_num;
               
                Student(T1 name,T2 num)       
                {
                        this->m_name = name;
                        this->m_num = num;
                }
};

//实现体实现
template<class T1,class T2>
void showstudent3(Student<T1,T2>&p)
{
        cout << "showstudent3!!!!!!!!!!!!!!!!!" << endl;
        cout << " name : " << p.m_name << "   num : " << p.m_num << endl;
}

void test1()
{
        Student<string,int>a("上上谦",99999);
        showstudent1(a);
        showstudent2(a);
        showstudent3(a);
}

int main()
{
        test1();
       
        return 0;
}
                                                      我又来喽{:10_287:}

页: [1]
查看完整版本: C++旅程第10站——类模板3