2016-01-13 47 views
-3

他們是我不明白OOP的東西:當你有一個類的實例作爲另一個類的屬性時,怎麼可能只在第二類的構造函數中實例化它?有了OOP,當你有一個類的實例作爲另一個類的屬性時,怎麼可能只在第二類中實例化它?

例如在這個例子中,我想在Bar的構造函數中實例化類Foo。我應該如何修改我的代碼才能工作?

foo.h中

class Foo 
{ 
private: 
    int x, y; 

public: 
    Foo(int a, int b); 
}; 

Foo.cpp中

#include "Foo.h" 

Foo::Foo(int a, int b) 
{ 
    x = a; 
    y = b; 
} 

Bar.h

#include "Foo.h" 

class Bar 
{ 
private: 
    Foo foo; 

public: 
    Bar(); 
}; 

Bar.cpp

#include "Bar.h" 

Bar::Bar() 
{ 
} 
+0

'酒吧::欄():FOO(1,2){}' – PeterSW

+0

特別在接受問題的答案LogicStuff單詞「另外」右後部分表情說明這個問題重複。 – JSF

+0

我還有一些額外的問題,這就是爲什麼我現在沒有接受任何答案 – LukeImYourFather

回答

2

由於Foo需要從2個參數構建,所以您必須讓用戶將它們傳遞給Bar的構造函數並使用它們創建它,或者只使用一些硬編碼值。我會建議從用戶那裏獲取它們,但也有參數的默認值,所以它作爲默認的構造函數。

class Bar 
{ 
private: 
    Foo foo; 

public: 
    Bar(int a = 0, int b = 0) : foo(a, b) {} 
}; 
+0

感謝您的快速答案。 如果我有一個Foo foo [3]; ? Bar(int a = 0,int b = 0):foo [0](a,b),foo [1](a,b),foo [2](a,b){} 是否爲: – LukeImYourFather

+0

@LukeImYourFather看到這個例子:http://coliru.stacked-crooked.com/a/d867a927236d786a – NathanOliver

+0

我得到那麼錯誤「無法指定數組的顯式初始值設定項」 – LukeImYourFather

相關問題