在c ++中实现用于类的全局变量的最佳方法

时间:2016-11-03 05:42:03

标签: c++ global-variables

请在将问题标记为重复之前阅读该问题。
所以这就是我想要实现的目标。基本上我有一个字符串,最初包含一些值。
我已经将我的程序拆分为许多类的模块化。(你可以建议一个更好的方法来做到这一点 - 目前每个文件中都包含一个类)
所以说,例如我想用class1操作数据,然后修改后的字符串需要由class2操作,依此类推。

如。  初始条目是“hello world”
头等舱 - > “你好世界”
第二类 - > “H @ l @ o WORLD”
thiid class - > “#@ l @ o WORLD”
......等等
随处阅读全球变量是一个很大的问题。因此,牢记这一点,我可以在课程之间无缝分享的最佳方式 我还想过将字符串作为指向每个函数的指针,但我认为可能有更好的替代方法。请建议。
感谢您停下来阅读我的阙并帮助我。

1 个答案:

答案 0 :(得分:1)

如果不知道为什么你想要这样做,很难回答。但是我没有看到将string作为参考传递给每个类的问题,就像你建议的那样:

class StringModifier1 {
public:
  void operator()(std::string& s) {
    // modify s...
  }
};
class StringModifier2 {
public:
  void operator()(std::string& s) {
    // modify s...
  }
};
class StringModifier3 {
public:
  void operator()(std::string& s) { 
    // modify s
  }
};

int main() {
    std::string myString = "hello world";

    StringModifier1 modifier1;
    StringModifier2 modifier2;
    StringModifier3 modifier3;

    modifier1(myString);
    modifier2(myString);
    modifier3(myString);
}

Live demo.

在某些情况下,您可能希望类存储指向字符串的引用或引用:

class StringModifier1 {
private:
 std::string& s;

 void func1() { 
     // modify s... 
 }
 void func2() { 
     // modify s some more...
 } 
public:
  StringModifier1(std::string& s) : s(s) {}

  void execute() { 
      func1();
      func2();        
  }
};

int main() {
    std::string myString = "hello world";

    StringModifier1 modifier1(myString);
    modifier1.execute();

    StringModifier2 modifier2(myString);
    modifier2.execute();

    StringModifier3 modifier3(myString);
    modifier3.execute();
}

Live demo

您可能希望一个类拥有并提供对该字符串的访问权限,而其他类具有指向所拥有类的指针或引用。