C/C++中派生类访问属性详解及其作用介绍
目录
- 保护继承
- 派生类成员的访问属性
- 总结
保护继承
由 protected 声明的成员称为 “受保护的成员”, 或简称 “保护成员”.
从用户的角度来看, 保护成员等价于私有成员. 保护成员可以被派生类的成员函数引用.
派生类成员的访问属性
4 种访问属性:
- 公用的: 类内和类外都可以访问
- 受保护的: 类内可以访问, 类外不能访问, 下一层的派生类可以访问
- 私有的: 类内可以访问, 类外不能访问
- 不可访问的: 类内和类外都不能访问
继承方式 | 基类中的成员 | 访问属性 |
---|---|---|
公用继承 (public) | 公用成员和保护成员 | 在派生类中保持原有访问属性 |
公用继承 (public) | 私有成员 | 仍为基类私有, 派生类不可访问 |
私有继承 (private) | 公用成员和保护成员 | 在派生类中成了私有成员 |
私有继承 (private) | 私有成员 | 仍为基类私有, 派生类不可访问 |
受保护的继承 (protected) | 公用成员和保护成员 | 在派生类中成了保护成员 |
受保护的继承 (protected) | 私有成员 | 仍为基类私有, 派生类不可访问 |
总结
- 如果在多级派生时都采用公用继承方式, 那么直到最后一级派生类都能访问基类的公用成员和保护成员
- 如果采用私有继承的方式, 经过若干次派生之后, 基类的所有的成员已经变成不可访问的了
- 如果采用菜户继承方式, 在派生类外无法访问派生类中的任何成员. 而且经过多次派生后, 人们很难清楚的记住哪些成员可以访问, 哪些成员不能访问, 很容易出错
注: 实际开发中, 我们通常使用的是公共继承.
到此这篇关于C/C++中派生类访问属性详解及其作用介绍的文章就介绍到这了,更多相关C++派生类访问属性内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
C++派生类与基类的转换规则
只有公用派生类才是基类真正的子类型,它完整地继承了基类的功能.基类与派生类对象之间有赋值兼容关系,由于派生类中包含从基类继承的成员,因此可以将派生类的值赋给基类对象,在用到基类对象的时候可以用其子类对象代替. 具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对象b1 a1=b1; //用派生类B对象b1对基类对象a1赋值 在赋值时舍弃派生类自己的成员. 实际上
-
深入分析C++派生类中的保护成员继承
protected 与 public 和 private 一样是用来声明成员的访问权限的.由protected声明的成员称为"受保护的成员",或简称"保护成员".从类的用户角度来看,保护成员等价于私有成员.但有一点与私有成员不同,保护成员可以被派生类的成员函数引用. 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员.如果在一个类中声明了保护成员,就意味着该类可能要用作基类,在它的派生类中会访问这些成员.
-
C/C++中派生类访问属性详解及其作用介绍
目录 保护继承 派生类成员的访问属性 总结 保护继承 由 protected 声明的成员称为 "受保护的成员", 或简称 "保护成员". 从用户的角度来看, 保护成员等价于私有成员. 保护成员可以被派生类的成员函数引用. 派生类成员的访问属性 4 种访问属性: 公用的: 类内和类外都可以访问 受保护的: 类内可以访问, 类外不能访问, 下一层的派生类可以访问 私有的: 类内可以访问, 类外不能访问 不可访问的: 类内和类外都不能访问 继承方式 基类中的成员 访问属性
-
C++中static修饰符的详解及其作用介绍
目录 概述 静态数据成员 引用静态数据成员 用类名访问数据成员 静态成员函数 综合案例 概述 static (静态) 修饰符是用来控制变量的存储方式和可见性的. 静态局部变量存储在静态区域: static 的性质: 局部特性:作用范围仅限于本函数 静态特性:存储在静态区, 函数调用结束后不孝顺而保留原值. 在下一次调用时, 保留上一次调用结束时的值. 静态数据成员 在我们定义全局变量的时候, 我们会发现一个问题: 我们可以在程序各处自由的修改全局变量的值 (不安全). 静态数据成员的特点: 静态
-
C++中const修饰符的详解及其作用介绍
目录 概述 常对象 常对象成员 常成员函数 常数据成员 数据成员访问限制 常对象修改的限制 常指针 指向常变量的指针 指向对象的指针 小结 对象的常引用 总结 概述 const 是 constant 的缩写, 是不变的意思. 在 C++ 中是用来修饰内置类型变量, 自定义对象, 成员函数, 返回值, 函数参数. const 可以帮我们避免无意之中的错误操作. 使用 const, 把有关的数据定义为常量 (常变量 / 常对象 / 常函数). const 既可以使数据在一定范围内共享, 又要保证它不
-
C/C++中栈(stack)&堆(heap)详解及其作用介绍
目录 概述 程序运行中的栈和堆 堆和栈的差异 申请方式和回收方式 申请后系统的响应 申请效率比较 申请大小的限制 堆和栈中的存储内容 概述 栈 (stack) 是为执行线程流出的内存空间. 堆 (head) 是为动态分配预留的空间. 程序运行中的栈和堆 我们以一段代码来举例: #include <iostream> using namespace std; int a = 0; // 全局初始化区 char *pt; // 全局未初始化 int main() { int b; // b在栈区
-
C/C++中文件的随机读写详解及其作用介绍
目录 概述 随机读写 函数 例子 指针流成员函数 随机访问二进制数据 概述 文件的操作方式分为顺序读写和随机读写. 顺序读写指文件的指针只能从头移到尾巴. 随机读写指文件指针可以随意移动, 根据需要. 随机读写 文件指针: 在磁盘文件操作中有一个文件指针, 用来指明进行读写的位置. 函数 文件流提供了一些有关文件指针的成员函数: 成员函数 作用 gcount() 返回最后一次输入所读入的字节数 tellg() 返回输入文件指针的当前位置 seekg (文件中的位置) 将输入文件中指针移到指定的位
-
C++中浅拷贝与深拷贝的详解及其作用介绍
目录 概述 对象的赋值 对象的复制 对象复制的用途 建立一个新对象 函数的参数为类对象 函数的返回值为类对象 浅拷贝 深拷贝 概述 浅拷贝 (shallow copy) 只是对指针的拷贝, 拷贝够两个指针指向同一个内存空间. 深拷贝 (deep copy) 不但对指针进行拷贝, 而且对指针指向的内容进行拷贝. 经过深拷贝后的指针是指向两个不同地址的指针. 对象的赋值 同类对象之间可以相互赋值. 对象赋值的一般形式: 对象名1 = 对象名2; 举个栗子: int main() { Time t1(
-
C++中构造函数与析构函数的详解及其作用介绍
目录 构造函数 默认构造函数 有参构造函数 析构函数 析构函数例子 析构函数执行时机 局部对象 全局对象 构造函数 构造函数 (constructor) 是一种特殊的成员函数. 它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的, 并且不会返回任何类型. 构造函数可用于为某些成员变量设置初始值. 格式: Class::Class(); // 构造函数 默认构造函数 如果用户自己没有定义构造函数, C++ 系统会自动生成一个默认构造函数. 这个构造函数体是空的, 没有参数, 不
-
C/C++中虚基类详解及其作用介绍
目录 概述 多重继承的问题 虚基类 初始化 例子 总结 概述 虚基类 (virtual base class) 是用关键字 virtual 声明继承的父类. 多重继承的问题 N 类: class N { public: int a; void display(){ cout << "A::a=" << a <<endl; } }; A 类: class A : public N { public: int a1; }; B 类: class B :
-
C++中对象与类的详解及其作用介绍
目录 什么是对象 面向过程 vs 面向对象 面向过程 面向对象 什么是类 类的格式 类的成员函数 函数访问权限 方法一 方法二 方法三 inline 成员函数 什么是对象 任何事物都是一个对象, 也就是传说中的万物皆为对象. 对象的组成: 数据: 描述对象的属性 函数: 描述对象的行为, 根据外界的信息进行相应操作的代码 具有相同的属性和行为的对象抽象为类 (class) 类是对象的抽象 对象则是类的特例 面向过程 vs 面向对象 面向过程 面向过程的设计: 围绕功能, 用一个函数实现一个功能
-
C#中ArrayList 类的使用详解
目录 一:ArrayList 类简单说明 二:ArrayList 类的构造函数 三:ArrayList 类的属性 1:使用举例说明 四:ArrayList 类的常用方法 1: AddRange(ICollection)方法使用举例 2: ArrayList.Clone() 方法使用举例 3:ArrayList.Remove(Object) 使用举例 4:ArrayList.RemoveAt(Int32) 使用举例 5:ArrayList.RemoveAt(Int32) 使用举例 6:ArrayL
随机推荐
- mysql自动定时备份数据库的最佳方法(windows服务器)
- js另类写法
- vue.js如何将echarts封装为组件一键使用详解
- Java语言实现对MySql数据库中数据的增删改查操作的代码
- struts2.3.24+spring4.1.6+hibernate4.3.11+mysql5.5.25开发环境搭建图文教程
- JavaScript计算字符串中每个字符出现次数的小例子
- PHP与Java进行通信的实现方法
- PHP检测数据类型的几种方法(总结)
- 解析关于wamp启动是80端口被占用的问题
- Android使用OkHttp上传图片的实例代码
- Android自定义View播放Gif动画的示例
- JavaScript使用slice函数获取数组部分元素的方法
- 一个下载网页图片的shell脚本
- 你的jquery ajax无效和你的jquery引入路径有关
- 探究Python的Tornado框架对子域名和泛域名的支持
- 详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
- Java NIO原理图文分析及代码实现
- 对arraylist中元素进行排序实例代码
- 层叠菜单的动态生成
- Vue项目组件化工程开发实践方案