2012-09-03 33 views
8
class A{ 
    protected: 
    int var; 
}; 

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

这里会发生什么?变量是否合并?我可以通过特定的方式呼叫一个:B :: var = 2等。C++具有相同变量名称的多个父代

+2

你甚至尝试过你建议的语法('B :: var')吗?这恰好是正确的! –

回答

10

您的课C将有两个变量,B::varA::var。的C外,您可以像这样访问它们(如果你改变public:),

C c; 
c.A::var = 2; 

试图访问c.var会导致一个错误,因为不存在与该名var,只有A::varB::var没有现场。

Inside C它们的行为与常规字段类似,名称分别为A::varB::var

1

您可以分别通过A::varB::var访问它们。

Here是一个覆盖相同问题的链接。

2

如果仅指varC内,编译器不知道你是否意味着A::varB::var,编译器会告诉你,var是模糊的。因此,使用var时必须完全限定名称。

没有合并发生,C的任何实例都将包含这两个变量。

相关问题