QA@IT

[C++] Classで定義された関数をFor文で回す方法等

9039 PV

C++に関しての質問です。
端的に言いますとClassの関数を配列のように管理する方法が知りたいです。下記詳細

class NUM{
private:
int a, b;

public:
//便宜上関数を2つ適当に用意して起きます。 
int a_plus_b(); //return a + bとします。 
output(); //return; 処理内容な関係ない
};

を用意し、main関数内で複数個定義します。

今回は便宜上 num1, num2, num3とします。

質問1
num1.a_plus_b();
で関数を呼び出せると思いますが、それをnum2, num3と連続的に行いたいという内容が1点目です。

num1.a_plus_b();
num2.a_plus_b();
num3.a_plus_b();

をFor文で回す。

for(int i=0; i<3; i++){
num[i+1].a_plus_b();
}

と言った感じです。

質問2
質問1で最大値を返したクラスのoutput関数を呼び出したいです。 

switch (num) {
        case 1:
            num1.output(); return;
        case 2:
            num2.output(); return;
        case 3:
            num3.output(); return;
    }

をもっと効率的にしたいです。

ご回答よろしくお願いします。

  • タイトルは「クラスで定義された関数を」ですが、質問内容は「複数のインスタンス連続して操作する」です。どちらが正しいですか?仕様や用語を確認してください。 -
  • すみません、上の「質問内容は」を「コードの内容は」に訂正します。 -
  • 複数のインスタンスが正しいです。カードが正しいと思ってご助言いただければと思います -

回答

質問1

for 文のようにインスタンスを配列に入れる。

NUM num[] = {
    new NUM(),
    new NUM(),
    new NUM(),
    ...
};

int max = -1;
int index = -1;
for (int i = 0; i < sizeof(num) / sizeof(NUM); ++i)
{
    int ans = num[i].a_plus_b();
    if (max < ans)
    {
        max = ans;
        index = i;
    }
}

質問2

配列に入れたので、その添え字を使えば良い。

return index < 0 ? 0 : num[index].output();
編集 履歴 (1)
ウォッチ

この質問への回答やコメントをメールでお知らせします。