C++ 无法重载运算符<&书信电报;因为单身
我按照本教程创建了我的singleton(我的类名为King):; 这是我的代码: 国王h:C++ 无法重载运算符<&书信电报;因为单身,c++,printing,singleton,operator-overloading,C++,Printing,Singleton,Operator Overloading,我按照本教程创建了我的singleton(我的类名为King):; 这是我的代码: 国王h: #include "Generic_Piece.h" class King : public Generic_Piece { public: //public static accessor function static King *instance(); protected: //singleton : define all constructors to be
#include "Generic_Piece.h"
class King : public Generic_Piece {
public:
//public static accessor function
static King *instance();
protected:
//singleton : define all constructors to be protected
King(){}
private:
static King *k;
};
//Print the king in green colour
namespace std{
ostream& operator<<(ostream& out, const King& k);
}
#包括“Generic_Piece.h”
类王:公共通用_件{
公众:
//公共静态存取函数
静态King*实例();
受保护的:
//singleton:定义要保护的所有构造函数
国王{}
私人:
静态King*k;
};
//把国王印成绿色
名称空间标准{
ostream&operatorKing::instance
返回指针。因此,当您编写
std::cout << King::instance() << std::endl;
更好的是,让King::instance()
返回对King
的引用:
King& King::instance(){
if(!k){
k = new King();
//the king is green
k->setTeam(0);
}
return *k;
}
现在,对操作符King::instance
的原始调用返回一个指针,如果要打印对象,应该取消对该指针的引用(实际上这与singleton无关)单身是一种反模式的行为,大多数只是美化了全局变量。可能会给你带来很多悲伤和痛苦。我的建议是避免单身。我不敢相信这是如此明显。我太关注代码的另一部分了,所以我很恐慌。谢谢你的回答+改进。
std::cout << King::instance() << std::endl;
std::cout << *King::instance() << std::endl;
King& King::instance(){
if(!k){
k = new King();
//the king is green
k->setTeam(0);
}
return *k;
}