说我有以下代码:
struct date {
int day;
int month;
int year;
};
class mydateclass {
public:
int day;
int month;
int year;
};
mydateclass date;
date.day;
引用了哪个date
变量?名为date
的{{1}}实例,或mydateclass
结构?
答案 0 :(得分:3)
没有歧义
代码定义了一个结构,但它没有创建它的实例。当你写date.day
时,你指的是一个变量,而且只有一个名为date
的变量。
答案 1 :(得分:3)
struct 声明称为“日期”。在mydateclass date;
之前没有创建对象 date 。因此,“呼叫”并不是一种暧昧。
如果你想以这种方式创建一个对象,那就是:
struct datestruct {
int day;
int month;
int year;
} date;
如果你这样做,你的编译器应该在mydateclass date;
处抱怨,因为该名称的对象已经存在。
注意,如果你想处理一个类/结构的成员(例如静态成员)没有手头有一个对象,你需要::而不是。如:
struct date {
static int day;
};
date::day;
答案 2 :(得分:0)
由于此代码中的date
被声明为mydateclass
的实例,因此您可以通过变量date
访问其成员的类型。
使用略微修改的代码进行的快速测试显示,变量以相同的名称隐藏结构:
struct date {
int day;
int month;
int year;
};
class mydateclass {
public:
int day;
int month;
int year;
};
int main()
{
mydateclass date;
date.day;
date other_date; //error here, because "date" does not name a type in this context
::date yet_another_date; //okey, because "::" means the name in question is in global scope
//whereas the variable named "date" is local to main
}
void foo()
{
date other_date; //ok here, because there is no variable called "date" in scope here
}
无论你有结构还是类,对问题没有任何影响。