【发布时间】:2021-03-14 08:34:25
【问题描述】:
我可以在 calss 成员函数 c++ 中打印对象名称吗?
比如我在main中创建了Account类的account1对象,我想这样打印余额(Account类的成员变量)。
class Account{
private:
int balance;
public:
void setBalance(){
//"Enter" << object_name << "'s balance : ";
cin >> balance;
}
void showBalance(){
//object_name << "'s balance : ";
cout << balance << endl;
}
};
int main()
{
Account account1;
account1.setBalance();
account1.showBalance();
}
输入account1的余额:50
account1的余额:50
我该怎么办?
【问题讨论】:
-
请以tour 开头并阅读How to Ask。另外,请阅读您应用的标签的描述,其中一个是错误的。你可以edit你的问题来解决这个问题。现在,对于对象名称,您的意思是
account1? -
你不能——在 C++ 中,对象的成员函数不能直接从调用者那里获取变量的名称(例如,从调用
account1.showBalance()中获取字符串account1) .换句话说,C++ 中没有反射。最接近的方法是让Account拥有std::string类型的成员,创建一个可以传递字符串的构造函数,然后创建Account account1("account1")。但是,没有干净的方法来阻止Account account1("batman")- 您仍然依赖main()中的代码传递正确的字符串。 -
至于
account1变量(对象)的示例:C 和C++ 没有反射(您可以在其中询问变量的名称。)变量名称仅在源代码中已知. -
在你的类中添加一个成员变量来存储这种信息并将这些信息存储在那里。没有别的办法。当您考虑可以创建类实例的场景时,允许访问变量的名称几乎没有意义:动态分配 (
Account* account = new Account();)、数组 (Account accounts[10];)、移动构造 (Account a; Account b(std::move(a)); // is the name a or b now?)、. .. -
变量名甚至没有保存在编译后的可执行文件中(除非你使用调试信息编译)。