这个C++ getter-like语法错了吗?

Ank*_*rVj 0 c++ getter

说我有以下课程:

class Abc {

    int id;

public:

    int getID() {   return id; }


    int setID(int id) { this->id = id; }
};
Run Code Online (Sandbox Code Playgroud)

这有什么逻辑错误吗?我似乎得到了意想不到的结果(读取:id的错误值).我知道这不是编写getter的方法..但是在这段代码中仍然没有任何错误?

这是类声明:

class ClientConn {


  static int num;
  short pos;
  sockaddr_in tcpAddress;
  sockaddr_in udpAddress;
  int connFD;

 public:
  ClientConn();

  int getConnFD();

  void setConnFD(int connFD);

  void setPos(short pos);

  short const& getPos();

  void setUdpAddress(short port);

  void setTcpAddress(sockaddr_in address);

  void setUdpAddress(sockaddr_in address);

  void setTcpAddress(short port, char* serverIP);

  void setUdpAddress(short port, char * serverIP);

  sockaddr_in const& getTcpAddress() const;    

  sockaddr_in const& getUdpAddress() const;



};
Run Code Online (Sandbox Code Playgroud)

这两个功能的定义如下:

int ClientConn :: getConnFD() {
  return connFD;
}

void ClientConn :: setConnFD(int connFD) {
  this->connFD = connFD;    
}
Run Code Online (Sandbox Code Playgroud)

我使用setter将connFD的值设置为7,然后当我使用getter时,我得到值65534.

(我应该回答我的问题还是继续编辑我的帖子?我是新的)

Ebo*_*ike 11

几点说明:

  • int getID()应该是一个const方法.
  • 为什么setID()有一个int返回类型?它不返回值.这甚至如何编译?
  • 你确定意外结果是因为getter/setter吗?你有一个简短的测试程序来证明这个问题吗?

编辑:既然你发布了你的代码,我会认为某些东西正在捣乱你的变量.你用的是什么编译器?内存断点是告诉你发生了什么的最快方法.假设这不是一个选项,请将代码撒上调试输出,显示变量的当前值并进行除法和征服,直到找到它被踩到的位置.

此外,您发布的新代码仍未显示任何实际用法.简单的测试程序会有所帮助.

  • @Dead:不是每个人都写得非常好的C++. (12认同)
  • 它"应该",如"写得好可以将它定义为const".这样,即使您只有一个对Abc的const引用,您也可以选择读取该值. (10认同)
  • "将const正确性放入代码中所花费的时间应该是第一次编写代码时应该编写的const,这对于长期的好处是值得的." - 我为你解决了这个问题. (5认同)
  • @Dead:编写`const`需要时间吗?这根本不难.我也喜欢在合理的时间范围内开发,这就是为什么我要确保我的不变量持有... (3认同)
  • @AnkurVj:不要使用`<pre>`代码.将其缩进4个空格,或选择它并单击"100101"按钮. (2认同)
  • 有了更多经验的@Dead,您将了解到您没有时间快速编写代码. (2认同)

Xav*_* V. 6

 int setID(int id) { this->id = id; }
Run Code Online (Sandbox Code Playgroud)

应该被替换

void setID(int id) { this->id = id; }
Run Code Online (Sandbox Code Playgroud)

你应该声明一个构造函数来初始化id的值.