三种访问权限

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种权限作用范围的更多相关文章

  1. JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)

    1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...

  2. C++ 类中的3种访问权限和继承方式

    访问权限:public 可以被任意实体访问,protected 只允许子类(无论什么继承方式)及本类的成员函数访问,private 只允许本类的成员函数访问.三种继承方式分别是 public 继承,p ...

  3. Java中的四种权限修饰符及六种非访问修饰符(简识)

    一.是哪四种访问权限修饰符呢? public > protected > [default] > private (公共的 ) (受保护的) (默认的) (私有的) 二.简单认识四种 ...

  4. Object类中的五种方法

    clone() Object类源码:protected native Object clone() throws CloneNotSupportedException; 这里有个问题:为什么Sun公司 ...

  5. java中的四种权限

    1.私有权限(private) private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类).被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用. ...

  6. UML类中的6种关系

    最近现看Java设计模式,但是越看越不明白,一直搞不明白类与类之前的关系有哪些,通过几天的学习与整理通过代码实现的UML画图的方式理解类之间的相互关系. 一.类与类6大关系: 泛化(generaliz ...

  7. Java 中的四种权限修饰符

    * * private: * Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”. * 被其修饰的属性以及方法只能被该类的对象 访问,其子类不能访问,更不能允许跨包访问. * * def ...

  8. Hashtable类中的四种遍历方法对比

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  9. Java中的四种权限修饰符

    权限修饰符   public protected [default] private 同一个类 YES YES YES YES 同一个包 YES YES YES NO 不同包子类 YES YES NO ...

随机推荐

  1. Codeforces870F. Paths

    n<=10000000的图,满足:如果(i,j)>1就连一条边权1的无相变,问所有d(u,v) (u<=v)--u到v的最短路之和. 首先1和>n/2的质数都是孤立的点.然后两 ...

  2. 从零开始写STL—容器—vector

    从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...

  3. JAVA生成扫描条形码

    条形码是一种可视化.机器可读的数据,这些数据通常描述了携带该条码的物品的相关信息.条形码已经广泛被应用在商品流通,图书管理,邮政管理和银行系统等领域.在这篇文章中,将介绍如何生成和扫描一些常见的一维和 ...

  4. 在线文档分享工具 ShowDoc

    原文:https://www.oschina.net/p/showdoc https://www.showdoc.cc/

  5. ArcGIS Python 编码问题

    吐槽一下ArcGIS自带的 Python IDE, 没有代码补全 没有函数提示 没有代码折叠 没有行号 撤销操作还有问题 字符编码还有各种问题 .........   花了2天时间才琢磨出来的经验 环 ...

  6. BSON结构

    BSON结构 flyfish 2015-7-24 主要解释bsonspec.org站点上的两个样例 {"hello": "world"}  hello为key. ...

  7. easyui报错“Cannot read poperty 'options' of undefined”问题解决方案之一

    别逼逼了,我要看解决方法 问题产生原因 最近在项目中使用jquery easyui做页面.其中有个优化问题,我是将原本由jsp通过jstl标签生成的页面改成js通过dom去延迟生成了. 但是js生成的 ...

  8. ASP.NET MVC Model之二模型绑定

    Asp.net mvc中的模型绑定,或许大家经常用,但是具体说他是怎么一回事,可能还是会有些陌生,那么,本文就带你理解模型绑定.为了理解模型绑定,本文会先给出其定义,然后对通过比,来得出使用模型绑定的 ...

  9. 一起talk C栗子吧(第九十回:C语言实例--使用管道进行进程间通信三)

    各位看官们,大家好,上一回中咱们说的是使用管道进行进程间通信的样例.这一回咱们说的样例是:使用管道进行进程间通信.只是使用管道的方式不同样.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前 ...

  10. 编译android的一些坑

    1 降级gcc g++到4.4 2 参考:http://source.android.com/source/initializing.html来配置环境 3 使用jdk1.6 包括 java java ...