我的变量是全局的吗?

时间:2015-11-01 14:00:28

标签: c++

您好我一直在做家庭作业,由于家庭作业规则我不允许使用全局变量。我已经对全局变量进行了研究,但无法真正了解我的变量是全局变量还是本地变量。变量在我的类中的构造函数中定义。这是我的标题的样子:

#include <string>
using namespace std;

class Team{
    public:
        string tColor;
        string tName;
};
class Player{
    public:
        string pPos;
        string pName;
};
class SocReg {
    private:
        Team *teams;// These are the variables Im not sure of
        Player *players;// These are the variables Im not sure of
        int playernum, teamnum; // These are the variables Im not sure of
    public:
        SocReg();
        ~SocReg();
        void addTeam( string teamName, string color );
        void removeTeam( string teamName );
        void addPlayer( string teamName, string playerName, string playerPosition );
        void removePlayer( string teamName, string playerName );
        void displayAllTeams();
        void displayPlayer( string playerName );
        void displayTeam( string teamName );
// ...
// you may define additional member functions and data members,
// if necessary.
};

这个问题可能听起来太吵了,但我提前感谢你们这么困惑

3 个答案:

答案 0 :(得分:4)

    Team *teams;// These are the variables Im not sure of
    Player *players;// These are the variables Im not sure of
    int playernum, teamnum; // These are the variables Im not sure of

务实回答:这些变量既不是全局变量也不是本地变量。它们是成员变量。但无论谁给你这个任务肯定只是想确保你不使用全局变量,所以你会没事的。给学生一个class和禁止成员变量的作业是完全没有意义的。

语言律师回答: “全局变量”“成员变量”都不是官方术语。信不信由你,但ISO C ++标准的整个~1300-1400 PDF只包含3个“成员变量”实例和1个“全局变量”实例(我已在PDF草案中搜索过,但这并没有很大的不同)。

C ++标准§3.3.3/ 1中描述了一个局部变量,如下所示:

  

在块作用域中声明的变量是局部变量

全局变量被官方称为“非局部变量”(§3.6.2)。根据定义,它与局部变量相反。

成员变量被正式称为“数据成员”,如§9.2/ 1所示:

  

类的成员是数据成员,成员函数(...),嵌套   类型和枚举器。

答案 1 :(得分:2)

全局变量是您可以在任何地方看到和更改的内容&#34;在代码中,即在任何特定类别之外。

它们被认为是有害的,因为当您更改全局变量时,您必须以某种方式知道可能会查看它的所有代码,以便了解更改可能产生的影响。这使你很难推理出你的代码。

所有变量都封装在对象中,并非全局变量。在C ++中,全局变量在类之外声明,或者使用&#34; static&#34;。

答案 2 :(得分:0)

它们都是类定义,没有声明变量。

所以没有全局变量。

例如:

// example.cpp
int BAR;    
class foo {
    int bar;
};
foo FOO;

void f() {
    BAR = 0; // We can access global variable here
}

int main() {
    foo FOO2;
    BAR = -1; // We can access global variable here
    return 0;
}

BAR和FOO是全局变量,可以全局访问。

class foo {
    int bar;
};

仅仅是类foo的定义。

main()函数中的FOO2也不是全局变量,因为它位于main函数内部,无法通过外部函数访问。