2013-02-07 58 views
-2

的构造我想打电话从A类中的方法在其他类呼叫从一个类的方法在其他类

我GOOGLE的构造,但没有找到任何答案 例如,我有:

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

“B”有一个指针或引用“A”的实例吗? doWork()是静态的吗? “B”是“A”的一个子类吗?否则,您无法从另一个类,构造函数或其他方法中调用方法 –

+0

您可以从“构造函数”的构造函数中调用一个方法(非成员,静态成员函数或者如果您有'A'成员函数的实例) B',但是没有“从方法**调用到**构造函数中”,这是没有意义的... – Nim

+0

关注评论对downvotes?问题不是最好的质量,但很明显,OP的意图是什么。对于专业人士来说,初学者的问题和SO一样受欢迎,不是吗? – Spook

回答

3

你告诉我们没有足够的选择合适的解决方案。一切都取决于你想要达到的目标。一些解决方案:

a)将方法标记为静态。

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

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

b)你可以实例到位

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)你可以从一个派生B:

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

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

e)你可以忘记A类,并使DoSt h功能:

void DoSth() 
{ 
    // ... 
} 

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

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

1

或者

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

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

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)解决方案,这是我认为你正在尝试做的。