2016-01-13 38 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

相关问题