java—如何在c++中定义类图(字段类型、getter和setter)

qkf9rpyu  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(335)

我正在试图找到一种正确的方法,在c中如何为表示独立实体并形成对象的图形或网络的类编写字段以及getter和setter方法。
为了简单起见,假设我们想用c
编写java中的以下类的等效代码。

public class Person {

    private String name; // 1
    private Address address; // 2
    private List<Account> accounts = new ArrayList<>(); // 3

    // 1
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    // 2
    public Address getAddress() { return address; }
    private void setAddress(Address address) { this.address = address; }

    // 3
    public List<Account> getAccounts() { return accounts; }
}

class Address { ... }
class Account { ... }

如您所见,我选择了标准字符串类型和2个自定义类作为成员字段。这是因为它们是复杂的类型。除了name字段外,还选择了其他两个字段来演示典型的多对一关系(person address)和一对多关系(person accounts)。
此外,c++中的字符串类型(std:string)是raii类型。它通常以文本的方式使用,因为它将其实际值的管理封装在堆中。
现在,我还不清楚每个字段的正确类型定义是什么,以及如何用getter和setter公开它们,同时保持每个对象的生命周期,如上面的java示例所示。

class Person {

    std::string _name;
    // address as pointer? reference? value? shared_ptr?
    // the same as above for the collection of accounts

    public:
    // appropriate getters, setters ?
}

注1:我对“你为什么要这样做?”或“你为什么要这样做”这样的答案不感兴趣。问题的重点是建立一个清晰的理解,我们可以如何在c++中构建一个对象图。这有很多合理的理由和应用,比如设计一个域模型,等等。所以是的,谢谢你这么说。

643ylb08

643ylb081#

首先,你把不同的东西混为一谈。我会暂时忽略这一部分。。。
//地址作为指针?参考号?价值?共享\u ptr?
如果你想要一个 std::string 然后你用一个 std::string . 如果你想要一个 Adress 然后你用一个 Adress . 如果您想要一个值,那么您就使用一个值。在您的代码中没有指示您需要其他任何东西。大多数生命周期在c++中是自动管理的(与java相比是决定性的)。
我不是很确定,但我想这是一个很好的替代品 ArrayList 是一个 std::vector . 但是,不要混淆它们是相同的甚至相似的。一 ArrayList<whatever> 包含java Object 有段时间了 std::vector<std::string> 是否包含acutal std::string s。价值观。

struct Adress {
    std::string city;
};
struct Account {
    std::string password;
};

struct Person { 
    std::string _name;
    Adress adress;
    std::vector<Account> accounts;
};

这就是正确管理对象生命周期所需的全部内容。析构函数是自动调用的。
要将参数传递给setter并从getter返回值,可以查看c++核心指南。然而,这一部分的指导方针可能是有点压倒性的,基本上所有你需要知道开始与getter和setter你可以在这里找到。

相关问题