【发布时间】:2014-03-03 10:55:13
【问题描述】:
假设你有一个基类:
class base
{
public:
virtual void OnConnect() = 0;
virtual void OnDisonnect() = 0;
// Other functions ...
};
有几个类继承自基类,其中大多数对这两个函数有不同的实现。但是,其中一个派生类具有相同的内容,我想知道以下哪种样式更好,为什么:
(A) 在两个函数中保留重复的代码
void derived::OnConnect(const char* err)
{
/*
* 3~5 lines of code in this function with a block of comment.
*/
}
void derived::OnDisconnect(const char* err)
{
/*
* 3~5 lines of code in this function with a block of comment.
*/
}
(B) 将一个委托给另一个
void derived::OnConnect(const char* err)
{
/*
* 3~5 lines of code in this function with a block of comment.
*/
}
void derived::OnDisconnect(const char* err)
{
// Same as OnConnect()
OnConnect(err);
}
(C) 定义另一个函数并在 OnConnect/OnDisconnect 中调用该函数
static func(const char* err)
{
/*
* 3~5 lines of code in this function with a block of comment.
*/
}
void derived::OnConnect(const char* err)
{
func(err);
}
void derived::OnDisconnect(const char* err)
{
func(err);
}
哪个更好?
【问题讨论】:
-
注意:这不是
c,所以你不需要那个标签。而且没有c/c++语言。 -
我会选择选项 (C),特别是如果函数名称告诉阅读代码的人它实际上做了什么。
-
为什么
func不是选项C中的类方法? -
我会选择替代 C,因为它以最清晰的方式表达了意图(即连接和断开连接是不同的事件,但它们需要执行相同的操作)并且您将为极有可能发生的事件是您想在其中做某事而不想在另一件事中做。
-
纳布拉是对的。它应该是一个私有成员函数。
标签: c++ coding-style