关于类中char*函数成员函数的问题

Seu*_*ang 2 c++ arrays pointers class

我正在尝试从 Udacity 学习 C++。我需要澄清一下我的理解是否正确。所以代码如下。

井字游戏:

class Board
{//the class tracks the game and the winner
    char positionsSelected[16];
    char winner;
    
public:
    //Constructor
    Board();
    int setPosition(int gridNumber, char user);
    char* getPositions(void);
};

char* getPositions(void)
    {//return all the positions on the board
        return positionsSelected;
    }
Run Code Online (Sandbox Code Playgroud)

如果你看一下,成员函数char* getPositions(void)是在类内部声明的。

我知道假设可能真的很糟糕,但这就是我的思考过程和问题

  1. 由于您基本上是在阅读一系列字符,这就是为什么它必须是char*.

  2. 为什么必须的参数getPositions(void)?这可以与空括号 () 相同吗?

  3. 如果函数原型是char* getPositions(),是否意味着它返回了指针?我可以假设返回值char*getPosition(void)指向char array(positionsSelected).

  4. 如果我的假设是错误的 3. 我可以放这样的东西吗

char* getPositions(void){
    char* pointers;
    pointers = positionSelected;
    return pointers;
}
Run Code Online (Sandbox Code Playgroud)

任何建议或解释将不胜感激。

cdh*_*wie 5

  1. 由于您基本上是在阅读一系列字符,这就是它必须是 char* 的原因。

最好是让会员std::string positionsSelected;。然后你可以std::string const &从你的方法中返回。这既安全又易于使用。

  1. 为什么 getPositions(void) 的参数必须要?这可以与空括号 () 相同吗?

由于来自 C 的包袱,这两种语法都被接受,它们可能意味着不同的东西:

  • void foo(void); 明确指定不接受任何参数。
  • void foo(); 没有指定接受哪些参数。

在 C++ 中,它们都意味着相同的事情:不接受任何参数。空括号是首选语法 ( char * getPositions();)。

  1. 如果函数原型是char* getPositions(),是否意味着它返回了指针?我可以假设 char*getPosition(void) 的返回值指向 char 数组(positionsSelected)。

是的,你可以做出这个假设。数组隐式衰减到指向第一个元素的指针。