c++ - 在类的不同实例中共享的字符串变量

标签 c++

我正在使用 Visual Studio Express 2013,并且是 C++ 新手(虽然我对 Java 有很好的了解,但这个问题让我难住了)。

“Dialogue”类中的“text”变量似乎与其他实例共享相同的值 我的意思是,dialog.Print() 的输出都是“然后把它还给我!”在控制台中。

//Main Class
int main()
{
    Dialogue dialogue1("Okay...");
    Dialogue dialogue2("Then give it back!");

    dialogue1.Print();
    dialogue2.Print();
}

注意:这些类是独立的

//The "Dialogue Class"
#include "Dialogue.h"
#include <iostream>
#include <string>

using namespace std;

string text;

Dialogue::Dialogue(string dialogue)
{
    text = dialogue;
}

Dialogue::~Dialogue()
{

}

void Dialogue::Print()
{
    cout << text << endl;
}

最佳答案

当您有 Java 背景时,您必须考虑到与 Java 不同,在 C++ 中您可以定义存在于类之外的事物。因此,您不仅可以在类中拥有静态变量(如 Java 中的静态变量),还可以拥有完全全局的变量或仅与命名空间关联的变量。据我所知,你不能在 Java 中做到这一点。
这就是你的代码中发生的事情。您的 std::string text 不是被定义为 Dialogue 类的成员,而是在它的外部,因此它基本上是一个全局变量,所以您是对的,它只存在一次,而不是每个 Dialog 实例。如果您进入 Dialogue (dialogue.h) 的类定义,它将按您的预期工作。

关于c++ - 在类的不同实例中共享的字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27463343/

相关文章:

c++ - 如何使用 boost 屏障

C++链表指针总是nullptr

c++ - 我应该在没有有意义的恢复的情况下捕获异常吗?

c++ - 为什么当客户端忙于接收数据时 select() 有时会超时

c++ - 通过 Xlib 的窗口图标化状态

c++ - 为字符串中的特殊单词着色

C++ Windows 窗体 - 如何在单击按钮后显示/隐藏某个对象(例如按钮或文本框)?

c++ - 如何在linux(mandriva2010)中安装Qt5

C++11 和多态 lambda 的缺失——为什么?

c++ - QT 如何将应用程序嵌入到 QT 小部件中