class parent {
virtual ~parent();
private:
int father_private;
int common;
}
~parent() {
common = 1;
}
class child: public parent {
~child();
private:
int common;
}
~child() {
common = 2;
}
使用上述逻辑,预计会执行以下步骤:
在第2步中,“这是常见的=孩子的共同点”吗?
我发现地址不一样所以它可能意味着编译器不会取名,而是在类中使用offeset。因此,步骤2的分配可能会将1写入未知地址并导致意外崩溃,我是对的吗?
我发现Andorid本地流有一些类,其构造函数或析构函数可以访问其私有数据成员。它使得继承性成为上述问题的极其困难。你是如何解决这个问题的?
答案 0 :(得分:5)
此代码:
class child: public parent {
...
int common;
}
在班级int
中定义名为common
的不同 child
。由于基类具有名为common
的任何符号,因此该基本符号只是隐藏。
如果基本符号parent::common
是int
或std::string
或函数名称或枚举,则无关紧要。这是隐藏的。
在第2步中,"这是常见的=孩子的常见" ??
没有。在parent
函数中,它是父级common
。
因此,步骤2的分配可以将1写入未知地址&意外崩溃,我是对的吗?
没有。一个作业分配给parent::common
。另一个分配给child::common
。它们是两个不同的变量。