我正在研究一个程序但是在涉及到类时无法理解使用指针。我知道我必须使用new
为指针分配内存,并且在不使用类时很好。我找不到一个简单的教程来解释如何完成这个特定的任务。有人可以给我一些帮助吗?这是我到目前为止所做的相关片段,但它输出的是随机字符:
"Hangman.c"
{
class Hangman
{
public:
...
char* remainingLetters();
Hangman()
{
char* remaining=new char[26];
}
~Hangman();
private:
char* remaining;
}
"Hangman.cpp"
{
...
char* Hangman::remainingLetters()
{
...does task to find remaining letters;
return remaining;
}
ostream& operator<< (ostream &out, Hangman &game)
{
out << "Letters remaining are: " << game.remaining <<endl
return out;
}
}
"main.cpp"
{
...
cout << game;
...
}
答案 0 :(得分:5)
您没有初始化您的会员。你应该:
Hangman()
{
remaining=new char[26];
}
您的版本:
Hangman()
{
char* remaining=new char[26];
}
初始化一个名为remaining
的局部变量,其范围是构造函数。
你应该delete[]
析构函数中的内存并实现复制构造函数和赋值运算符。
答案 1 :(得分:3)
如果使用C ++字符串而不是C样式的char数组,大多数问题都会消失。
class Hangman
{
public:
std::string remainingLetters();
Hangman() { }
private:
std::string remaining;
};
“Hangman.cpp”
std::string Hangman::remainingLetters()
{
// ...does task to find remaining letters;
return remaining;
}
答案 2 :(得分:2)
Hangman()
{
char* remaining=new char[26];
}
在构造函数中,您正在初始化局部变量,但不是类成员。此外,每个new/new[]
应分别与delete/delete[]
相关联,以避免内存泄漏。而不是自己管理记忆,而是使用智能指针。
答案 3 :(得分:1)
几点重要:
new []
将内存分配给构造函数中的指针成员。delete []
释放内存。另外,请注意,在构造函数中创建一个与类成员remaining
同名的本地指针最好是ambigiuos,你应该适当地重命名它。
答案 4 :(得分:1)
一方面是通过做
remaining=new char[26];
你要保留25个字母(+一个0字节)的空间,这可能不是你想要的......
此致
安德烈亚斯