我想在其他类的构造函数中从 A 类调用一个方法
我用谷歌搜索,但没有找到任何答案例如,我有:
class A{
  void doWork();
}
class B{
  B(){
   //here i want to have doWork method
 }
}
我想在其他类的构造函数中从 A 类调用一个方法
我用谷歌搜索,但没有找到任何答案例如,我有:
class A{
  void doWork();
}
class B{
  B(){
   //here i want to have doWork method
 }
}
您告诉我们选择合适的解决方案还不够。一切都取决于您要达到的目标。几个解决方案:
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();
    }
}
由于您提供的数据不足,您必须自己选择解决方案。
为了使它起作用,您需要对其进行子类化。
所以它会是这样的:
class A {
  doWork();
}
class B : A {
   B(){
     doWork();
   }
}
您也可以像这样进行 HAS-A 而不是 IS-A 关系:
class A {
   doWork();
}
class B {
   A myA;
   B(){
      myA.doWork();
   }
}
在不了解您在做什么的情况下,我会选择顶级(IS-A)解决方案,这就是我认为您正在尝试做的事情。
或者
class A
{
    public:
         static void doWork();
};
class B
{
     B(void)
     {
          A::doWork();
     }
};
?
PS:这里 B::B() 将是私有的