1

例如,

Class myMath (){ int doMath(int x, int y)}

main()
  {
     myMath math[5];

     math[0].doMath(10,20);     //this will add x and y
     math[1].doMath(3,1);       //this will subtract x and y
     etc...
  }

如何才能做到这一点?我是c ++的初学者,所以请详细解释:P 谢谢。

4

1 回答 1

1

(此答案假定 C++ 的 C++11 标准。)

正如您在评论中指出的那样,我们可以假设存储在数组中的所有操作都将采用两个整数参数并返回一个整数。因此可以将它们表示为这种数据类型的函子:

std::function<int(int,int)>

该数据类型的固定大小的 5 元素数组最好实现为

std::array<std::function<int(int,int)>,5>

下面是一个使用这些数据类型的完整示例。它使用标准库(等)提供的函数对象实现四种基本操作。还有第五个算术运算,我使用整数幂的特殊实现。它被实现为 lambda 函数(C++11 提供的一种新的匿名函数类型。它也可以转换为数组并存储在数组中。std::plus<int>std::minus<int>std::function<int(int,int)>

#include <iostream>
#include <functional>
#include <array>

int main()
{
  /* Customized arithmetic operation. Calculates the arg2-th
     power of arg-1. */
  auto power = [](int arg1, int arg2) {
    int result = 1;
    for (int i = 0 ; i < arg2 ; ++i)
      result *= arg1;
    return result;
  };

  /* Fixed-size array of length 4. Each entry represents one
     arithmetic operation. */
  std::array<std::function<int(int,int)>,5> ops {{
      std::plus<int>(),
      std::minus<int>(),
      std::multiplies<int>(),
      std::divides<int>(),
      power
  }};

  /* 10 + 20: */
  std::cout << ops[0](10,20) << std::endl;
  /* 3 - 1: */
  std::cout << ops[1](3,1) << std::endl;
  /* 3rd power of 9: */
  std::cout << ops[4](9,3) << std::endl;

  return 0;
}
于 2012-10-25T05:20:06.953 回答