C++模版:类模版的友元函数
作者:互联网
类模版可以有友元函数。
友元函数可以是普通函数。
template <typename T>
class Stack {
private:
T items[10];
int top;
public:
Stack();
void setTop(int top);
bool isEmpty();
friend int size2(Stack<T> & stack);
};
size2()
并不是函数模版,但它的参数是类模版。定义size2()
,其类模版参数必须指定类型。
int size2(Stack<int> & stack) {
return stack.top;
}
size2()
只能接受Stack<int>
。如果使用Stack<double>
,则程序编译失败:Undefined symbol: size2(Stack<double>&)
。
void test9() {
Stack<int> a;
a.setTop(2);
int length2 = size2(a);
std::cout << "Stack<int> a length2: " << length2 << std::endl;
Stack<double> b;
// size2(b); // Undefined symbol: size2(Stack<double>&)
}
友元函数可以是函数模版。
template <typename T>
class Stack {
private:
T items[10];
int top;
public:
Stack();
void setTop(int top);
bool isEmpty();
template <typename T4> friend int size4(T4 & stack);
};
size4()
是函数模版,其定义如下。
template <typename T4>
int size4(T4 & stack) {
return stack.top;
}
size4()
只能接受这样的类型:包含成员变量top
。Stack
是符合的。
void test10() {
Stack<int> a;
a.setTop(4);
int length4 = size4(a);
std::cout << "Stack<int> a length4: " << length4 << std::endl;
}
阅读原文,关注公众号[空与一]
标签:友元,size2,int,模版,top,C++,stack,Stack 来源: https://blog.csdn.net/Anzeron/article/details/121031912