具有继承的C ++范围解析用法

时间:2013-07-09 04:04:10

标签: c++ inheritance scope

我最近偶然发现了两种不同的方法来表示派生类中基类的变量。我知道这是一个主观问题,但我想听听/反对下面列出的两种不同语法形式的论据......

版本1:

// in some code in the derived class...
base_class_member_variable_ = 0xBEEF;

第2版:

// in some code in the derived class...
MyBaseClass::base_class_member_variable_ = 0xBEEF;

此外,当基类位于不同的命名空间时,版本2的扩展名为:

// in some code in the derived class...
base_namespace::MyBaseClass::base_class_member_variable_ = 0xBEEF;

我想知道如果未在派生类中声明/定义变量的来源,是否有意义。两个版本都编译,所以我们这里只讨论样式。

据我所知,这个话题非常主观。但是,我真的在努力改进我的编码实践,而不能在我目前的职位上访问具有C ++经验的高级工程师。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

所有额外的范围内容都只是明确了编译器能够推断出什么。所以除非有一个特别模糊的案例,否则没有必要把所有那些范围内的东西放在那里。

至于什么样的风格最好,并帮助其他人更好地理解代码......我会避免这种情况,因为它非常接近于提出不受支持的观点。但是,我会说我经常看到的是1)人们不使用更多的范围修饰符来消除歧义,2)人们经常有编码标准(如命名约定)如何引用成员变量。例如,他们可以使用前缀" m _"来启动所有成员变量,或者他们可以使用" this->"每次他们引用成员变量。当然不是每个人都这样做,但在我看来这是相对普遍的做法。

那就是说,如果你自己工作,那么你可以做任何适合你的事情。另一方面,如果你在一个大型团队中工作,那么你应该找出该团体的编码风格约定,并遵循这些规则。

答案 1 :(得分:0)

经过一番研究,看起来我的问题可能是一个没有实际意义的问题。由于我自己(或至少试图...)持有Google C ++样式指南,因此所有成员变量都应该是私有的。因此,我的代码中不应存在上述示例,除非可能访问与该类绑定的常量。在这种情况下,明确说明常量的来源可能是有意义的。

再次感谢您的回答和保证以及出色的讨论。