是否可以从 C++ 中的构造函数访问对象名称?

Is it Possible to Access an Object Name from the Constructor in C++?

本文关键字:对象 访问 构造函数 C++ 是否      更新时间:2023-10-16

所以我的问题是是否可以从构造函数访问正在构造的对象的名称。这是我的代码片段:

Monk::Monk(int stam, int agil, string spec){
stamina = stam;
agility = agil;
specialization = spec;
cout << "'s Health is " << health() << endl;
cout << "'s DPS is " << damage() << endl;
cout << "'s current specification is a " << specName() << " monk." << endl;
}
int main() {
Monk Tyler(25000, 1245, "Brewmaster");
Monk Jackson(12500, 3000, "Windwalker");
return 0;
}

所以基本上,如果你在我的构造函数的末尾查看cout函数,我希望语句以对象的名称开头,而不进行硬编码。例如,其中一个对象被命名为Tyler我希望第一个cout语句打印出Tyler's Health is XYZ

我希望它能够工作,以便我能够创建一个对象,而不必每次都对名称进行硬编码。

如果这是对我想要实现的目标的糟糕解释,我很抱歉。提前感谢您提供的任何帮助!

这种内推或反射在C++

你能做的最好的事情就是修改类并为每个对象提供一个属性名称:

Monk::Monk(int stam, int agil, string spec, string name){
stamina = stam;
agility = agil;
specialization = spec;
monkName = name;
cout << monkName << "'s Health is " << health() << endl;
cout << monkName << "'s DPS is " << damage() << endl;
cout << monkName << "'s current specification is a " << specName() << " monk." << endl;
}
int main() {
Monk Tyler(25000, 1245, "Brewmaster");
Monk Jackson(12500, 3000, "Windwalker");
return 0;
}

旁注,记住你可以做

Monk::Monk(int stam, int agil, string spec, string name):stamina(stam),agility (agil),specialization(spec),monkName(name){
//stamina = stam;
//agility = agil;
//specialization = spec;
//monkName = name;
cout << monkName << "'s Health is " << health() << endl;
cout << monkName << "'s DPS is " << damage() << endl;
cout << monkName << "'s current specification is a " << specName() << " monk." << endl;
}