-2

他クラスのコンストラクタでAクラスからメソッドを呼び出したい

私はグーグルで検索しましたが、答えが見つかりませんでした。たとえば、次のようなものがあります。

class A{
  void doWork();
}
class B{
  B(){
   //here i want to have doWork method
 }
}
4

3 に答える 3

4

適切な解決策を選択するには不十分だとおっしゃいました。すべては、あなたが達成しようとしていることにかかっています。いくつかの解決策:

a) メソッドを静的としてマークします。

class A
{
public:
    static void DoSth()
    {
        // Cannot access non-static A members here!
    }
};

class B
{
public:
    B()
    {
        A::DoSth();
    }
};

b)Aをその場でインスタンス化できます

class A
{
public:
    void DoSth()
    {
        // Do something
    }
};

class B
{
public:
    B()
    {
        A a;
        a.DoSth();
    }
};

c) A のインスタンスを B に入れることができます。

// A remains as in b)

class B
{
private:
    A a;
    // or: A * a;

public:
    B()
    {
        a.DoSth();
        // or: a = new A; a->DoSth();
        // Remember to free a somewhere
        // (probably in destructor)
    }
}

d) A から B を導き出すことができます。

class A
{
protected:
    void DoSth()
    {
    }
};

class B : public A
{
public:
    B()
    {
        DoSth();
    }
};

e) A クラスを忘れて、DoSth を関数にすることができます。

void DoSth()
{
    // ...
}

class B
{
public:
    B()
    {
        DoSth();
    }
}

十分なデータを提供しなかったため、自分でソリューションを選択する必要があります。

于 2013-02-07T15:02:14.077 に答える
3

それが機能するためには、サブクラス化する必要があります。

したがって、次のようになります。

class A {
  doWork();
}

class B : A {
   B(){
     doWork();
   }
}

IS-A 関係ではなく HAS-A 関係に行くように、次のようにすることもできます。

class A {
   doWork();
}

class B {
   A myA;
   B(){
      myA.doWork();
   }
}

あなたが何をしているのかをもっと知らなくても、あなたがやろうとしていると思うトップ(IS-A)ソリューションを使用します。

于 2013-02-07T15:00:00.667 に答える
1

または

class A
{
    public:
         static void doWork();
};
class B
{
     B(void)
     {
          A::doWork();
     }
};

PS:ここでB :: B()はプライベートになります

于 2013-02-07T14:58:13.413 に答える