簡體   English   中英

如何根據事件初始化 c++ 中的 class?

[英]How to initialize a class in c++ based on an event?

我的程序以用戶提到的特定方式執行某些任務。 完成任務的方法只有三種。 問題在於這三種方式雖然需要執行相同的工作,但需要使用不同的數據結構來實現特定位置的各種性能提升。 因此,我為每種方式執行 3 個不同的課程。

我可以為每種方式編寫一個單獨的完整程序,但是正如我之前提到的,它們執行的是相同的任務,因此會重復很多代碼,感覺效率較低。

寫這一切的最佳方式是什么?

我在想的是創建另一個 class,比如這 3 個包含虛函數和所有類的“任務”基礎 class。 然后根據用戶輸入將其類型轉換為三種方式之一。 但是,我不確定我將如何做到這一點(從未做過任何接近此的事情)。

我找到了一個針對相同問題的答案- https://codereview.stackexchange.com/a/56380/214758 ,但仍然不清楚。 我只想在那里問我的問題,但由於聲譽點而不能這樣做。

我的課程藍圖到底應該是什么樣子?

編輯:我期望的程序流程的偽代碼:

class method{......}; //nothing defined just virtual methods
class method1: public method{......};
class method2: public method{......};
class methods: public method{......};

main{/*initialise method object with any of the child class based on user*/
/*run the general function declared in class method and defined in respective class method1/2/3 to perform the task*/}

我可以提出以下建議:1)閱讀 c++ 中的多態性。 2) 一般來說,請閱讀 c++ 設計模式。 但是對於您的情況,請閱讀命令設計模式。

因此,不要使用強制轉換,而是使用多態性:

class Animal
{
  virtual void sound() = 0; // abstract
};

class Cat : public Animal
{  
  virtual void sound(){ printf("Meouuw") }
};

class Dog : public Animal
{
  virtual void sound(){ printf("Bauuu") }
};

int main()
{
  Animal *pAnimal1 = new Cat(); // pay attention, we have pointer to the base class!
  Animal *pAnimal2 = new Dog(); // but we create objects of the child classes

  pAnimal1->sound(); // Meouuw
  pAnimal2->sound(); // Bauuu
}

當您擁有正確的對象時,您無需投射。 我希望這有幫助。 使用命令模式創建不同的命令,將它們放入隊列中並執行它們......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM