#include <iostream>
using namespace std;
#include<string>
//声明Person
template<class NameType, class AgeType>
class Person;
//声明printPerson2函数
template<class NameType, class AgeType>
void printPerson2(Person<NameType, AgeType> &person);
template<class NameType, class AgeType>
class Person {
//类内全局函数(友元)
friend void printPerson1(Person<NameType, AgeType> &person) {
cout << "类内实现——name:" << person.name << "\tage:" << person.age << endl;
}
//全局函数类外实现(友元),在声明友元前,需要让编译器知道这个模板函数的存在,需要先声明。
friend void printPerson2<>(Person<NameType, AgeType> &person);
public:
//构造函数声明
Person(NameType name, AgeType age);
private:
NameType name;
AgeType age;
};
//类模板的构造函数类外实现
template<class NameType, class AgeType>
Person<NameType, AgeType>::Person(NameType name, AgeType age) {
this->name = name;
this->age = age;
}
//全局函数的类外实现
template<class NameType, class AgeType>
void printPerson2(Person<NameType, AgeType> &person) {
cout << "类外实现——name:" << person.name << "\tage:" << person.age << endl;
}
void test() {
Person<string, int> person("tom", 19);
printPerson1(person);
}
void test2() {
Person<string, int> person("tom", 19);
printPerson2(person);
}
int main() {
test();
test2();
}
C++类模板与友元
最新推荐文章于 2023-08-13 09:55:12 发布