C ++:如何使一组派生类能够访问一个类的私有成员?

时间:2015-05-06 20:50:27

标签: c++ derived-class private-members friend-class

假设一个类:Library

我们有一组来自基类LibraryCustomer的派生类,例如: 孩子,父母,学生, 等

在图书馆类中,有一组(吨)私有成员变量。 由于图书馆类中有大量的私人成员,我不想使用繁琐的getter和setter。 此外,LibraryCustomer派生类通常会引用这些成员。 Getter和Setter不方便。

为了让那些LibraryCustomers访问图书馆中的私人会员, 我需要将这些LibraryCustomers声称为图书馆中的朋友类。

但是由于派生类不断增长,我不想在类库中逐个添加它们。

添加基类LibraryCustomer作为库中的朋友似乎无法正常工作。 那么另一种更好的方法呢?

[更新]我想访问Library类中的大量私有成员变量。 由于有很多,所以我不想使用getter和setter。 我希望LibraryCustomer中的派生类可以自由地访问Library类中的私有成员变量。

1 个答案:

答案 0 :(得分:1)

application.log中提供一个访问LibraryCustomer以获取数据的函数,并将该数据提供给从Library派生的类。

LibraryCustomer

话虽如此,提供对class Library { friend class LibraryCustomer; private: std::string name; }; class LibraryCustomer { protected: std::string getLibraryName(Library const& lib) { return lib.name; } }; class Kid : public LibraryCustomer { // Can use LibraryCustomer::getLibraryName() any where // it needs to. }; 本身数据的访问会更容易。

Library

然后,不需要class Library { public: std::string getName() const { return name; } private: std::string name; }; 声明和包装函数friend

修改

@MooingDuck有一个有趣的建议。如果必须公开许多这样的变量,最好将它们全部放在一个类中。工作代码位于http://coliru.stacked-crooked.com/a/2d647c3d290604e9

LibraryCustomer::getLibraryName()