CATEGORY / Development

避免在 C++ 类结构中出现私有虚成员函数

Permanent Link: http://wutiam.net/notes/134

最近在重构 C++ 代码时突然想起,如果一个基类的虚成员函数被设为 private,有没有意义?又是否合理?

当然,有其一定的意义,那就是不希望子类在其他地方调用父类的这个函数,包括在子类的实现中;如果需要这个功能,应该使用其 public 的接口去使用该功能。而子类可以提供自己的实现,以提供多态。但是,如果子类觉得需要,还可以把这个 private 的虚成员函数重定义成 protected(虽然这会让人迷惑),从而使子类的子类们调用它。

有同学可能会问,如果是一个 private 的纯虚成员函数(语法上当然合理),那语义合理么?嗯,我觉得这的确是个问题——也许是为了告诉写子类的其他同学,这个虚函数,我不希望你们在除了基类已有的接口里调用之外还来用——仅仅是一个道德约束?!

嗯,C++ 就是灵活得过头了,什么都让程序员自己去把控,可是别忘了,“太多的选择比没有选择糟糕得多”。所以,我决定,为了自己也为了别人不犯迷糊,避免使用 private 的虚函数,private 的成员函数仅包含当前类自己使用的函数。

BTW,类的成员变量正好相反,能设为 private 的尽量不要 protected 更不要public,否则后期维护,嗯嗯,就太痛苦了。

6 Comments / Trackbacks / Pingbacks

Leave a Reply

:) :wink: 8-O :lol: :-D 8) :-| :mrgreen: :oops: :-o :-? :( :twisted: :cry: more »