这是描述我的问题本质的代码:
#include <iostream>
struct parent
{
int quality = 1;
};
struct succesor : parent
{
int quality = 2;
};
struct grandsuccesor : succesor
{
int quality = 3;
};
int main()
{
grandsuccesor example;
std::cout << example.quality << std::endl << sizeof(example);
}
程序输出:
3
12
也就是说,该字段example.quality是从类本身中选择的,而不是从父类中选择的。但是,比方说,具体到父质量领域呢?毕竟sizeof(example) = 12,这意味着仍然有 3 个不同的变量。如何解决每个问题?
而如果你写
example.grandsuccesor::quality的话,就相当于简单了example.quality。还有另一种选择 - 将类转换为对父级的引用,并引用该字段:
方法也可以这样调用。
但是第一种方法有一个特点——它忽略了方法的虚拟性。也就是说,如果您编写
x.Родитель::Метод(),那么将调用父方法,即使它是虚拟的并且已被覆盖。可以通过部分解引用访问: