用继承还是类成员
我要实现一个类DateTime,已实现Date和Time类。请问是将Date和Time作为DateTime类的成员变量好,还是将由Date和Time派生DateTime好呢?请问为什么?
------解决方案--------------------个人认为 复合是优于继承的
但针对你的问题,他们有多个抽象的方法,比如Get(),Set(),Now()等这些方法的话,用继承比较好
------解决方案--------------------看情况吧。
从你的叙述我没看出来date、time有职责。
如果是is a的关系:也即datetime是一个date、time。现实例子:鸟是一种动物,这里的动物是一个基类。
如果是have a的关系:也是datetime拥有date、time。现实例子:汽车有很多部件共同协作运作。
汽车包含了部件对象,运用了部件的方法。
------解决方案--------------------FYI
class Time
{
unsigned long long time;
virsual int setTime();
virsual int getTime();
};
class Date : public Time
{
};
class Clock: public Time
{
};
class DateClock
{
Date date;
Clock clk;
...
}
------解决方案--------------------我觉得用复合还是好一些,看你具体的需求了
------解决方案--------------------我觉得复合貌似更符合逻辑思维。不考虑细节。
------解决方案--------------------显然成员好些,符合直观认识。
------解决方案--------------------这个有时候组合和继承都可以达到一样的效果,可是我曾经看到过一句话,有关于C++编程的,能用组合的地方不要用继承。因为组合的话关于内存的布局很清晰明朗,如果是继承的话会引起对象布局的变化,很不好理解
------解决方案--------------------
想想date,time的职责吧。
is a就用继承
have a就用组合
------解决方案--------------------当你需要virtual的时候,还可以考虑用delegate或strategy的方法
甚至是设计一个generic的接口
void generic_interface(std::function<void()> const &A);
exceptional c++的items 20~25对此有详细的阐述
很务实的比较了不同方法的优劣