-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();
   }
}

您也可以像这样进行 HAS-A 而不是 IS-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 回答