我正在設計一個C++框架,該框架應該提供基本功能並充當其他派生系統的接口。C++設計查詢
#include <stdio.h>
class Module
{
public:
virtual void print()
{
printf("Inside print of Module\n");
}
};
class ModuleAlpha : public Module
{
public:
void print()
{
printf("Inside print of ModuleAlpha\n");
}
void module_alpha_function() /* local function of this class */
{
printf("Inside module_alpha_function\n");
}
};
class System
{
public:
virtual void create_module(){}
protected:
class Module * module_obj;
};
class SystemAlpha: public System
{
public:
void create_module()
{
module_obj = new ModuleAlpha();
module_obj->print(); // virtual function, so its fine.
/* to call module_alpha_function, dynamic_cast is required,
* Is this a good practice or there is some better way to design such a system */
ModuleAlpha * module_alpha_obj = dynamic_cast<ModuleAlpha*>(module_obj);
module_alpha_obj->module_alpha_function();
}
};
main()
{
System * system_obj = new SystemAlpha();
system_obj->create_module();
}
編輯代碼更加合乎邏輯,它立即編譯。問題是,有沒有更好的方法來設計這樣的系統,或者dynamic_cast是唯一的解決方案。另外,如果有更多派生模塊,那麼對於類型轉換,基本模塊類中需要一些智能。
這種事情的用例場景是什麼?正如你可能(正確)認識到的那樣,如果你的基類需要知道派生類,那麼可能會有一個基本的設計問題。 – 2012-01-03 10:08:17
用例如下所示 - Base代表系統,Base2代表系統中的模塊。我想概括一下系統和模塊的創建方式,以及這些模塊如何在系統和系統中彼此交互。因此,爲了使模塊相互作用的通用方式,它們必須是Base類的一部分。 – user1127533 2012-01-03 10:23:37