带有构造函数的c++对象将值放入封装的对象中
c++ objects with constructors taking values into encapsulated objects
我一直在试图弄清楚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
和inner
有点困惑
在你的构造函数主体中,
Outer(int input) {
Inner inner(input);
}
变量inner
不是类成员。它是函数范围内的局部变量。要初始化类成员,您需要使用:
Outer(int input) : inner(input) {}
相关文章:
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 从封装在对象中的函数 C++ 返回时为空的列表
- 当要访问的对象被多次封装时,如何正确使用setter
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 封装和消息对象
- 期望在模拟对象上调用了某个方法.它会破坏封装吗?
- 封装与大型C 对象中的指针返回
- 在 C++ 中将一个类的多个对象封装在另一个类中
- 当一个对象的死亡使另一个对象生病时,如何保持封装
- 在类中封装游戏对象
- 如何在haskell中封装对象构造函数和析构函数
- 带有构造函数的c++对象将值放入封装的对象中
- 如何序列化json对象,而不使用麦片将其封装在子对象中
- 将可释放对象封装到智能指针中
- 封装迭代器提供的对象
- 在Node插件中将c++对象封装为v8对象
- 对象切片是否会破坏封装
- 在使用QOpenGLFunctions时将OpenGL功能封装在c++对象中
- 我的GLSL着色器对象/包装器是否应该封装加载/设置VertexArrayObject
- 当关联的Javascript对象在V8中被垃圾回收时,如何释放封装的C++对象