普通派生类中的成员函数模板,访问基类的保护成员的权限问题
咸蛋_超人 2014-04-12 01:08:59 下面具体说明下无的疑问:
我首先声明一个基类A:
class A
{
public:
A(int vn,char vc){n=vn;c=vc;}
// protected:
int n;
char c;
};
再派生了一个类B
class B : public A
{
public:
B(int vn,char vc):A(vn,vc){}
template <typename T> T get(T var){return var;}
};
用类B中的成员函数模板访问数据成员。
int main()
{
B t(1,'m');
cout<<t.get(t.n)<<endl;
cout<<t.get(t.c)<<endl;
return 0;
}
在A类中,如果不注释掉ptoteted这一行,编译提示关键词:‘char A::c’ is protected
如果注释掉,编译通过,运行正常。
这是否所说,成员函数模板不能访问公共继承下来的保护成员?按派生类的普通成员函数的规则,是应该可以访问保护成员的,为什么成员函数是函数模板就不行了?