2

さまざまなクラスで使用したい関数があります。これは可能ですか?

例:

int getNumber()
{
  // do something here that will use some values like:
  int number = num * pi;
  return number;
}

class Human
{
  int num;
  // other member
  int getNumber(); // same as above
}

class Robot
{
  int num;
  // other member
  int getNumber(); // same as above
}

関数は、関数内で発生する計算に応じてgetNumber()短くすることも長くすることもできます。return num;

内のnum値は両方とクラスgetNumber()のメンバーです。ただし、これらのクラスには親子関係や友達関係はありません。numHumanRobot

4

3 に答える 3

3

確かに簡単です。C++ には委譲のための甘い構文はありませんが (残念なことに、これにより多くの継承の乱用が発生しています...)。

1. 自由関数の方法

int transformNumber(int num) { return num * pi; }

class Human {
public:
    int getNumber() const { return transformNumber(num); }

private:
    int num;
};

2. 構成方法

struct NumberThing {
    int num;

    int getNumber() { return num * pi; }
};

class Human {
public:
    int getNumber() { thing.getNumber(); }

private:
    NumberThing thing;
};

お気に入りを選んでください。

于 2013-08-23T07:03:56.277 に答える
0

この機能を持つクラスを作成し、その機能を使用する他のクラスを拡張します。

于 2013-08-23T02:09:04.597 に答える
-1

これは、継承を使用する良い例です。両方のオブジェクトには共通点があり、多くの場合、実際にはより一般的なクラスのサブクラスであることを意味します。

class Being
{
    int num;
    int getNumber() {/* .. */}
}

class Robot: public Being
{

}

class Human: public Being
{

}
于 2013-08-23T02:12:29.673 に答える