0

クラスAとクラスのいくつかの関数、およびクラス外のいくつかのグローバル関数を使用するやや大きなプログラムがあります。次に、別の関数を使用して同時に操作したいクラスの複数のオブジェクトがあります。main の外で関数を宣言するのが最善であると私は信じています (少なくとも常にアドバイスされています)。

しかし、メインの外側で宣言すると、オブジェクトのスコープがメインのみに制限され、すべてのオブジェクトを別のパラメーターとして渡したくないため、オブジェクトを呼び出す適切な方法がないように見えます。関数を main 内に配置すれば、これらの問題は発生しないと思います。

これを行うよりエレガントな方法はありますか?

私の質問が明確でない場合のコードの概要は次のとおりです。

class A
{
  void A1();
  void A2();
  void A3();
} //class functions that modify class objects

void A4(); //global function(cant call apple elegantly if placed here)

int main() {
  A apple;
  A banana; //class ojects
  A4(); //gotta modify objects apple and banana by calling A1,A2,A3
        // on them depending on the user input
  return 0;
}

また、そのような場合、main 内で関数を宣言するだけでよい場合は、お知らせください。冗長なものではなく、最良の方法を実装する方法を知りたいだけです:)

4

4 に答える 4

0

これは OOP の設計上の問題です。

すべてのクラスが同じメソッドを持つ必要がある場合。そのメソッドを持つスーパークラスを作成する必要があります。そして、そのクラスから継承して、他のクラスを作成します。そうすれば、すべてのクラスに共通のメソッドが 1 つあり、実装を 1 回記述するだけで済みます ;-)

実際、グローバル メソッドを持つことは見苦しく、OOP の原則に反します。OOPメソッドについても議論できますが。

于 2013-08-24T10:23:51.517 に答える
0

A4() を通常の関数として使用し、クラス A のフレンド関数として指定することで、A4() によってクラス A のメンバーにアクセスできるようにすることができます。

    class A{

     friend void A4 ( A & );

     public:
           void A1(){...}

           void A2(){...}

    };

    void A4 ( A& );

    void A4(A &apple)
    {
      apple.A1();
      apple.A2();
      ....
    }

    int main()
    {
       A apple;

       A4(apple);

       return 0;
     }

クラスAのステートメントに注意してください

    friend void A4(A &);

関数A4の宣言ではなく、単なるアクセス指定です

于 2013-08-24T15:37:11.877 に答える