类外部实现的函数中为类成员变量赋值的问题求助
解决类成员函数中赋值成员变量的问题
嘿,我一眼就看到你代码里的问题啦!你在setWeapon成员函数里创建了一个新的player局部对象playerobj,但这个对象和调用setWeapon的那个实例完全没关系——你要是给这个局部对象的playerWeapon赋值,修改的只是这个临时对象,函数执行完它就被销毁了,真正需要修改的对象的成员变量根本没动。
先看修正后的完整代码
头文件(比如player.h)
#include <string> using namespace std; class player { public: string playerWeapon; void setWeapon(); };
实现文件(player.cpp)
#include "player.h" #include <iostream> using namespace std; void player::setWeapon(){ int playerWeaponInt; cout << "choose Number" << endl << "'1' for gun" << endl << "'2' for axe" << endl; cin >> playerWeaponInt; // 直接访问当前对象的成员变量,不需要创建新对象 if (playerWeaponInt == 1) { playerWeapon = "gun"; // 也可以写成 this->playerWeapon = "gun"; 效果完全一样,this指针指向当前调用函数的对象 } else if (playerWeaponInt == 2) { playerWeapon = "axe"; } else { // 处理无效输入,给个默认值或者提示 cout << "Invalid choice! Setting default weapon: knife" << endl; playerWeapon = "knife"; } }
为什么原来的代码不对?
举个例子,假设你在main里这样调用:
int main() { player myPlayer; myPlayer.setWeapon(); // 调用myPlayer的setWeapon方法 cout << myPlayer.playerWeapon << endl; // 原来的代码这里会输出空字符串,因为myPlayer的playerWeapon没被修改 return 0; }
你在setWeapon里创建的playerobj是函数内部的局部变量,和myPlayer是两个独立的对象。修改playerobj的成员变量,不会影响myPlayer的任何属性。
额外小建议(可选但推荐)
实际项目里最好把成员变量设为private,然后提供getter方法来访问,这样能保证封装性,比如:
class player { private: string playerWeapon; // 私有成员 public: void setWeapon(); string getWeapon() const { return playerWeapon; } // getter方法 };
这样外部代码只能通过getWeapon()获取武器,避免直接修改成员变量,让代码更健壮。
内容的提问来源于stack exchange,提问作者user7583245
相关产品推荐
相关产品推荐

