【发布时间】:2012-03-20 08:27:09
【问题描述】:
考虑这段代码:
class Test
{
public:
Test() { i = 0; }
private:
int i;
};
数据成员“i”在声明/定义之前就已使用。这不应该是编译错误吗? (编译得很好!!!)
【问题讨论】:
标签: c++ private-members class-members
考虑这段代码:
class Test
{
public:
Test() { i = 0; }
private:
int i;
};
数据成员“i”在声明/定义之前就已使用。这不应该是编译错误吗? (编译得很好!!!)
【问题讨论】:
标签: c++ private-members class-members
规则是在类定义中定义的成员函数被编译,就好像它们是在类定义之后立即定义的一样。
【讨论】:
不应该,在类定义的上下文中,所有成员、数据成员或函数都具有完全的可见性。
【讨论】:
声明前使用的数据成员在哪里?
class Test
{
public:
Test() { i = 0; } // constructor
private:
int i; //datamemeber
};
main()
{
Test obj; // memory allocated only here
}
只有在 main 中创建了 obj 后才会调用构造函数。然后分配 i 的内存。并调用构造函数,因此 i 有范围和可见性
【讨论】: