c++之类模板和友元

2020-08-26 16:08:20 浏览数 (1)

全局函数类内实现:直接在类内声明友元即可;(建议使用这种,更简单)

全局函数类外实现:需要提前让编译器知道全局函数的存在;

代码语言:javascript复制
#include<iostream>
using namespace std;

//通过类外实现需要先知道Person;
template<class T1, class T2>
class Person;

//通过类外实现需要先知道show2();
template<class T1, class T2>
void show2(Person<T1, T2> p) {
    cout << "姓名:" << p.name << endl;
    cout << "年龄:" << p.age << endl;
};

template<class T1, class T2>
class Person {
    //全局函数类内实现
    //说明:这里这个函数已经不是类的成员函数了,在调用时直接使用即可,而不用p.show();
    friend void show(Person<T1, T2> p) {
        cout << "姓名:" << p.name << endl;
        cout << "年龄:" << p.age << endl;
    }
    //全局函数类外实现
    //加空模板参数列表
    //需要让编译器提前知道这一个函数的存在
    friend void show2<>(Person<T1, T2> p);
public:
    Person(T1 name, T2 age) {
        this->name = name;
        this->age = age;
    }
private:
    T1 name;
    T2 age;
};

void test() {
    Person<string, int> p("tom", 12);
    show(p);
    show2(p);
}

int main() {
    test();
    system("pause");
    return 0;
}

0 人点赞