【发布时间】:2014-08-27 08:49:15
【问题描述】:
我有以下sn-p的代码:
const int DATE_LENGTH = 6;
class BaseClass {
protected:
int date[DATE_LENGTH];
int year;
public:
BaseClass(){}
BaseClass(int *d) {
for (int i = 0; i < DATE_LENGTH; i++) { date[i] = d[i];}
year = 1900 + date[4] * 10 + date[5];
}
void printYear() {
cout << year << endl;
}
};
class DerivedClass : public BaseClass {
public:
DerivedClass() {}
void printYear() {
cout << year << endl;
}
};
int main(int argc, char *argv[]) {
int dob[] = {1, 6, 1, 0, 9, 0};
BaseClass base(dob);
base.printYear(); // prints 1990
DerivedClass derived;
derived.printYear(); // prints 1439156608
}
我无法理解为什么派生类中printYear() 的输出会输出垃圾。我是否遗漏了一些非常明显的东西?
任何帮助将不胜感激!
【问题讨论】:
-
你的默认构造函数不会初始化任何东西,所以你会得到内存中发生的任何东西。
-
@T.C.:这并不完全正确,基础子对象确实被初始化了。语言要求这种情况发生。只是选择了一个很差的初始化。
-
@RetiredNinja:这实际上不是你可以保证的。这是未定义的行为,你可能会从记忆中得到一些东西,或者披萨,或者丢掉工作。
-
你可以从未定义的行为中得到比萨吗?全速前进!
-
@KerrekSB 你说得对,我要我的披萨! :)
标签: c++ class protected derived-class