【问题标题】:How to print object name in class member function c++?如何在类成员函数c ++中打印对象名称?
【发布时间】: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?)、. ..
  • 变量名甚至没有保存在编译后的可执行文件中(除非你使用调试信息编译)。

标签: c++ object


【解决方案1】:
class Account {
  public:
     int accountNumber;
     float accountBalance;
     
     Account() {
          accountNumber = 0;
          accountBalance = 0.0;
      }
};

int main() {
    
    Account user; //make a Account object 
    user.accountNumber = 14538;  //assign
    user.accountBalance = 100.55; //You can also use cin......for user user input
     
    cout << "Amigo has $" << user.accountBalance << ". balance  valaa...!\n";

    return 0;
}

【讨论】:

  • 如果我的回答有用,别忘了使用向上箭头; )
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 2012-06-22
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多