使用指针从 类 引用和更改全局变量
Referencing and Changing global variables from classes using pointers
这是前段时间我们机器人俱乐部的练习。我们应该创建 类,一个将用户输入分配给变量 (cin),另一个将其打印出来 (cout)。我们需要使用指针来实现这一点,这就是我想出的。
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Input
{
public:
string* textString = new string();
Input(string uInput)
{
textString = &uInput;
}
void userInput() {
cout << "Enter some text - ";
cin >> *textString;
}
private:
// Nothing yet
};
class Output
{
public:
string* inputText = new string();
Output(string uInput)
{
inputText = &uInput;
}
void userOutput() {
cout << *inputText << endl;
}
private:
// Nothing yet
};
int main()
{
string userInput = "EMPTY";
cout << &userInput << endl;
Input i = Input(userInput);
i.userInput();
Output o = Output(userInput);
o.userOutput();
return 0;
}
不过,好像不行。当我在 Visual Studio 2018 中 运行 并输入一个值时,它会等待几秒钟并打印 "Press any key to continue..." 并结束程序。编译器中也没有任何内容。有更多 C++ 知识的人可以帮助我理解我的代码有什么问题吗?谢谢!
代码没有正确创建 i
和 o
对象。我想您可能会说 Input *i = new Input(userInput);
- 这可行,但也需要进一步更改。
我更改了您的 Input::userInput()
以获取指向字符串的指针。这种指向参数的指针布局适用于修改基类型和对象。
我真的不喜欢使用cin
和cout
,我个人会使用fgets()
,然后把从那个值到你的字符串。
#include <string>
#include <iostream>
class Input
{
private:
std::string textString;
public:
Input ( std::string uInput )
{
textString = uInput;
}
void userInput( std::string *intoString )
{
std::cout << "Enter some text - ";
std::getline( std::cin, textString );
*intoString = textString;
}
};
class Output
{
private:
std::string inputText;
public:
Output( std::string uInput )
{
inputText = uInput;
}
void userOutput()
{
std::cout << inputText << std::endl;
}
};
int main( )
{
std::string userInput = "EMPTY";
std::cout << userInput << std::endl;
Input i( userInput );
i.userInput( &userInput );
Output o( userInput );
o.userOutput();
return 0;
}
我不清楚 Input
对象应该如何工作。本地的textString
好像是多余的,不过我还是试着用了。
这是前段时间我们机器人俱乐部的练习。我们应该创建 类,一个将用户输入分配给变量 (cin),另一个将其打印出来 (cout)。我们需要使用指针来实现这一点,这就是我想出的。
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
class Input
{
public:
string* textString = new string();
Input(string uInput)
{
textString = &uInput;
}
void userInput() {
cout << "Enter some text - ";
cin >> *textString;
}
private:
// Nothing yet
};
class Output
{
public:
string* inputText = new string();
Output(string uInput)
{
inputText = &uInput;
}
void userOutput() {
cout << *inputText << endl;
}
private:
// Nothing yet
};
int main()
{
string userInput = "EMPTY";
cout << &userInput << endl;
Input i = Input(userInput);
i.userInput();
Output o = Output(userInput);
o.userOutput();
return 0;
}
不过,好像不行。当我在 Visual Studio 2018 中 运行 并输入一个值时,它会等待几秒钟并打印 "Press any key to continue..." 并结束程序。编译器中也没有任何内容。有更多 C++ 知识的人可以帮助我理解我的代码有什么问题吗?谢谢!
代码没有正确创建 i
和 o
对象。我想您可能会说 Input *i = new Input(userInput);
- 这可行,但也需要进一步更改。
我更改了您的 Input::userInput()
以获取指向字符串的指针。这种指向参数的指针布局适用于修改基类型和对象。
我真的不喜欢使用cin
和cout
,我个人会使用fgets()
,然后把从那个值到你的字符串。
#include <string>
#include <iostream>
class Input
{
private:
std::string textString;
public:
Input ( std::string uInput )
{
textString = uInput;
}
void userInput( std::string *intoString )
{
std::cout << "Enter some text - ";
std::getline( std::cin, textString );
*intoString = textString;
}
};
class Output
{
private:
std::string inputText;
public:
Output( std::string uInput )
{
inputText = uInput;
}
void userOutput()
{
std::cout << inputText << std::endl;
}
};
int main( )
{
std::string userInput = "EMPTY";
std::cout << userInput << std::endl;
Input i( userInput );
i.userInput( &userInput );
Output o( userInput );
o.userOutput();
return 0;
}
我不清楚 Input
对象应该如何工作。本地的textString
好像是多余的,不过我还是试着用了。