普通派生类中的成员函数模板,访问基类的保护成员的权限问题

咸蛋_超人 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
如果注释掉,编译通过,运行正常。
这是否所说,成员函数模板不能访问公共继承下来的保护成员?按派生类的普通成员函数的规则,是应该可以访问保护成员的,为什么成员函数是函数模板就不行了?
...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
勉励前行 2014-04-12
  • 打赏
  • 举报
回复
模板这样写: template <typename T> char get(T var){return var.c;} 这样调用:t.get(t) 你注意一下: char c; 是保护的,在外部是不可访问的,也就是不能访问 t.c 的。 你这个例子没必要 用模板。
MonkeyKingMKY 2014-04-12
  • 打赏
  • 举报
回复
好像理解错了吧~~ 你穿的参数 又不是 类内部, 类的外部当然 对 protected 不可见了

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧