全局变量可以在c ++中的类中递增吗?

时间:2017-07-10 11:22:55

标签: c++

我想在c ++类中增加一个全局变量,但无法配置如何执行此操作

int line = 0;
int ivar = 0;
int cvar = 0;
int svar = 0;

class file {
protected:
    char name[50];
    string read;
    string write;
    ifstream readfile;
    ofstream writefile;
    int i;
    int j;
};

我想在类文件中增加cvar变量。像

这样的东西
class file {
protected:
    char name[50];  cvar++;
    string read;
    string write;
    ifstream readfile;
    ofstream writefile;
    int i;
    int j;
};

但是如果以这种方式完成,编译器会给出错误。有人可以设计一种替代方法吗?

3 个答案:

答案 0 :(得分:2)

你可以,但增量需要在类的方法中。

使用默认构造函数可以正常工作,这样可以在创建类的新实例时发生增量:

file::file() /*ToDo - declare this in the class definition*/
{
    cvar++;
}

最后,使用std::atomic<int>作为cvar的类型是个好主意,以防止并发问题(即cvar上的同时读写)。

答案 1 :(得分:1)

您不能在类定义中放置要执行的代码行。他们需要参与其中。

也许在你的情况下,一个构造函数:

class file {
public:
    file() {
        cvar++;
    }

protected:
    char name[50];  
    string read;
    string write;
    ifstream readfile;
    ofstream writefile;
    int i;
    int j;
};

有几种比全局变量更好的方法 - 这取决于你想要实现的目标。

答案 2 :(得分:0)

来自你的评论:

  

我正在尝试为我的程序添加一个计数器来计算数量   完整程序中声明的字符类型变量。

全局变量并不好。另外&#34;手动&#34;每当你使用char[]时递增计数器也不是很好。我可能会使用类似的东西:

struct MyString {
    std::string theString;
    static int counter;
    MyString() { counter++;}
};

int MyString::counter = 0;

然后

struct file {
    MyString name;
    /*...*/
};

static变量或多或少类似于全局变量,但它会污染您的命名空间,因为它属于它所属的位置(MyString::counter)。此外,如果您使用MyString,则每次需要字符串时都没有机会忘记递增计数器。最后但并非最不重要的是,我从char[]更改为std::string,因为除非有std::string优先char[]优先{。}}。