在 c++ 中是否有任何方法可以使一个类的函数,每个类的对象都为该函数做不同的事情?
Is there anyway in c++ to make a function of a class who's objects each do something different for that function?
只是一些背景:
我正在制作一个垄断游戏,现在我必须实施每个空间的行动,如GO、房产(升级)、机会、公益金、监狱等。
我考虑过为每个空间制作一个不同的类(但显然这会非常耗时)。我相信还有一种方法可以通过继承和纯虚拟函数来实现。你们有没有想过这会让这个过程变得更简单?
谢谢!
只有几种不同类型的空间:
- 特性
- 铁路
- 机会/公益金
- 公用设施
- 其他单身人士,比如去监狱、停车、纳税
例如,您可以有一个Property
类,其中该类的每个实例都有不同的名称/颜色/价格。您不必创建22个不同的类,只需有22个具有不同名称的同一类实例即可。
请注意,拥有代表您可以登陆的空间的类实例只是实现类似游戏的一种方法。我很确定我不会选择那个选项。
有两种方法可以让一个函数在给定对象的情况下做不同的事情:
-
根据对象的数据区分行为。
您可以使用数据来捕捉不同空间中的差异。
enum SpaceType { GO, CHANCE, COMMUNITY_CHEST, // etc... }; class Space { public: void foo() { switch (spaceType) { case GO: // DO stuff for GO break; case CHANCE: // DO stuff for CHANCE break; // etc.. } } private: SpaceType spaceType; }
-
根据对象的类型区分行为。
class Space { public: virtual void foo() = 0; }; class GoSpace : public Space { public: virtual void foo() { // Do stuff for GO } }; class ChanceSpace : public Space { public: virtual void foo() { // Do stuff for CHANCE } }; // Similarly for other classes.
选择你的方法。就我个人而言,我会选择第二种方法,因为每种不同类型的逻辑都被放入它们自己的函数中,而不会像其他类型那样复杂
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数