C++学习记录-模板-类模板与友元问题

**一、全局函数类内实现:**直接实现即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<class T1>
class chara {

friend void printinfo(chara<T1> p)
{
cout << p.name << endl;
}
//全局函数类内实现

private:
T1 name;

public:
chara(T1 nam)
{
name = nam;
}
};

二、全局函数类外实现:应使用前向声明,让编译器提前知道类和函数的存在

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//前向声明

template<class T1>
class chara;//声明有一个类模板

template<class T1>
void printinfo(chara<T1> p);//声明printinfo函数


//类中签发友元
template<class T1>
class chara {

friend void printinfo<>(chara<T1> p);//注意,这里要加空参数列表<>表明该函数使用了模板,这样才能匹配

private:
T1 name;

public:
chara(T1 nam)
{
name = nam;
}

};


//实现函数
template<class T1>
void printinfo(chara<T1> p)
{
cout << p.name << endl;
}