[英]class interaction design
可以說我有這樣的編碼
class Normal_Mode;
class Fast_Mode;
class File_Control; //handles all operations with reading/writing in file
class Main_Control {
private:
some_class *root; //all other classes need access to root pointer since there is all the data(binary tree)
File_Control *c_file_control;
Fast_Mode *c_fast_mode;
...
}
Main_Control::Main_Control ( int argc, char* argv[]) {
...
if ( argc > 1 ) {
c_fast_mode = new Fast_Mode(argc, argv[]);
} else {
c_normal_mode = new Normal_Mode();
};
...
};
int main (int argc, char* argv[]) {
Main_Control c_main_control(argc,argv);
return 0;
}
可以說用戶輸入的argc> 1,並且我很樂意使用Fast_Mode類中的用戶輸入來處理內容,但是當我完成操作后,想要在Fast_Mode中將內容寫入文件或從文件中讀取內容時,就可以這樣做。 現實世界中的人們如何訪問File_control類?
它們是否使一些全局數組充滿指向這些僅需要1個實例的類的指針。
他們是否將指針傳遞給Fast_Mode和其他類,以便可以將其存儲在私有成員中以供訪問。
或者他們始終根據需要的時間構造/銷毀此類。
以及如何使用這樣的* root指針來存儲所有實際數據,而許多其他類需要訪問它
還是我的設計思路完全錯誤,現實世界中的人們以其他方式這樣做嗎?
我真的不知道您要通過這個實現什么:如果可能的話,使您的目標更加明確,但是我要說的是,人們通常會創建一個稱為“模式”的抽象接口,然后讓Normal_Mode和Fast_Mode都實現它。 這樣,您可以編寫以下代碼:
class Main_Control {
private:
some_class *root; //all other classes need access to root pointer since there is all the data(binary tree)
File_Control *c_file_control;
Mode *c_mode;
...
};
然后可以將其設置為:
if ( argc > 1 ) {
c_mode = new Fast_Mode(argc, argv[]);
} else {
c_mode = new Normal_Mode();
};
因此,您只需將公共函數放在Mode接口中,以使它們的行為相同,但是可以將它們放在相同的mode變量中。 要了解有關類繼承和多態的更多信息,請參見此處 。 我希望這能回答您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.