我正在尝试运算符重载,但我不知道为什么我的程序不断崩溃。
当我在operator <<函数中取消引用p.name时,它崩溃,而当我不重新引用它时,它仅打印出字符串的地址,并且程序不会崩溃。 问题的核心可能在于将对象p1设置为等于operator +函数的返回值,但是我无法弄清楚那里到底发生了什么。
main.cpp
int main()
{
Player p1("John", 10);
Player p2("Jon");
cout<<p1<<endl;
cout<<p2<<endl;
p1=p2+20;
cout<<p1;
}
player.h
class Player
{
public:
Player(string _name);
Player(string _name, int _score);
~Player();
friend ostream& operator<<(ostream& os, Player& p);
Player operator+(int p);
private:
string *_name;
int _score;
};
player.cpp
Player::Player(string name)
{
_name=new string;
*_name = name;
_score = 0;
}
Player::Player(string name, int score)
{
_name=new string;
*_name = name;
_score = score;
cout<<"Konst1"<<endl;
}
Player::~Player()
{
delete _name;
_name = 0;
}
ostream& operator<<(ostream& os, Player& p)
{
os<<*p._name<<" won: "<<p._score<<" pts";
return os;
}
Player Player::operator+(int p)
{
Player obj(*_name, _score+p);
return obj;
}
预期结果将为“约翰赢了:20分”。
编辑:将字符串_name放在堆内存中是我获得的任务的一部分,因此我必须尝试使其工作。