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)