MyException - 我的异常网
当前位置:我的异常网» C++ » 用沿袭还是类成员

用沿袭还是类成员

www.MyException.Cn  网友分享于:2013-02-21  浏览:3次
用继承还是类成员
我要实现一个类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的关系:也即datetime是一个date、time。现实例子:鸟是一种动物,这里的动物是一个基类。
如果是have a的关系:也是datetime拥有date、time。现实例子:汽车有很多部件共同协作运作。
汽车包含了部件对象,运用了部件的方法。


想想date,time的职责吧。
is a就用继承
have a就用组合
------解决方案--------------------
当你需要virtual的时候,还可以考虑用delegate或strategy的方法
甚至是设计一个generic的接口


void generic_interface(std::function<void()> const &A);


exceptional c++的items 20~25对此有详细的阐述
很务实的比较了不同方法的优劣

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有