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

示例程序如下:

#include <iostream>
#include <String> using namespace std; // 基类
class student
{
public:
string name;
protected:
int age;
private:
char sex; public:
void showStu()
{
cout << this->name << endl; // 1、在本类能够访问类的公有数据成员
cout << this->age << endl; // 1、在本类能够访问类的保护数据成员
cout << this->sex << endl; // 1、在本类能够访问类的私有数据成员
}
}; // 派生类 - public继承
class public_Sub : public student
{
public:
void show()
{
cout << this->name << endl; // 2、public继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 2、public继承,在派生类中能够访问基类的保护数据成员
//cout << this->sex << endl; // error:2、在c类中不能访问基类的私有数据成员
}
}; // 派生类 - protected继承
class protected_Sub : protected student
{
public:
void show()
{
cout << this->name << endl; // 3、protected继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 3、protected继承,在派生类中能够访问基类的保护数据成员
//cout << this->sex << endl; // error:3、在派生类中不能访问基类的私有数据成员
}
}; // 派生类 - private继承
class private_Sub : private student
{
public:
void show()
{
cout << this->name << endl; // 4、private继承,在派生类中能够访问基类的公有数据成员
cout << this->age << endl; // 4、private继承,在派生类中能够访问基类的保护数据成员 【即使是private继承】
//cout << this->sex << endl; // error:4、在派生类中不能访问基类的私有数据成员
}
}; int main()
{
student stu;
cout << stu.name << endl; // 5、在类外可以访问类的公有数据成员
//cout << stu.age << endl; // error,5、在类外不能访问类的保护数据成员
//cout << stu.sex << endl; // error,5、在类外不能访问类的私有数据成员 return 0;
}
  • 派生类内不管是 public、protected、private 继承,总是可以 public、protected 成员,基类中的 private 成员永远不能再派生类内直接访问,不论通过哪种方式。
  • 派生类对象仅当 public 派生时,对基类中的 public 成员有可访问/可修改的权限,其他都为不可访问/不可修改。

另外,继承方式会改变从基类继承的成员在派生类的访问权限:

1、public 继承不改变基类成员的访问权限;

2、protected 继承将基类中 public 成员变为子类的 protected 成员,其它成员的访问权限不变;

3、private 继承使得基类所有成员在子类中的访问权限变为 private。

C++ 中为什么要定义 public、protect、private 这三种访问权限?

有些我们需要给外面看的,也就是对外接口,那么就是 public。如果我们不想让别人知道内部的实现细节,那么就是 private。如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为 protected。

C++ 类中的3种访问权限和继承方式的更多相关文章

  1. java中的四种访问权限是?

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

  2. C++ 类中的3种权限作用范围

    三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 #include <iostream> #in ...

  3. Java中四种访问权限总结

    一.Java中有四种访问权限, 其中三种有访问权限修饰符,分别为private.public.protected,还有一种不带任何修饰符(default). 1. private: Java语言中对访 ...

  4. c++中派生类对基类成员的三种访问规则(转)

    C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...

  5. java基础(八)-----深入解析java四种访问权限

    Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: 指的是本类 ...

  6. java基础(七) java四种访问权限

    引言   Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: ...

  7. java四种访问权限

    java有四种访问权限,它们各自的范围如下图所示 当下列访问修饰符修饰字段和方法时: private 任意位置的子类不可以访问从父类继承的private字段和方法.这里所说的访问包括通过super关键 ...

  8. 未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试

    报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序, ...

  9. Android中的安全与访问权限控制

    Android是一个多进程系统,在这个系统中,应用程序(或者系统的部分)会在自己的进程中运行.系统和应用之间的安全性是通过Linux的facilities(工具,功能)在进程级别来强制实现的,比如会给 ...

随机推荐

  1. MySQL5.8下载及安装——免安装版

    1.下载MySQL5.8下载地址:https://dev.mysql.com/downloads/mysql/ 图一: 图二: 2.如何安装.配置mysql-8.0.17-winx64.zip下载完成 ...

  2. WPF 有任何Focus问题,就找 Keyboard_Navigation

    牛牛的博客 https://www.cnblogs.com/smallidea/p/3412699.html 参照官网教程: https://docs.microsoft.com/en-us/dotn ...

  3. 【原】通过Spring结合Cglib处理非接口代理

    前言: 之前做的一个项目,虽然是查询ES,但内部有大量的逻辑计算,非常耗时,而且经常收到JVM峰值告警邮件.分析了一下基础数据每天凌晨更新一次,但查询和计算其实在第一次之后就可以写入缓存,这样后面直接 ...

  4. vue学习指南:第四篇(详细) - vue的 :class 和 :style

    1. :class = “a” 说明 vue 中有个叫 a 的属性 这个标签的class 就是 a的值 2. :class = “{ active:isactive }” Active的存在取决于 i ...

  5. The listener supports no services oracle注册监听

    问题登场: [oracle@my-e450 ~]$ lsnrctl status …… The listener supports no servicesThe command completed s ...

  6. IBM LOTUS DOMINO 9 部署SSL证书

    前言 随着SHA1算法在2016年12月31日以后,将被强制淘汰,所有新的SSL证书都必须支持SHA256算法,所以我们必须将IBM Domino Server升级到9.0以上才可以支持SHA256算 ...

  7. git使用笔记(第一次)

    背景:公司基于微服务的架构,前端的服务web只有一个.在并行完成不同需求的测试任务时,该服务会拉出不同分支,此时会碰到sit环境与其他测试小伙伴部署冲突的问题.解释下.需求1对应的服务web的A分支, ...

  8. 简单C语言程序

    #include<stdio.h> int main(void) { /* 计算两个时间的时间差 */ int hour1, minute1; int hour2, minute2; pr ...

  9. ansible 软件相关模块,剧本

    软件相关模块 yum rpm和yum的区别 rpm:redhat package manager yum 可以解决依赖关系 yum 源配置 使用yum下载时需要先下载epel [epel] name= ...

  10. lf 前后端分离 (3) 中间建跨域

    一.关于中间建跨域 为了减少跨域代码冗余,采用中间件 from django.utils.deprecation import MiddlewareMixin class CorsMiddleware ...