gpt4 book ai didi

c++ - 在 Python 中构建类似于 __repr__ 的对象的可打印表示

转载 作者:行者123 更新时间:2023-11-30 03:31:08 27 4
gpt4 key购买 nike

我是 C++ 的新手,过去大部分时间都使用过 Python,并且正在寻找一种方法来轻松构建对象的可打印表示形式 - 类似于 Python 的 repr。这是我的代码的一些片段(当然是银行)。

    class Account   {
private:
int pin;
string firstName;
string lastName;
char minit;
int acc_num;
float balance;
float limit;
public:
float getBalance(void);
string getName(void);
void setPin(int);
void makeDeposit(float);
void makeWithdrawal(float);
Account(float initialDeposit, string fname, string lname, char MI = ' ', float x = 0);
};
Account::Account(float initialDeposit, string fname, string lname, char MI, float x) {
cout << "Your account is being created" << endl;
firstName = fname;
lastName = lname;
minit = MI;
balance = initialDeposit;
limit = x;
pin = rand()%8999+1000;
}

构造的账户对象。我想要一个 Bank 对象,它本质上是一个帐户对象数组。

    class BankSystem    {
private:
vector<Account> listOfAccounts;
int Client_ID;
public:
BankSystem(int id);
void addAccount(Account acc);
Account getAccount(int j);
};
BankSystem::BankSystem(int id) {
Client_ID = id;
listOfAccounts.reserve(10);
}

我想为 Bank 类提供 showAccounts 方法功能,向用户显示他们有权访问的所有帐户对象。我想让它可以打印,这样我就可以在 cout 中显示它。在 Python 中,我只是简单地使用 __repr__ 来“字符串化”帐户对象,例如

def __repr__(self):
return 'Account(x=%s, y=%s)' % (self.x, self.y)

想知道如何在 C++ 中做同样的事情。谢谢!

最佳答案

解决此问题的惯用方法是重载 operator<<例如,您的类的输出流函数

#include <iostream>

using std::cout;
using std::endl;

class Something {
public:

// make the output function a friend so it can access its private
// data members
friend std::ostream& operator<<(std::ostream&, const Something&);

private:
int a{1};
int b{2};
};

std::ostream& operator<<(std::ostream& os, const Something& something) {
os << "Something(a=" << something.a << ", b=" << something.b << ")";
return os;
}

int main() {
auto something = Something{};
cout << something << endl;
}

关于c++ - 在 Python 中构建类似于 __repr__ 的对象的可打印表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444825/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com