【发布时间】:2014-10-19 04:44:44
【问题描述】:
我一直在试图弄清楚 c++ 如何处理多个对象,构造函数接收值,它们是在彼此内部设置的。
#include <iostream>
using namespace std;
class Inner {
int myvar;
public:
Inner(int input) {
myvar = input;
}
int output() {
return myvar;
}
};
class Outer {
Inner inner;
public:
Outer(int input) {
Inner inner(input);
}
int value_out() {
return inner.output();
}
};
int main() {
int myvar = 0;
Outer outer(myvar);
cout << outer.value_out() << endl;
return 0;
}
我去编译时的控制台输出:
ubuntu@ubuntu:~$ cd Desktop
ubuntu@ubuntu:~/Desktop$ touch test.cpp
ubuntu@ubuntu:~/Desktop$ g++ test.cpp -o test
test.cpp: In constructor ‘Outer::Outer(int)’:
test.cpp:19:20: error: no matching function for call to ‘Inner::Inner()’
Outer(int input) {
^
test.cpp:19:20: note: candidates are:
test.cpp:7:3: note: Inner::Inner(int)
Inner(int input) {
^
test.cpp:7:3: note: candidate expects 1 argument, 0 provided
test.cpp:4:7: note: Inner::Inner(const Inner&)
class Inner {
^
test.cpp:4:7: note: candidate expects 1 argument, 0 provided
ubuntu@ubuntu:~/Desktop$
我是 C++ 新手,所以只是想更好地了解一切是如何落实到位的。我来自像 python 和 ruby 这样的脚本语言,其中很多都是自动完成的。谢谢你的帮助!
这就是我在 Ruby 中尝试做的事情,如果这有助于更好地说明我在这里想要做什么......
class Inner
def initialize(input)
@myvar = input
end
def output
@myvar
end
end
class Outer
def initialize(input)
@inner = Inner.new(input)
end
def value_out
@inner.output
end
end
myvar = 0
outer = Outer.new(0)
puts outer.value_out
所以我想我的问题的核心是如何编写一个对象,它有一个默认构造函数作为另一个对象的成员变量,因为如果我将任何东西分配给一个成员变量,c++ 会发疯。那么,如果对象是另一个对象的成员变量,那么如何在需要输入的对象中输入任何内容呢?这是否可能,或者我是否正在尝试做一些非常愚蠢和糟糕的事情?
【问题讨论】:
-
Inner() = default;或Inner() {}。此外,在您的构造函数中,您没有初始化inner。Outer(int input) : inner(input). -
试图理解这一点,但它只是让我头脑清醒。再读一遍那篇文章。我尝试编辑代码并用发布的内容替换东西,但它对我来说变得更糟,我变得更加困惑。只是要读这个,直到我以某种方式掌握它为止。
标签: c++ object constructor encapsulation