对于初学者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访问控制测试代码以及截图,验证了我上边给出的访问控制权限。
限于篇幅这里只给出了基本的访问控制权限,没有给出子类中的访问控制权限测试案例,以及规律,子类中访问控制权限我将在下一篇的博文中给出。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。