C ++类的对象可以直接访问超类的公共变量

时间:2013-12-20 21:36:35

标签: c++ inheritance

假设我有两个班:祖父,父亲。父亲延伸祖父。祖父有一个名为a的公共int变量。

如果我在main中创建了一个父类的对象,那么该对象是否可以直接访问祖父中的公共成员变量a

例如,我尝试了类似下面的内容,但编译器说a无法访问。但是,因为a是公开的,不应该直接从父的对象那里获取吗?

int main()
{
    Father father;

    cout << father.a;
}

3 个答案:

答案 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,可以将其视为父亲和祖父的