2013-02-07 62 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)解決方案,這是我認爲你正在嘗試做的。