【问题标题】:C++ non-primitive class member dynamically initialisedC++ 非原始类成员动态初始化
【发布时间】:2015-11-15 12:34:37
【问题描述】:

来自 Java,我非常习惯于能够包含我在其他类中创建的类,例如:

class Pepperoni{

}

class Pizza{
  Pepperoni pepperoni;
  Cheese cheese;
}

但是在 C++ 中,它似乎将我所看到的解释为声明,而是:使用带有空参数的默认构造函数调用函数来初始化“Pepperoni”类。

我想要做的是能够创建一个 Pizza 类并初始化从其构造函数的输入中获取的“Pepperoni”和“Cheese”成员变量。即类似:

Pizza::Pizza(Pepperoni pepperoni, Cheese cheese){
  this.pepperoni = pepperoni;
  this.cheese = cheese;
}

这只是一厢情愿吗?我必须用另一种方式吗?我是否忽略了 C++ 的美妙特性?

谢谢!

【问题讨论】:

  • 您的实际问题是什么?你刚试过吗?应该可以正常工作。
  • 我爱吃披萨的人,马上点一份
  • this 是指向 C++ 中对象的指针,因此请使用 this->cheese = cheese; 或使用其他名称作为输入:cheese = newCheese;
  • -> 符号似乎已经成功了。我想我需要做更多的测试。谢谢@stefaanv
  • @πάνταῥεῖ 我遇到了一个问题,我实际上已经为 Pepperoni 构造函数声明了一个参数输入,但是编译器似乎假设由于某种原因我调用了没有参数的构造函数,而实际上事实上我想做的就是声明成员变量

标签: c++ oop


【解决方案1】:

这在 Java 和 C++ 中的工作方式不同。在 Java 中,您所拥有的只是对基于堆的对象的引用,而在 C++ 中,您所写的是 OBJECT 本身,而不是对它的引用。我建议您阅读一些有关 C++ OOP 基础知识的材料,以更好地理解这一点。例如,您可以阅读本文并点击此问题中包含的其他问题的链接:C++ Pointer Objects vs. Non Pointer Objects

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多