假设我有两个班:祖父,父亲。父亲延伸祖父。祖父有一个名为a
的公共int变量。
如果我在main中创建了一个父类的对象,那么该对象是否可以直接访问祖父中的公共成员变量a
?
例如,我尝试了类似下面的内容,但编译器说a
无法访问。但是,因为a
是公开的,不应该直接从父的对象那里获取吗?
int main()
{
Father father;
cout << father.a;
}
答案 0 :(得分:6)
公共成员对任何类的对象可见,而不仅仅是子类。
答案 1 :(得分:2)
如果我在main中创建了一个父类的对象,那么该对象具有 在祖父中直接访问公共成员变量a?
是
但那不是你在这里做的事情:
cout << father.a;
在这里,您尝试直接从a
,而不是从子类中找到Father
成员{/ 1}}。
如果您收到有关此代码无法访问main
的错误消息,那么a
不是您所设想的a
。
答案 2 :(得分:2)
这取决于父如何从祖父那里继承:
// Inherit from Base publicly
class Father: public Grandfather
{
}; // father.a is accessible from main()
// Inherit from Base privately
class Father: private Grandfather
{
}; // father.a is NOT accessible from main()
// Inherit from Base protectedly
class Father: protected Grandfather
{
}; // father.a is NOT accessible from main()
class Father: Grandfather // Defaults to private inheritance
{
}; // father.a is NOT accessible from main()
话虽如此,但要区分的是,如果a
在祖父中是公开的,那么可以从在父的任何方法中访问,以获取任何这些遗产。请注意,这不是您在示例中所做的事情 - 您直接从main()访问a
,可以将其视为父亲和祖父的 。