【问题标题】:How to initialize vector inside constructor from private in c++ similarly to ArrayList in Java如何在 C++ 中从私有的构造函数中初始化向量,类似于 Java 中的 ArrayList
【发布时间】:2017-04-03 10:55:40
【问题描述】:

我会尽量简化

在 Java 中,我会执行以下操作:

public class foo{

    private final int x;  
    private final ArrayList<classname1> one;
    private final ArrayList<classname2> two;

    //constructor
    public foo(int x){
        this.x = x;
        one = new ArrayList<>();
        two = new ArrayList<>();
        menu();
    }

然后我会在我的代码中使用“一”和“二”

然而,我目前正在使用 c++,并且我读到 C++ 中 ArrayList 的等价物是向量。我已经尝试过尝试,但是我发现很难理解如何像 java 代码一样初始化构造函数中的向量。

这是我目前在 c++ 中所拥有的:

class foo{

private: int x;
private: vector<classname1> one;
private: vector<classname2> two;

public: 

//constructor
foo(int x) {
 this->x= x;
 //how would I initialize the vectors here like in java? Something like but of course it doesn't work:
        one = new Vector<>();
        two = new Vector<>();
 menu();
}

谢谢!任何帮助表示赞赏。

【问题讨论】:

  • 这取决于您要将其初始化为什么,您应该澄清这一点。但是,如果您想要默认的初始化向量,什么都不做也没关系。
  • 只是foo(int val) : x(val) { menu(); }onetwofoo 对象在同一分配空间中。如果你想让它们独立于foo 类,你应该用unique_ptr&lt;vector&lt;classname1&gt;&gt; one 或另一个智能指针声明它。

标签: java c++ class arraylist vector


【解决方案1】:

没有什么可以初始化的。 std::vector 有自己的默认构造函数。除非您需要使用一些初始内容显式初始化 std::vector,否则无需执行任何操作。

你必须做你在 Java 中必须做的事情的原因是因为在 Java 中所有对象都不是真正的对象。它们实际上是指向对象的指针。因此,Java 构造函数必须使用new 关键字精心初始化每一个。这在 C++ 中是不正确的。

C++ 对象的工作方式根本不同。如果您在学习 C++ 时完全忘记了有关对象的所有知识,那么您将帮自己一个大忙。这会很困难,因为 C++ 的语法在这方面与 Java 非常相似,但 C++ 对象的工作方式与 Java 中的根本不同,如果你继续试图进行类比,你只会感到困惑,并走下坡路一次又一次的走错路。

学习和理解 C++ 对象的正确方法是阅读一本好的 C++ 书籍,而不是考虑 Java。

同样的事情也适用于其他一切。 C++ 中的“private”关键字与 Java 中的“private”关键字不同。在 C++ 代码中的三个“私有”实例中,只需要第一个。其他两个完全没有成就。

C++ 不是 Java。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 2014-10-23
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    相关资源
    最近更新 更多