类转变数据我有两个类称为数据和A. A类主要是操纵在数据数据功能的集合。现在我需要一种方式让A访问Data中的所有数据。我知道两种方式。其他类
我可以将数据的引用传递给A,但我总是必须写前缀“数据”。我认为这真的很烦人,反正也没有歧义。
我可以做一个数据的超类。但是A中的一些方法调用另一个B类,它也会改变类Data,并且在这种方法中,我不确定如何做到这一点。
所以我的问题是:是否有另一种方式为A到访问数据的数据会更适合?
类转变数据我有两个类称为数据和A. A类主要是操纵在数据数据功能的集合。现在我需要一种方式让A访问Data中的所有数据。我知道两种方式。其他类
我可以将数据的引用传递给A,但我总是必须写前缀“数据”。我认为这真的很烦人,反正也没有歧义。
我可以做一个数据的超类。但是A中的一些方法调用另一个B类,它也会改变类Data,并且在这种方法中,我不确定如何做到这一点。
所以我的问题是:是否有另一种方式为A到访问数据的数据会更适合?
你要找的这个概念被称为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; }
};
只是指出访问说明符对朋友声明的含义没有影响;你把它放在“private:”下面的方式可能会引起混淆,说它是某种私人声明。这纯粹是美学,但仍然。 –
@TasosPapastylianou是的,好点。谢谢你提到它。这确实是为了美观,但我会编辑它以在初始类声明之后移动它。再次感谢。 –
但是在这里我仍然要写数据。所有的时间... – user3726947
从你的描述似乎你在一分为二的类的所有公共成员:一个保存数据,另一个包含代码对数据进行操作。在OOP中,数据和处理它的代码属于同一个类。 – axiac
但是有几个类对数据进行操作,并且将所有内容都放在一个大类中似乎对我来说是错误的。 – user3726947
如果班级非常庞大,那么你能说它真的遵守[单一责任原则](https://en.wikipedia.org/wiki/Single_responsibility_principle)吗?也许关键是将功能分解为几个类,而不是将功能发布到不同的类。查看[SOLID](https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))并观看一些[叔叔bob vids](https://www.youtube.com/results?search_query=uncle+鲍勃+马丁)在youtube上。 –