C++ 类中的3种权限作用范围
三种访问权限
public:可以被任意实体访问
protected:只允许子类及本类的成员函数访问
private:只允许本类的成员函数访问
#include <iostream> #include <string> using namespace std; //1、private:只能在本类中访问(1)(缺省的), //2、protected:能在本类、子类中访问(2) //3、public:能在本类、子类、类外中访问(3) class student { public: string name; protected: int age; private: char sex; public: student(){} student(string name,int age,char sex) { this->name = name; this->age = age; this->sex = sex; } void showStu() { cout << this->name << endl; //1、在本类能够访问类的公有数据成员 cout << this->age << endl; //1、在本类能够访问类的保护数据成员 cout << this->sex << endl; //1、在本类能够访问类的私有数据成员 } }; class Sub : public student { public: void show() { cout << this->name << endl; //2、在子类中能够访问父类的公有数据成员 cout << this->age << endl; //2、在子类中能够访问父类的保护数据成员 //cout << this->sex << endl; //error:2、在子类中不能访问父类的私有数据成员 } }; //类外 void showStudent(const student &stu) { cout << stu.name << endl; //3、在类外可以访问类的公有数据成员 //cout << stu.age << endl; //error,3、在类外不能访问类的保护数据成员 //cout << stu.sex << endl; //error,3、在类外不能访问类的私有数据成员 } int main() { student stu; }
三种继承方式
public 继承
protect 继承
private 继承
组合结果
基类中 继承方式 子类中
public & public继承 => public
public & protected继承 => protected
public & private继承 = > private
protected & public继承 => protected
protected & protected继承 => protected
protected & private继承 = > private
private & public继承 => 子类无权访问
private & protected继承 => 子类无权访问
private & private继承 = > 子类无权访问
但无论哪种继承方式,上面两点都没有改变:
1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.protected 成员可以被派生类访问。
#include "stdafx.h" #include <iostream> #include <string> using namespace std; class student { public: string name; protected: int age; private: char sex; }; //public继承,父类中的方法属性不发生改变 class public_Sub : public student { public: void show() { cout << this->name << endl; //name在子类中仍然为public,可以访问 cout << this->age << endl; //age在子类中仍然为protected,可以访问 //cout << this->sex << endl; //error: sex在子类中仍然为private,不能访问 } }; //protected继承,父类的protected和public方法在子类中变为protected,private方法不变; class protected_Sub : protected student { public: //name在子类中变为protected,age和sex的权限不变 }; //private继承,父类的所有方法在子类中变为private class private_Sub : private student { public: //name、age、sex在子类中都变为private }; //------------ //public继承 class Double_Sub : public private_Sub { public: void show() { //cout << this->name << endl; //error: name在子类中仍然为private,可以访问 //cout << this->age << endl; //error: age在子类中仍然为private,可以访问 //cout << this->sex << endl; //error: sex在子类中仍然为private,不能访问 } }; int main() { public_Sub stu1; protected_Sub stu2; private_Sub stu3; }
由以上组合结果可以看出
1、public继承不改变基类成员的访问权限
2、private继承使得基类所有成员在子类中的访问权限变为private
3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问权限不变。
4、基类中的private成员不受继承方式的影响,子类永远无权访问(使用using也不行)。
c++ 中为什么要定义public protect private 三种访问权限?
有些我们需要给外面看的,也就是对外接口,那么就是public。如果我们不想让别人知道内部的实现细节,那么就是private。如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为protected。
这样的话,private是自己私有的,protected是可以让孩子知道的,public是公开的!
C++ 类中的3种权限作用范围的更多相关文章
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- C++ 类中的3种访问权限和继承方式
访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问.三种继承方式分别是 public 继承,p ...
- Java中的四种权限修饰符及六种非访问修饰符(简识)
一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...
- Object类中的五种方法
clone() Object类源码:protected native Object clone() throws CloneNotSupportedException; 这里有个问题:为什么Sun公司 ...
- java中的四种权限
1.私有权限(private) private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类).被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用. ...
- UML类中的6种关系
最近现看Java设计模式,但是越看越不明白,一直搞不明白类与类之前的关系有哪些,通过几天的学习与整理通过代码实现的UML画图的方式理解类之间的相互关系. 一.类与类6大关系: 泛化(generaliz ...
- Java 中的四种权限修饰符
* * private: * Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”. * 被其修饰的属性以及方法只能被该类的对象 访问,其子类不能访问,更不能允许跨包访问. * * def ...
- Hashtable类中的四种遍历方法对比
要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...
- Java中的四种权限修饰符
权限修饰符 public protected [default] private 同一个类 YES YES YES YES 同一个包 YES YES YES NO 不同包子类 YES YES NO ...
随机推荐
- topcoder SRM 639 div2
见这里 http://ygdtc.sinaapp.com/?p=257
- Netbeans工具使用记录
#自动换行设置 工具->选项->编辑器->格式设置
- 【Codevs1237&网络流24题餐巾计划】(费用流)
题意:一个餐厅在相继的 N 天里,每天需用的餐巾数不尽相同. 假设第 i 天需要 ri块餐巾(i=1,2,…,N).餐厅可以购买新的餐巾,每块餐巾的费用为 p 分: 或者把旧餐巾送到快洗部,洗一块需 ...
- 动态链接 - dll和so文件区别与构成
动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库.大多数操作系统将解析外部引用(比如库)作为加载过程的一部分.在这些系统上,可执行文件包含一个叫做import directory的 ...
- hiho一下 第五十周 (求欧拉路径)
http://hihocoder.com/contest/hiho50/problem/1 这题有重边,所以邻接矩阵用来统计节点u,v之间有多少条边相连,并且用另外一个数组统计每个节点的入度. 然后查 ...
- hdu - 2660 Accepted Necklace (二维费用的背包问题)
http://acm.hdu.edu.cn/showproblem.php?pid=2660 f[v][u]=max(f[v][u],f[v-1][u-w[i]]+v[i]; 注意中间一层必须逆序循环 ...
- Servlet的Cookies处理
以下内容引用自http://wiki.jikexueyuan.com/project/servlet/cookies-handling.html: Cookies是存储在客户端计算机上的文本文件,用于 ...
- 我的arcgis培训照片4 来自http://www.cioiot.com/successview-549-1.html
- react 执行 yarn build 页面无法显示
资源文件路径问题 如果你使用create-react-app创建项目,执行命令 yarn build 后,直接以静态方式打开build文件夹内的index.html,会看到页面显示出现问题,打开con ...
- 中国第二代身份证验证js代码
以下这部分代码截取自盛大的某个网页.详细我就不给url了.以下是相应的js代码: iW = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); iSum ...