覆盖数组元素时如何调用构造函数
How to call constructor when overwriting array elements
我想创建一个数组,其中每个元素都可以从int
或float
设置(这些特定类型只是一个示例)。
所以我继续与两个构造师一起上课:
class ScaledNumber {
private:
int scaled_number;
public:
ScaledNumber(int number);
ScaledNumber(float number);
};
ScaledNumber::ScaledNumber(int number) {
scaled_number = number * 1000;
}
ScaledNumber::ScaledNumber(float number) {
scaled_number = (int)(number * 1000);
}
当我使用该类的单个变量时,这可以正常工作。但是现在我想创建一系列此类对象。我必须添加第三个构造函数才能使声明工作:
ScaledNumber::ScaledNumber() {}
ScaledNumber numbers[5];
现在,如果我想重新分配例如numbers[3]
,我可以以某种方式使用构造函数,还是必须添加set()
方法或类似方法?
我可以以某种方式使用构造函数
您可以简单地使用:
ScaledNumber numbers[5];
numbers[0] = 20;
numbers[1] = 30.2f;
编译器将在进行分配之前使用适当的构造函数。最后两行由编译器翻译为:
numbers[0] = ScaledNumber(20);
numbers[1] = ScaledNumber(30.2f);
ScaledNumber numbers[5];
的意义是什么?您以前不需要ScaledNumber number;
才能使用一个对象,这大概是因为创建这样的半就想对象没有意义,那么为什么您需要五个对象?
您只能初始化阵列中的对象:
#include <iostream>
class ScaledNumber {
private:
int scaled_number;
public:
ScaledNumber(int number);
ScaledNumber(double number);
};
ScaledNumber::ScaledNumber(int number) : scaled_number(number * 1000) {
std::cout << "intn";
}
ScaledNumber::ScaledNumber(double number) : scaled_number(static_cast<int>(number * 1000)) {
std::cout << "doublen";
}
int main() {
ScaledNumber numbers[] = { 1, 2.2, 3, 4.4, 5 };
}
输出:
int
double
int
double
int
请注意,我还做出了四个改进:我用float
替换CC_7(语言的默认浮点类型),将C-Style铸造变成static_cast
,我将初始化列表添加到了构造函数,然后我做了编译器计数数组中的元素。
相关文章:
- 在c++中使用向量时,如何调用构造函数和析构函数
- C++:考虑但不调用构造函数的特殊性
- 对象实例化调用构造函数的次数太多
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- C ++:通过大括号调用构造函数?
- 不能调用构造函数
- 赋值 boost::intrusive_ptr 而不调用构造函数?
- 在模板化类的构造函数中调用构造函数
- 如何为 std::vector 分配内存,然后稍后为某些元素调用构造函数?
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 静态 std::map instatiation 在类的方法中调用构造函数吗?
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 我不明白在这个例子中什么时候调用构造函数
- 调用c++构造函数的不同方法
- 调用构造函数与将内联常量定义为默认参数
- 如何通过 Rust FFI 调用C++构造函数?
- "new"运算符是否总是调用构造函数?
- 无法调用构造函数
- 使用 "()" 调用构造函数不同于"{}"
- 确定是调用构造函数还是强制转换运算符的因素