请季老大等大虾帮忙看看C++语意的问题

csw 2003-10-17 09:32:00
什么情况下用private pure function?
什么情况下用protected pure function?
cb线程类的execute为什么放在protected区域?
...全文
47 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
csw 2003-10-17
  • 打赏
  • 举报
回复
to LanceX:
1. "pure fun意味着:subclass必须继承并且实现代码?你指的是pure virtual fun" --> pure 一定是virtual的.
2."如果放在private区域,它就不是多态了,而仅仅是overwrite." ->你可以试试有没有多态,呵呵,前面已经提到"access level与是否为virutal无关"..

to ThinkX:
这个评价还是中肯的。呵呵
ThinkX 2003-10-17
  • 打赏
  • 举报
回复
private virtual function还是有用的,一个类如果希望子类要么完全改写这个虚拟函数,要么就使用自己提供的虚拟函数,而不希望派生类调用这个虚拟函数,那么private virtual function就是有用的。
LanceX 2003-10-17
  • 打赏
  • 举报
回复
private virtual function大可不必,派生类是无法调用基础类的私有函数的,因此,充其量只不过是覆盖了基础类的实现。却会导致误解。划不来。
pure fun意味着:subclass必须继承并且实现代码?你指的是pure virtual fun吧?

cb线程类的execute为什么放在protected区域?
我觉得很应该啊!TThread的execute声明为纯虚函数,表示无法创建一个TThread实例,只能且必需在其派生类实现execute函数,由其派生类生成实例,进行操作。如果放在private区域,它就不是多态了,而仅仅是overwrite.
LanceX 2003-10-17
  • 打赏
  • 举报
回复
private关键字则意味着,除了该类型的创建者和类的内部成员函数之外,任何人都不能存
取这些成员。
protected与private基本相似,只有一点不同:继承的结
构可以访问protected成员,但不能访问private成员。

关键字protected对于继承有特殊的意义。在理想世界中,private成员总是严格私有的,但
在实际项目中,有时希望某些东西隐藏起来,但仍允许其派生类的成员访问。于是关键字
protected派上了用场。它的意思是:“就这个类的用户而言,它是private的,但它可被从这个类继承来的任何类使用。

以上摘自《C++编程思想》
csw 2003-10-17
  • 打赏
  • 举报
回复
effective 44告诉我们:pure fun意味着:subclass必须继承并且实现代码,而这个地方是个private,显然无法直接继承(请注意直接两个字),也是我们第一眼看上去无法理解的,也是和文章的主人翁一样的感受,其实由于template method是个以base 提供接口的方法,而subclass只是实现其中的代码,所以从语意上说当然是可以。
实现上如下:
a --> base class private pure fun
b --> subclass private fun --> 实现 base 的private pure fun
这样,事实上是"继承"了原函数,也满足需求,
有人要问为什么放在private而不是protected,类似Tthread的execute(pure protected)
你可以从语意上理解,假设还有一个c 继承b,如果没有提供fun的话,那fun对c是隐藏的,而protected则是公开的。。
csw 2003-10-17
  • 打赏
  • 举报
回复
在一般的设计里面的确不大用的到,但在template method中,语意陡然变的晦涩难懂,起码我是这么感觉。 :)
http://www.csdn.net/develop/Read_Article.asp?Id=7767
csw 2003-10-17
  • 打赏
  • 举报
回复
呵呵,为什么没有语意,fun是个实现细节,但是在当前类我不想实现它--> pure fun
fun是个私有函数,我不想公开它 --> private,完全是两个不同的概念,为什么不能融合到一起..
Siney 2003-10-17
  • 打赏
  • 举报
回复
private pure function?
这样的函数我认为没有任何作用(而且根本不可能这样写),根本谈不上语意。
csw 2003-10-17
  • 打赏
  • 举报
回复
当然有意义,access level与是否为virutal无关,private代表你只想在当前类使用,virtual代表你可以,当然子类也可以不覆盖你的代码.
佣工7001 2003-10-17
  • 打赏
  • 举报
回复
private virtual 这样还有意义吗?也等大虾指点!
qiuafa 2003-10-17
  • 打赏
  • 举报
回复
进招
Kabin 2003-10-17
  • 打赏
  • 举报
回复
private 为私有成员
protected 为保护成员

protected 成员在子类中可以为 public,亦可以为 private,声明子类时 访问权限控制
csw 2003-10-17
  • 打赏
  • 举报
回复
我指的是语意。
一个protected virtual function告诉你:‘你写的派生类应该,哦,可是说是必须调用我的实现。’而一个private virtual function是在说:‘派生类可以覆盖,也可以不覆盖我,随你的便。但是你不可以调用我的实现。’”
yejun52 2003-10-17
  • 打赏
  • 举报
回复
1.2.虚函数只是为继承欲留接口.至于private或protected,和一般方法没什么区别.
3.不能直接调用,由线程本身执行.
csw 2003-10-17
  • 打赏
  • 举报
回复
哎,不说了,一点意思都没有,还不如看看书。呵呵。谢谢各位。
TopCat 2003-10-17
  • 打赏
  • 举报
回复
另外说句提外话,ThinkX你用过命令行编译吗?帮我看看这个问题吧:

http://expert.csdn.net/Expert/topic/2366/2366279.xml?temp=.505871
纯SDK程序怎样包含对话框?
TopCat 2003-10-17
  • 打赏
  • 举报
回复
to ThinkX:
pure virtual function 也可以有实现的,不过用的比较少,因为大部分情况下pure virtual func是用于协议类的,这种情况下不需要有实现,只需要留个位置。

to jiangchun_xn:
你说的一点也没错,问题是不用pure这个单词怎么表示C++里的纯虚函数?virtual function = 0? :)
jiangchun_xn 2003-10-17
  • 打赏
  • 举报
回复
pure ,我咋不知道这个关键字呢??

是说纯虚函数把。。。
ThinkX 2003-10-17
  • 打赏
  • 举报
回复
to csw() :
我同意TopCat的,private的目的是为了隐藏实现,而pure virtual function没有实现细节,就没有隐藏的必要,所以private pure virtual function就没有意义,而带有实现的private virtual function则是有意义的。另,据我所知java中的private不是虚拟的,只有protected和public函数才是虚拟的。
csw 2003-10-17
  • 打赏
  • 举报
回复
to LanceX:
多态指的是实现函数的动态绑定,跟谁能调用谁有什么关系,至于override,有些书上提法不大一样,不好说。
加载更多回复(7)

13,824

社区成员

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

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