C++ 静态类函数重写正常序列
我在上两门课:一门叫《教父》,另一门叫《玩家》C++ 静态类函数重写正常序列,c++,C++,我在上两门课:一门叫《教父》,另一门叫《玩家》Player有一个名为madeMan的数据成员和Player的默认构造函数,我在下面的代码中使用它,默认情况下madeMan为false(请参见我在那里所做的) 我的代码: class Player; class Godfather { std::string family; public: Godfather(): family("Corleone") {}
Player
有一个名为madeMan
的数据成员和Player
的默认构造函数,我在下面的代码中使用它,默认情况下madeMan
为false(请参见我在那里所做的)
我的代码:
class Player;
class Godfather
{
std::string family;
public:
Godfather(): family("Corleone") {}
static std::string makeMan(Player & player);
};
class Player
{
friend std::string Godfather::makeMan(Player & player);
private:
std::string name;
bool madeMan;
std::string familyRank;
public:
Player(const std::string & aName, const std::string & aFamilyRank, bool madeMan);
Player(): Player("Aldo", "Associate", false) {}
bool isMade() const {return this->madeMan;}
};
inline Player::Player(const std::string & aName, const std::string & aFamilyRank, bool madeMan):
name(aName), familyRank(aFamilyRank)
{
std::cout << "Player " << name << " (" << familyRank << ") has been created." << '\n';
}
inline std::string Godfather::makeMan(Player & player)
{
player.madeMan = true;
return "Congratulations, " + player.name + ". You're now made.\n";
}
int main()
{
Player aldo; // uses default constructor, implying that madeMan is false
std::cout << std::boolalpha << aldo.isMade() << '\n'; // should return false but returns true
Godfather::makeMan(aldo); // Should convert aldo's madeMan member to true.
// Notice that makeMan follows isMade()
}
class播放器;
班主任
{
std::字符串族;
公众:
教父():家庭(“科利昂”){}
静态标准::字符串生成器(播放器和播放器);
};
职业选手
{
朋友std::字符串教父::makeMan(播放器和播放器);
私人:
std::字符串名;
布尔·马德曼;
std::字符串家族银行;
公众:
播放器(常数std::string和aName,常数std::string和aFamilyRank,bool madeMan);
Player():Player(“Aldo”,“Associate”,false){}
bool isMade()常量{返回此->madeMan;}
};
内联播放器::播放器(const std::string和aName,const std::string和aFamilyRank,bool madeMan):
姓名(aName),家庭银行(aFamilyRank)
{
std::cout您忘记初始化布尔值:
inlineplayer::Player(const std::string&aName,const std::string&aFamilyRank,bool madeMan):
姓名(aName)、家庭银行(aFamilyRank)、madeMan(madeMan)
{
std::cout在Player
ctor中,您忽略madeMan
参数。您的构造函数实际上没有初始化madeManOh…然而,mademanh
没有初始化,这意味着访问它的值,因此我得到的值是未定义的行为?什么意思是它没有未初始化?您没有初始化将其初始化。你是说编译器没有警告你它未初始化吗?编译器不需要这样做-尽管打开所有警告是值得的。@KnowledgeSeek当你创建对象时,你可能想查看一些设计模式。例如:因为成员变量是按声明顺序构造的,所以成员初始值设定项列表uld按照以下顺序构建它们(以避免混淆和潜在问题):name(aName)、madeMan(madeMan)、familyRank(aFamilyRank)
。