在其他类的构造函数中调用A类中的方法

时间:2013-02-07 14:50:31

标签: c++

我想在其他类

的构造函数中调用A类中的方法 我用谷歌搜索,但没有找到任何答案 例如,我有:

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

3 个答案:

答案 0 :(得分: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();
    }
}

由于您提供的数据不足,您必须自行选择解决方案。

答案 1 :(得分: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)解决方案,这是我认为您正在尝试做的事情。

答案 2 :(得分:1)

或者

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

PS:这里B :: B()将是私人的