13
class A{
    protected:
    int var;
};

class B{
    protected:
    int var;
};

class C : public A, public B {};

这里会发生什么?变量合并了吗?我可以具体调用一个,例如 B::var = 2 等吗?

4

3 回答 3

15

您的课程C将有两个变量,B::var并且A::var. 在您之外C可以像这样访问它们(如果您更改为public:),

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

尝试访问c.var将导致错误,因为没有名称为 的字段var,只有A::varB::var

在内部C,它们的行为与常规字段一样,再次具有名称A::varB::var.

于 2012-09-03T23:40:31.960 回答
2

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

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

于 2012-09-03T23:39:56.300 回答
2

如果你只指varinside of C,编译器不知道你的意思是A::varor B::var,编译器会告诉你这var是模棱两可的。因此,您必须在使用时完全限定名称var

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

于 2012-09-03T23:40:07.433 回答