gpt4 book ai didi

具有构造函数的 c++ 对象将值放入封装对象中

转载 作者:行者123 更新时间:2023-11-28 00:23:10 24 4
gpt4 key购买 nike

我一直在努力弄清楚 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++ 就会崩溃。那么,如果对象是另一个对象的成员变量,那么如何在需要输入的对象中输入任何内容呢?这甚至有可能吗,或者我是否在尝试做一些非常愚蠢和糟糕的事情?

最佳答案

我觉得你对构造函数体中使用的成员变量innerinner有点困惑

在你的构造函数体中,

Outer(int input) {
Inner inner(input);
}

变量inner 不是类成员。它是函数范围内的局部变量。要初始化类成员,您需要使用:

Outer(int input) : inner(input) {}

关于具有构造函数的 c++ 对象将值放入封装对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com