其中哪一个被称为?

时间:2010-08-18 14:11:51

标签: c++

说我有以下代码:

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结构?

3 个答案:

答案 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
}

无论你有结构还是类,对问题没有任何影响。