不同派生方式下基类成员在派生类中的可访问范围属性
不同派生方式下基类成员在派生类中的可访问范围属性
派生方式 | 派生方式 | 派生方式 | |
---|---|---|---|
基类成员 | 公有派生 | 私有派生 | 保护派生 |
私有成员 | 不可访问 | 不可访问 | 不可访问 |
保护成员 | 保护 | 私有 | 保护 |
公有成员 | 公有 | 私有 | 保护 |
- 举一个例子说明该表的解读方法:第五行第三列说明,基类的公有成员经过私有派生后,在派生类中变为私有成员。
- 类的“不可访问”成员指的是类的成员函数内部也不能访问的成员。例如,基类的私有成员在派生类的成员函数内就不能访问,但它依然是派生类的成员,因此说基类的私有成员在派生类中成为不可访问成员。
- 使用公有派生,基类的公有成员将成为派生类的公有成员;基类的私有部分也将成为派生类的一部分,但属于“不可访问”成员,只能通过基类的公有和保护方法访问。
- 一般情况下都应使用公有派生。
- 继承通过使用已有的类(基类)定义新的类(派生类),使得能够根据需要修改编程代码。公有继承建立is-a关系,这意味着派生类对象也应该是某种基类对象。作为is-a模型的一部分,派生类继承基类的数据成员和大部分方法,但不继承基类的构造函数、析构函数和赋值运算符。派生类可以直接访问基类的公有成员和保护成员,并能够通过基类的公有方法和保护方法访问基类的私有成员。可以在派生类中新增数据成员和方法,还可以将派生类用作基类,来做进一步的开发。每个派生类都必须有自己的构造函数。程序创建派生类对象时,将首先调用基类的构造函数,然后调用派生类的构造函数;程序删除对象时,将首先调用派生类的析构函数,然后调用基类的析构函数。
- 如果要将类用作基类,则可以将成员声明为保护的,而不是私有的,这样,派生类将可以直接访问这些成员。然而,使用私有成员通常可以减少出现编程问题的可能性。如果希望派生类可以重新定义基类的方法,则可以使用关键字virtual将它声明为虚的。这样对于通过指针或引用访问的对象,能够根据对象类型来处理,而不是根据引用或指针的类型来处理。具体地说,基类的析构函数通常应当是虚的。
- 可以考虑定义一个ABC:只定义接口,而不涉及实现。例如,可以定义抽象类Shape,然后使用它派生出具体的形状类,如Circle和Square。ABC必须至少包含一个纯虚方法,可以在声明中的分号前面加上=0来声明纯虚方法。
virtual double area() const = 0;
- 不一定非得定义纯虚方法。对于包含纯虚成员的类,不能使用它来创建对象。纯虚方法用于定义派生类的通用接口。
不同派生方式下基类成员在派生类中的可访问范围属性相关推荐
- C++中public/private/protected三种继承方式下基类成员对派生类的可见性探讨
原文: http://blog.csdn.net/zgjxwl/article/details/4804233 1.public继承方式下 #include <iostream> ...
- C++改变基类成员在派生类中的访问属性
使用using声明可以改变基类成员在派生类中的访问属性.我们知道基类的公有成员经过公有继承,在派生类中其属性为public的,但是通过using 声明,我们可以将其改为private或protecte ...
- C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)
1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...
- python类成员_Python的类成员和对象成员
Python中有个类成员的概念,绝对是困扰新手的问题.看看下面的代码就知道两者的区别了. #!/usr/bin/python # -*- coding: utf-8 -*- import time f ...
- 4.3调整基类成员在派生类中的访问属性的方法
同名成员 在定义派生类的时候,C++语言允许派生类与基类中的函数名相同.如果在派生类中定义了与基类中相同的成员,则称派生类成员覆盖了基类的同名成员,在派生类中使用这个名字意味着访问在派生类中重新说明的 ...
- c ++类成员函数_C ++编程中的数据成员和成员函数
c ++类成员函数 C ++中的数据成员和成员函数 (Data members and Member functions in C++) "Data Member" and &qu ...
- C++类成员函数在.cpp中设置成inline后无法解析的问题
内联函数:告知编译器在进行有内联标识的函数调用时将函数体部分在调用处展开.这样做可以消除函数传参(堆栈调用)的负担,提高了函数的调用效率. 而且inlining的函数并不存在,因为已经被展开了. 如果 ...
- java scanner类成员_Java Scanner类的使用示例
1 Scanner的使用 JDK给我们提供了成千上万个类供我们直接使用,而Scanner就是这众多类里的一个最常用的一个类,既然它是一个类,我们使用它的方法和使用我们自己写的类的方法基本一致. 方法基 ...
- 类成员的使用,模拟银行账户功能。属性:账号、储户姓名、地址、存款余额、最小余额;方法:存款、取款、查询。
根据用户操作 显示储户相关信息. 如存款操作后,显示储户原有余额.今日存款数额和最终存款余额: 取款时,若最后余额小于最小余额,拒绝取款,并显示"至少保留余额XXX". publi ...
最新文章
- LETTers比赛第三场 --1003 大明A+B解题报告
- Win64 驱动内核编程-28.枚举消息钩子
- linux的搜索和时间
- linux对目录进行操作,Linux 基础:对文件和目录进行操作的 Linux 和 Unix 命令 笔记...
- python目标识别代码_利用ImageAI库只需几行python代码超简实现目标检测
- 基于环信sdk的陌生人交友php服务器代码开源
- 读光OCR-文字识别技术解读与应用案例分析
- Spring系列(一):Spring的基本概念及其核心
- 2018年蓝桥杯C++B;乘积尾零(拆分法)
- Web服务及http协议_学习笔记
- 在Python中分词
- 广义线性模型(GLMs)及算法介绍
- VBA字典(详解,示例)
- 解决-手机通过Charles连接代理无法上网,亲测可用
- oel安装中文环境,Linux UTC,CST时间及修改时间
- 【012】基于51单片机的可燃气体报警装置proteus仿真与实物设计
- sql命令手册(转载)http://www.fanqiang.com
- 地下城堡游戏小脚本儿——自动炼金
- CVE 2013-2094 exploit 实验笔记
- 程序设计思维与实践 月模拟题3 Blog