我看不懂---基类成员访问-----访问protected成员:

wyqiang 2003-05-14 06:06:44
c++ primer 740
NameQuery只能访问一个Query类对象的protected成员:他自己的Query子对象。
(这些protected 成员在派生类中通过隐式this指针被访问。关于this指针的
介绍.解决这个解决编译时刻的最直接办法公有成员函数location()重写compare()
函数:

bool
NameQuery::
compare(const Query *pquery)
{
int myMathches=_loc.size();

???? int itsMatches=pquery->location()->size();
return yMatches==itsMatches;
}

那样一句话是啥意思。。。
问的是:他怎样访问私有函数size 的
...全文
71 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baobaowang 2003-05-16
  • 打赏
  • 举报
回复
mark
ckacka 2003-05-16
  • 打赏
  • 举报
回复
先不说这个问题本身
说说关于protected成员在继承和访问中的限制

在继承中,我们只说public继承:
c++标准说:在public继承下,public和protected保持原来的访问特性,被继承到派生类中,显然,对于外部的对象,直接访问protected成员是不可能的,而直接访问public是可以的

compare(const Query *pquery)
这里的pquery是个外部的对象,相对于NameQuery,他们的关系是相对的,可以替代的,也就是说:NameQuery作为一个外部对象访问,想直接访问对象指针pquery中的protected成员,是错误的,因为没有权限许可,比如:int itsMatches = pquery->_loc.size(),成员_loc是protected的
然而我们却可以通过获得指向这样一个protected成员的指针来访问他,不过付出的代价就是增加一个过渡层,即提供一个public,也就是可以直接访问的函数来返回这样一个指针。在《设计与演化》中,这样的函数被称为“接口”(注意这个接口的概念和对象模型的接口不是同一个概念)
wyqiang 2003-05-14
  • 打赏
  • 举报
回复
不是
基类和派生类虚拟函数那章的
snipersu 2003-05-14
  • 打赏
  • 举报
回复
是不是友元?(我的c++primer没在手边,不太清楚书上的例子.)
ghtsao 2003-05-14
  • 打赏
  • 举报
回复
没明白你说的什么?
gop 2003-05-14
  • 打赏
  • 举报
回复
书我没看过,不知道问题所为何来。
不过,你确定,location的size函数是private成员?

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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