2016-12-29 44 views
0

类转变数据我有两个类称为数据和A. A类主要是操纵在数据数据功能的集合。现在我需要一种方式让A访问Data中的所有数据。我知道两种方式。其他类

  1. 我可以将数据的引用传递给A,但我总是必须写前缀“数据”。我认为这真的很烦人,反正也没有歧义。

  2. 我可以做一个数据的超类。但是A中的一些方法调用另一个B类,它也会改变类Data,并且在这种方法中,我不确定如何做到这一点。

所以我的问题是:是否有另一种方式为A到访问数据的数据会更适合?

+3

从你的描述似乎你在一分为二的类的所有公共成员:一个保存数据,另一个包含代码对数据进行操作。在OOP中,数据和处理它的代码属于同一个类。 – axiac

+0

但是有几个类对数据进行操作,并且将所有内容都放在一个大类中似乎对我来说是错误的。 – user3726947

+3

如果班级非常庞大,那么你能说它真的遵守[单一责任原则](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上。 –

回答

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; } 
}; 
+0

只是指出访问说明符对朋友声明的含义没有影响;你把它放在“private:”下面的方式可能会引起混淆,说它是某种私人声明。这纯粹是美学,但仍然。 –

+0

@TasosPapastylianou是的,好点。谢谢你提到它。这确实是为了美观,但我会编辑它以在初始类声明之后移动它。再次感谢。 –

+0

但是在这里我仍然要写数据。所有的时间... – user3726947

-1

如果问题是关于从A级访问数据,然后申报数据为全局。任何人都可以很好地访问。它也可以是A类。使用类数据头文件A级执行,数据将提供给A级

+0

这只是你可以做的最糟糕的事情。请阅读此线程:http://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil –

+0

是的,你是正确的,全球性的数据是邪恶的。谢谢 – Jitendra

+0

可以用这种方式使用Class数据作为头文件并访问它的所有成员。 – Jitendra