首页 > 解决方案 > 关于类中 char* 函数成员函数的问题

问题描述

我正在尝试从 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;
    }

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

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

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

  2. 为什么必须的参数getPositions(void)?可以和空括号()一样吗?

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

  4. 如果我对 3 的假设是错误的。我可以这样说吗

char* getPositions(void){
    char* pointers;
    pointers = positionSelected;
    return pointers;
}

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

标签: c++arraysclasspointers

解决方案


  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 array(positionsSelected)。

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


推荐阅读