我有两个名为Data和A的类.A类主要是一组操作Data中数据的函数。现在我需要一种方法让A访问Data中的所有数据。我知道有两种方法可以做到。
我可以将数据引用传递给A但是我总是要写前缀“数据”。我认为这真的很烦人,反正也没有歧义。
我可以使A成为数据的超类。但是A中的一些方法调用了另一个类B,它也改变了类Data,在这种方法中我不知道如何做到这一点。
所以我的问题是:A是否有另一种方式可以访问更合适的数据中的数据?
答案 0 :(得分:1)
您正在寻找的概念称为friend类。朋友类可以访问他们声明的类的私有成员。所以,你有类似
的东西class A; //Forward declaration
class Data
{
friend class A; //Forward friend declaration, instances of A
//can access private members of Data
public:
//Implementation details
private:
int m_myData;
};
class A
{
//Do whatever to an instance of Data (probably take it by reference)
public:
void multiplyData(Data &data, int multiple) { data.m_myData *= multiple; }
};
答案 1 :(得分:-1)
如果问题是要从A类访问数据,则将数据声明为全局。你可以很好地访问任何人。它也可以是A类。将类数据作为头文件用于A类实现,Data的所有公共成员都可用于A类。