假设一个类:Library
我们有一组来自基类LibraryCustomer的派生类,例如: 孩子,父母,学生, 等
在图书馆类中,有一组(吨)私有成员变量。 由于图书馆类中有大量的私人成员,我不想使用繁琐的getter和setter。 此外,LibraryCustomer派生类通常会引用这些成员。 Getter和Setter不方便。
为了让那些LibraryCustomers访问图书馆中的私人会员, 我需要将这些LibraryCustomers声称为图书馆中的朋友类。
但是由于派生类不断增长,我不想在类库中逐个添加它们。
添加基类LibraryCustomer作为库中的朋友似乎无法正常工作。 那么另一种更好的方法呢?
[更新]我想访问Library类中的大量私有成员变量。 由于有很多,所以我不想使用getter和setter。 我希望LibraryCustomer中的派生类可以自由地访问Library类中的私有成员变量。
答案 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()