声明数据成员之前成员函数中数据成员的可访问性

Posted

技术标签:

【中文标题】声明数据成员之前成员函数中数据成员的可访问性【英文标题】:Accessibility of data member in member function before declaration of data member 【发布时间】:2012-03-20 08:27:09 【问题描述】:

考虑这段代码:

class Test

public:

Test()  i = 0;  

private:

int i;
;

数据成员“i”在声明/定义之前就已使用。这不应该是编译错误吗? (编译得很好!!!)

【问题讨论】:

【参考方案1】:

规则是在类定义中定义的成员函数被编译,就好像它们是在类定义之后立即定义的一样。

【讨论】:

【参考方案2】:

不应该,在类定义的上下文中,所有成员、数据成员或函数都具有完全的可见性。

【讨论】:

【参考方案3】:

声明前使用的数据成员在哪里?

class Test

public:

Test()  i = 0;   // constructor

private:

int i;  //datamemeber
;
main()

Test obj; // memory allocated only here

只有在 main 中创建了 obj 后才会调用构造函数。然后分配 i 的内存。并调用构造函数,因此 i 有范围和可见性

【讨论】:

以上是关于声明数据成员之前成员函数中数据成员的可访问性的主要内容,如果未能解决你的问题,请参考以下文章

内部类成员从封闭类的可访问性

通过using声明改变个别成员的可访问性

使类和成员的可访问性最小化

Java:Effective java学习笔记之 使类和成员的可访问性最小化

第13条:使类和成员的可访问性最小化

OOP 和私有字段的继承