在C++中,使用类的数据成员时,不需要指明该数据成员属于哪个类,因此如果类名与数据成员同名,会导致歧义。但是编译器仍然允许这种情况发生,因为可以使用作用域解析运算符“::”来明确指定类名或数据成员名。
示例代码如下:
#include
using namespace std;
class MyClass {
public:
int MyClass; // 类的数据成员和类名同名
MyClass(int i) { MyClass = i; }
void Print() { cout << "MyClass::MyClass = " << MyClass << endl; }
};
int main() {
MyClass obj(10);
obj.Print();
cout << "obj.MyClass = " << obj.MyClass << endl; // 成员访问
cout << "MyClass::MyClass = " << MyClass::MyClass << endl; // 类名访问
return 0;
}
输出结果为:
MyClass::MyClass = 10
obj.MyClass = 10
MyClass::MyClass = 0
可以看到,编译器允许类名和数据成员同名,但是在使用时需要使用作用域解析运算符来明确指定类名或数据成员名。注意,类名访问的结果为0是因为没有给MyClass赋初值,所以默认为0。