【发布时间】:2016-03-25 06:21:07
【问题描述】:
我正在尝试为我的 Arduino 编写程序,但我不明白将 Item 对象传递给另一个 Holder 对象时发生的事情。我构建了一个简单的例子:
class Item {
public:
int property;
Item() {
Serial.println("parameterless constructor called");
this->property = 2;
}
Item(int property) {
this->property = property;
Serial.println("right constructor called");
}
};
class Holder {
public:
Item someitem;
Holder(Item& someitem) {
this->someitem = someitem;
}
};
void setup() {
Serial.begin(9600);
Item someitem = Item(1);
Serial.println(someitem.property);
Holder hold = Holder(someitem);
Serial.println(hold.someitem.property);
}
void loop() {
}
控制台上的输出是:
right constructor called
1
parameterless constructor called
1
我不明白为什么首先调用无参数构造函数(据我所知,我不是在创建新对象),以及为什么它既不更改当前对象也不创建新对象。编译器会阻止省略无参数构造函数。
【问题讨论】:
-
您应该已经修复了编译器给出的错误“编译器会阻止省略无参数构造函数。”
-
@DieterLücking 他做到了,但是方法不对 :)
标签: c++ oop constructor