0

我正在开发一个程序,但在涉及类时无法理解使用指针。我知道我必须为指针分配内存,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;
...
}
4

5 回答 5

5

你没有初始化你的成员。你应该有:

Hangman()
{
   remaining=new char[26];
}

你的版本:

 Hangman()
 {
    char* remaining=new char[26];
 }

初始化一个名为 的局部变量remaining,其作用域是构造函数。

您还应该delete[]在析构函数中使用内存并实现复制构造函数和赋值运算符。

于 2012-04-12T11:42:30.347 回答
3

如果您使用 C++ 字符串而不是 C 样式的 char 数组,大多数问题都会消失。

class Hangman 
{ 
public:
    std::string remainingLetters(); 

    Hangman()  { } 

private:
    std::string   remaining; 
};

“刽子手.cpp”

std::string Hangman::remainingLetters() 
{
    //  ...does task to find remaining letters;
   return remaining;  
} 
于 2012-04-12T11:58:26.310 回答
2
Hangman()
{
  char* remaining=new char[26];
}

在构造函数中,您正在初始化一个局部变量,而不是类成员。此外,everynew/new[]应该分别关联delete/delete[]以避免内存泄漏。与其自己管理内存,不如使用智能指针

于 2012-04-12T11:43:02.847 回答
1

几个重要的点:

  • 您需要使用new []构造函数中的指针成员分配内存。
  • 您需要delete []在析构函数中释放内存。
  • 你需要遵循三法则

另外,请注意,在构造函数中创建与类成员同名的本地指针remaining充其量是模棱两可的,您应该适当地重命名它。

于 2012-04-12T11:44:02.163 回答
1

一方面是通过做

remaining=new char[26];

您正在为 25 个字母(+ 一个 0 字节)保留空间,这可能不是您想要的...

问候

安德烈亚斯

于 2012-04-12T12:33:28.877 回答