对于初学者C++的属性控制以及继承属性还是比较那掌握的,笔者在这里总结一下自己学习这些过程的见解。首先我们来看:


1、C++支持的访问属性有public、protected、private,下来我浅谈一下我在学习过程中的一些领悟。

1、对于public

1、该类中的函数、子类中的函数、其友元函数的访问以及该类中的对象

2、我个人一直觉得用代码理解概念是一个很好的方法,下边我将给出一些我的测试用例:

classBase{public://友元函数friendvoidfriend_Show(Base&bb);public:Base():x(0),px(0){}~Base(){}public://公有属性intpx;voidShowBase(){cout<<"IamShowBaseandampublic"<<endl;}voidTest(){cout<<"IamTest"<<endl;//测试保护方法调用公有方法成功了吗Print();//测试公有属性可以被保护方法修改吗cout<<"px="<<px<<endl;//测试私有方法调用公有方法Print_Private();//测试私有方法修改公有属性cout<<"px="<<px<<endl;}protected:voidPrint(){cout<<"IamPrint"<<endl;//公有方法被保护成员访问ShowBase();//保护方法修改公有属性px=10;}private:voidPrint_Private(){cout<<"IamPint_Private"<<endl;//公有成员被私有成员访问ShowBase();//私有方法修改公有属性px=20;}private:intx;};voidfriend_Show(Base&bb){cout<<"Iamfriend_Show"<<endl;//友元方法访问公有属性bb.px=30;////友元方法访问公有方法bb.ShowBase();}voidmain(){Basebb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);cout<<"bb.px="<<bb.px<<endl;}

运行结果:


上边的测试代码我给出了尽可能多注释,验证了上边几个属性,除了子类中的函数的访问属性没有给出测试用例,其他的都给出了测试用例。子类中的函数的访问属性我下边将作为一个专门的模块总结。


2、对于ptotected

1、可以被类中的函数、子类中的函数、其友元函数、该类的对象访问

2、这里我同样给出测试代码:

classBase{public://友元函数friendvoidfriend_Show(Base&bb);public:Base():x(0),pp(0){}~Base(){}public:voidShowBase(){cout<<"IamShowBaseandampublic"<<endl;//调用保护属性Print();//修改保护属性pp=40;}voidTest(){cout<<"IamTest"<<endl;//测试保护方法调用保护方法Test_proteced();//测试公保护方法修改保护属性cout<<"pp="<<pp<<endl;//测试私有方法调用保护方法Print_Private();//测试私有方法修改保护属性cout<<"pp="<<pp<<endl;//测试公有方法调用保护方法ShowBase();//测试公有方法修改保护属性cout<<"pp="<<pp<<endl;}voidTestFriend(){cout<<"IamTestFriend"<<endl;cout<<"pp="<<pp<<endl;}protected:intpp;voidPrint(){cout<<"IamPrintandamprotected"<<endl;}voidTest_proteced(){cout<<"IamTest_proteced"<<endl;//测试保护方法调用Print();pp=50;}private:voidPrint_Private(){cout<<"IamPint_Private"<<endl;//公有成员被私有成员访问Print();//私有方法修改保护属性pp=60;}private:intx;};voidfriend_Show(Base&bb){cout<<"Iamfriend_Show"<<endl;//友元方法访问保护属性bb.pp=30;////友元方法访问保护方法bb.Print();}voidmain(){Basebb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);bb.TestFriend();}

运行结果:


同样我在代码中给出了尽可能详尽的注释,对除了子函数中的访问没有给出,子函数的访问权限后边我将作为一个专门的模块总结。


3、对于private修饰符

1、只能有该类中的函数以及其友元函数访问,不能被任何其他函数和对象访问。

2、同样我也给出测试代码:

classBase{public://友元函数friendvoidfriend_Show(Base&bb);public:Base():x(0){}~Base(){}public:voidShowBase(){cout<<"IamShowBaseandampublic"<<endl;//调用私有属性Print_Private();//修改私有属性x=200;}voidTest(){cout<<"IamTest"<<endl;//测试公有方法调用保护方法ShowBase();//测试公有方法修改私有属性cout<<"x="<<x<<endl;//测试保护方法调用私有方法Print();//测试保护方法修改私有属性cout<<"x="<<x<<endl;//测试私有方法调用私有方法Test_Private();//测试是由私有方法修改私有属性cout<<"x="<<x<<endl;}voidTestFriend(){cout<<"IamTestFriend"<<endl;cout<<"x="<<x<<endl;}protected:voidPrint(){cout<<"IamPrintandamprotected"<<endl;//测试访问私有属性的方法Print_Private();//测试调用属性的属性x=100;}private:voidPrint_Private(){cout<<"IamPint_Private"<<endl;}voidTest_Private(){cout<<"IamTest_priavate"<<endl;Print_Private();}private:intx;};voidfriend_Show(Base&bb){cout<<"Iamfriend_Show"<<endl;//友元方法访问私有属性bb.x=300;////友元方法访问私有方法bb.Print_Private();}voidmain(){Basebb;bb.Test();//测试友元方法方法公有属性和方法friend_Show(bb);bb.TestFriend();}

运行结果:

最后也同样给出了privete访问控制测试代码以及截图,验证了我上边给出的访问控制权限。


限于篇幅这里只给出了基本的访问控制权限,没有给出子类中的访问控制权限测试案例,以及规律,子类中访问控制权限我将在下一篇的博文中给出。