没分了,问个问题,顺便能不能要版主给点分?

THEBEST 2004-05-13 06:13:17
a case for protected virtual functions

That's interesting, because in new code, all of my virtual
functions are protected. A virtual function should never be
public, of course.

but of course, the destructor normally will be public, and normally will be virtual.

/*
exception: interfaces.

class abstract_base
{
public:
virtual void method1() = 0;
};
*/

//为什么这么讲呢?怎么说这是一个exception?
...全文
16 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shornmao 2004-05-14
  • 打赏
  • 举报
回复
这里的exception指的是例外情况,而不是C++语言中的异常机制。
简单的说,就是说虚函数一般是被派生类改写的,所以很多情况下都是protected的,而public是一个模板方法。
就是这样
class Foo
{
public:
void Bar()
{
BeforeBar();
DoBar();
AfterBar();
}
protected:
virtual void BeforeBar();
virtual void DoBar()=0;
virtual void AfterBar();
};
这样使用Bar的派生类的时候,不需要一定要使用指针或者引用就可以获得多态的效果了。而且派生类可以减少和基类的重复代码。

原文中提到的例外指的是析构函数尽管被设计成纯虚的,但是也应该是public的,否则就不能通过基类的指针来析构对象了。

实际上,原文中提到的纯虚函数不能是public的,也不是一定要遵守的,这只是一种惯用的手法,作为程序库的设计,经常使用这种手段。
rorot 2004-05-13
  • 打赏
  • 举报
回复
我倒,楼主得信誉分比俺得还低,不错,来俺给你倒点分。
什么时候要发个信息。
angelboycn 2004-05-13
  • 打赏
  • 举报
回复
楼主你的信誉值。。。我倒,似乎是从来没有结过帖吧,怎么会没有分呢?
THEBEST 2004-05-13
  • 打赏
  • 举报
回复
/*
exception: interfaces.

class abstract_base
{
public:
virtual void method1() = 0;
};
*/
但是我就是不明白为什么有人讲上面的情况也是例外呀?
应该不用什么上下文呀.因为他的意思就是讲把虚拟函数放在protected区里面.
代码之诗 2004-05-13
  • 打赏
  • 举报
回复
虚拟函数成为保护成员比较合理,不过是公共成员也没什么不可以啊。
至于 析构函数,当然是一个例外,它应该是公共的,否则你就没法定义此类的对象,因为编译器会抱怨无法调用其析构函数。
abitz 2004-05-13
  • 打赏
  • 举报
回复
哪里来的话?总的有上下文吧。
还有,斑竹不负责发放工资。

64,281

社区成员

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

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