作者:朱金灿
来源:http://blog.csdn.net/clever101
在C++的类的数据成员的访问权限分为三种:public、protect和private。private表示自己本类私有,不允许其它类的直接访问;protected表示自己及子孙可以访问,其它族类不允许直接访问,我们可以把它比作是本家族的共同财富;public表示向全社会都公开的,任何类都可以直接访问的。
一般而言,出于对数据成员封装性的考虑,我们往往把数据成员设置为protect和private的访问权限。但是最近我发现,将一些类的数据成员设为public的访问权限也是有必要的。那么在什么时候将一些类的数据成员设为public的访问权限呢?
我们知道在C++的代码重用中有两种形式:一种是通过类的继承,另一种通过类的组合。类的组合就是在一个类对象的数据成员的类型是另一个类对象的类型,示例代码如下:
在这种情况下我倾向于把A类的数据成员m_Data设置为public的访问权限。当然在A类提供一个获取数据B的方法也是可以达到上面效果的,代码如下:
但我认为这种写法实在不如第一种写法好。第一个理由是不够优雅,为了设置B的值我们还得加上一个SetB的方法,这样就形成我的同事所说的"VB风格"的C++代码。第二个理由我发现这种类的组合主要是接口的重用,对类数据的封装主要防止的是对类数据的随意修改,但是开发人员对类的一个复合类型(如类类型或结构体类型)的数据成员的随意修改我觉得可能性比较小(相对于如int、float等简单的数据类型的数据成员而言)。这样倒不如
<!-- [if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:PunctuationKerning/>
<w:DrawingGridVerticalSpacing>7.8 磅</w:DrawingGridVerticalSpacing>
<w:DisplayHorizontalDrawingGridEvery>0</w:DisplayHorizontalDrawingGridEvery>
<w:DisplayVerticalDrawingGridEvery>2</w:DisplayVerticalDrawingGridEvery>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:SpaceForUL/>
<w:BalanceSingleByteDoubleByteWidth/>
<w:DoNotLeaveBackslashAlone/>
<w:ULTrailSpace/>
<w:DoNotExpandShiftReturn/>
<w:AdjustLineHeightInTable/>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:UseFELayout/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!-- [if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><!-- [if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->直接将m_Data
设为public
访问权限外部使用起来更为方便。
分享到:
相关推荐
利用自定义数据可以把单个的私有成员打包,然后将外部变量的地址指向类内部的私有成员数据地址,就可以实现修改外部变量的同时,类内部的私有成员数据也发生了变化。从而实现了类内部私有成员的数据可以直接操作的...
C++中,一个类需要调用另外一个类的数据成员时,经常不知道怎么做,这里整理了两种方法,来实现在一个类中调用另外一个类的数据成员。
指向类的静态成员的指针,通过指针访问类的静态数据成员
设计一个程序,定义一个矩形类,包括数据成员和函数成员。
定义一个人员类Person,数据成员有姓名,能够设置姓名的值及显示姓名 从人员类派生出老师类和学生类 学生类数据成员有学号、班级等,能够显示相应信息 老师类数据成员有系别、所教科目,能够显示相应信息 定义一个...
利用自定义数据可以把单个的私有成员打包,然后将外部变量的地址指向类内部的私有成员数据地址,就可以实现修改外部变量的同时,类内部的私有成员数据也发生了变化。从而实现了类内部私有成员的数据可以直接操作的...
C++类成员和数据成员初始化总结 C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类...
类的静态数据成员的实际应用场景之一:用来统计该类对象存在的个数;并且如果在头文件中初始化静态变量将导致obj重复定义的错误,解决办法:将静态成员的初始化放到.cpp文件中
易语言从外部访问类的私有成员源码,从外部访问类的私有成员,私有成员外部初始化,测试_输出私有成员的值,子程序_说明,取变量数据地址_ASM,变量_ASM变量地址还原数据指针,变量_ASM变量地址指向新数据地址
类的静态数据成员-用来统计对象存在的个数 引用静态数据成员(通过类本身或者通过类对象)的方式对结果没有影响,都等于创建的对象的个数
实现易语言类静态数据成员的方法。@易语言学习论坛。
最近研究WPF,遇到并解决了一些难题(至少是初学者的入门难题),包括: 1)控件如何绑定数据? 2)控件与数据如何双向绑定? 3)控件如何绑定类成员变量? 4)控件如何绑定类对象的成员变量? 5)每次加载页面...
定义了一个以hours, minutes和seconds作为数据成员的Time类。设计了成员函数: (1) 有无参构造函数、带三个参数的构造函数、拷贝构造函数、析构函数 (2) 设计两个Time对象相减运算的成员函数。函数输出结果为...
设计一个人类person,包括人员编号和姓名等数据成员以及相关的成员函数,从它派生出教师类teacher和医生类doctor,再从这两个类派生出教师医生类teachdoc,在主函数采用一些数据进行测试;(采用虚基类)
C++类与对象:static静态数据成员静态成员函数.doc
Delphi XE中类成员的访问权限.mht
主要针对java类访问权限与成员访问权限进行解析,对类与成员访问权限进行验证,感兴趣的小伙伴们可以参考一下
静态数据成员函数与子对象,定义一个圆类……………………
#include using namespace std; class Test { public: Test(int = 0); void print()const; private: int x; }; Test::Test(int value) :x(value) { }....