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

c++ objects with constructors taking values into encapsulated objects

本文关键字:对象 封装 c++ 构造函数      更新时间:2023-10-16

我一直在试图弄清楚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) {}