如何根据事件在 C++ 中初始化 class?
How to initialize a class in c++ based on an event?
我的程序以用户提到的特定方式执行某些任务。
有三种方法可以完成任务。问题是这三种方法虽然做同样的工作,但需要在特定位置使用不同的数据结构来实现各种性能提升。因此,我为每种方式执行 3 种不同的 classes。
我可以为每个方法单独写一个完整的过程,但是正如我前面提到的,它们执行相同的任务,所以很多代码重复,感觉不太有效。
写这一切的最佳方式是什么?
我在想的是创建另一个 class,比如 'Task' 基础 class 这 3 个 class 包含虚函数和所有。然后根据用户输入将其转换为三种方式之一。但是,我不确定我该怎么做(从来没有做过类似的事情)。
我找到了一个针对相同问题的答案 - https://codereview.stackexchange.com/a/56380/214758,但我仍然不清楚。我只想在那里问我的问题,但是因为声望点不能这样做。
我的 classes 蓝图究竟应该是什么样子?
编辑:
我期望的程序流程的伪代码:
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
}
当你有合适的对象时,你不需要投射。我希望这有帮助。
使用命令模式来创建不同的命令,把它们放在例如在队列中执行它们...
我的程序以用户提到的特定方式执行某些任务。 有三种方法可以完成任务。问题是这三种方法虽然做同样的工作,但需要在特定位置使用不同的数据结构来实现各种性能提升。因此,我为每种方式执行 3 种不同的 classes。
我可以为每个方法单独写一个完整的过程,但是正如我前面提到的,它们执行相同的任务,所以很多代码重复,感觉不太有效。
写这一切的最佳方式是什么?
我在想的是创建另一个 class,比如 'Task' 基础 class 这 3 个 class 包含虚函数和所有。然后根据用户输入将其转换为三种方式之一。但是,我不确定我该怎么做(从来没有做过类似的事情)。
我找到了一个针对相同问题的答案 - https://codereview.stackexchange.com/a/56380/214758,但我仍然不清楚。我只想在那里问我的问题,但是因为声望点不能这样做。
我的 classes 蓝图究竟应该是什么样子?
编辑: 我期望的程序流程的伪代码:
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
}
当你有合适的对象时,你不需要投射。我希望这有帮助。 使用命令模式来创建不同的命令,把它们放在例如在队列中执行它们...