对于初学者C++的属性控制以及继承属性还是比较那掌握的,笔者在这里总结一下自己学习这些过程的见解。首先我们来看:
1、C++支持的访问属性有public、protected、private,下来我浅谈一下我在学习过程中的一些领悟。
1、对于public
1、该类中的函数、子类中的函数、其友元函数的访问以及该类中的对象
2、我个人一直觉得用代码理解概念是一个很好的方法,下边我将给出一些我的测试用例:
class Base { public: //友元函数 friend void friend_Show(Base &bb); public: Base():x(0),px(0){ } ~Base(){ } public: //公有属性 int px; void ShowBase() { cout<<"I am Show Base and am public"<<endl; } void Test() { cout<<"I am Test"<<endl; //测试保护方法调用公有方法成功了吗 Print(); //测试公有属性可以被保护方法修改吗 cout<<"px = "<<px<<endl; //测试私有方法调用公有方法 Print_Private(); //测试私有方法修改公有属性 cout<<"px = "<<px<<endl; } protected: void Print() { cout<<"I am Print "<<endl; //公有方法被保护成员访问 ShowBase(); //保护方法修改公有属性 px = 10; } private: void Print_Private() { cout<<"I am Pint_Private"<<endl; //公有成员被私有成员访问 ShowBase(); //私有方法修改公有属性 px = 20; } private: int x; }; void friend_Show(Base &bb) { cout<<"I am friend_Show"<<endl; //友元方法访问公有属性 bb.px= 30; ////友元方法访问公有方法 bb.ShowBase(); } void main() { Base bb; bb.Test(); //测试友元方法方法公有属性和方法 friend_Show(bb); cout<<"bb.px = "<<bb.px<<endl; }
运行结果:
上边的测试代码我给出了尽可能多注释,验证了上边几个属性,除了子类中的函数的访问属性没有给出测试用例,其他的都给出了测试用例。子类中的函数的访问属性我下边将作为一个专门的模块总结。
2、对于ptotected
1、可以被类中的函数、子类中的函数、其友元函数、该类的对象访问
2、这里我同样给出测试代码:
class Base { public: //友元函数 friend void friend_Show(Base &bb); public: Base():x(0),pp(0) { } ~Base() { } public: void ShowBase() { cout<<"I am Show Base and am public"<<endl; //调用保护属性 Print(); //修改保护属性 pp = 40; } void Test() { cout<<"I am Test"<<endl; //测试保护方法调用保护方法 Test_proteced(); //测试公保护方法修改保护属性 cout<<"pp = "<<pp<<endl; //测试私有方法调用保护方法 Print_Private(); //测试私有方法修改保护属性 cout<<"pp = "<<pp<<endl; //测试公有方法调用保护方法 ShowBase(); //测试公有方法修改保护属性 cout<<"pp = "<<pp<<endl; } void TestFriend() { cout<<"I am TestFriend"<<endl; cout<<"pp = "<<pp<<endl; } protected: int pp; void Print() { cout<<"I am Print and am protected "<<endl; } void Test_proteced() { cout<<"I am Test_proteced "<<endl; //测试保护方法调用 Print(); pp = 50; } private: void Print_Private() { cout<<"I am Pint_Private"<<endl; //公有成员被私有成员访问 Print(); //私有方法修改保护属性 pp = 60; } private: int x; }; void friend_Show(Base &bb) { cout<<"I am friend_Show"<<endl; //友元方法访问保护属性 bb.pp= 30; ////友元方法访问保护方法 bb.Print(); } void main() { Base bb; bb.Test(); //测试友元方法方法公有属性和方法 friend_Show(bb); bb.TestFriend(); }
运行结果:
同样我在代码中给出了尽可能详尽的注释,对除了子函数中的访问没有给出,子函数的访问权限后边我将作为一个专门的模块总结。
3、对于private修饰符
1、只能有该类中的函数以及其友元函数访问,不能被任何其他函数和对象访问。
2、同样我也给出测试代码:
class Base { public: //友元函数 friend void friend_Show(Base &bb); public: Base():x(0) { } ~Base() { } public: void ShowBase() { cout<<"I am Show Base and am public"<<endl; //调用私有属性 Print_Private(); //修改私有属性 x = 200; } void Test() { cout<<"I am Test"<<endl; //测试公有方法调用保护方法 ShowBase(); //测试公有方法修改私有属性 cout<<"x = "<<x<<endl; //测试保护方法调用私有方法 Print(); //测试保护方法修改私有属性 cout<<"x = "<<x<<endl; //测试私有方法调用私有方法 Test_Private(); //测试是由私有方法修改私有属性 cout<<"x = "<<x<<endl; } void TestFriend() { cout<<"I am TestFriend"<<endl; cout<<"x = "<<x<<endl; } protected: void Print() { cout<<"I am Print and am protected "<<endl; //测试访问私有属性的方法 Print_Private(); //测试调用属性的属性 x = 100; } private: void Print_Private() { cout<<"I am Pint_Private"<<endl; } void Test_Private() { cout<<"I am Test_priavate"<<endl; Print_Private(); } private: int x; }; void friend_Show(Base &bb) { cout<<"I am friend_Show"<<endl; //友元方法访问私有属性 bb.x= 300; ////友元方法访问私有方法 bb.Print_Private(); } void main() { Base bb; bb.Test(); //测试友元方法方法公有属性和方法 friend_Show(bb); bb.TestFriend(); }
运行结果:
最后也同样给出了privete访问控制测试代码以及截图,验证了我上边给出的访问控制权限。
限于篇幅这里只给出了基本的访问控制权限,没有给出子类中的访问控制权限测试案例,以及规律,子类中访问控制权限我将在下一篇的博文中给出。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。