目录

  • 一、访问控制 (可见性控制)
    • 1.private、public、protected关键字
    • 2.关键字示例
      • 1、关键字对类数据成员访问的限制
    • 3. 公有继承
    • 4. 私有继承
    • 5. 保护继承
    • 6. 私有继承和保护继承的区别
  • 二、抽象类与纯虚函数
    • 1.什么是抽象类
    • 2.抽象函数/纯虚函数
    • 3.抽象类示例

一、访问控制 (可见性控制)

1.private、public、protected关键字

1、the private and public keywords:

1、说明数据及函数是否可以从类外面访问
2、私有成员只能在类内的函数访问
3、公有成员可被任何其他类访问

2、the **protected ** keywords:
护属性的数据或函数可被派生类成员访问

2.关键字示例

1、关键字对类数据成员访问的限制

#include <iostream>
using namespace std;
class A {public:       // 访问属性int i;
protected:int j;
private:int k;
};
class B: public A {        // 此public为派生方式
public:       // 访问属性void display() {cout << i << endl; // OK, can access icout << j << endl; // OK, can access jcout << k << endl; // Error! cannot access k}
};
int main() {A a;cout << a.i << endl; // OK, can access a.icout << a.j << endl; // Error, cannot access a.jcout << a.k << endl; // Error, cannot access a.k
}

3. 公有继承

公有继承的派生类定义形式:

class Derived:public Base{ 派生类新成员定义; };

(1) 基类成员 在派生类中的访问属性不变。
(2) 派生类的成员函数 可以访问基类的公有成员和保护成员,不能访问基类的私有成员;
(3) 派生类以外的其它函数 可以通过派生类的对象,访问从基类继承的公有成员, 但不能访问从基类继承的保护成员和私有成员。

4. 私有继承

私有继承的派生类定义形式:
class Derived:private Base{ 派生类新成员定义; };

(1) 基类成员 在派生类中都变成== private==。
(2) 派生类的成员函数 可以访问基类的公有成员和保护成员,不能访问基类的私有成员;
(3) 派生类以外的其它函数 不能通过派生类的对象,访问从基类继承的任何成员。

5. 保护继承

保护继承的派生类定义形式:
class Derived:protected Base{ 派生类新成员定义; };

(1) 基类成员 公有成员和保护成员变成protected,私有成员不变。
(2) 派生类的成员函数 可以访问基类的公有成员和保护成员,不能访问基类的私有成员;
(3) 派生类以外的其它函数 不能通过派生类的对象,访问从基类继承的任何成员。

6. 私有继承和保护继承的区别

二、抽象类与纯虚函数

1.什么是抽象类

类太抽象以至于无法实例化就叫做抽象类。

2.抽象函数/纯虚函数

从继承链上来看:
1、派生类时,新类会越来越明确和具体
2、沿着派生类向父类移动,类会越来越一般化和抽象
3、如果我们沿着继承链一直往上找,遇到了一个类,这个类十分抽象以至于无法实例化,那么我们称这个类为抽象类。
成员函数应出现在哪个继承层次?
假设有个Shape类,它有两个派生类:rectangle、circle
rectangle、circle都可以求面积,都有一个getArea()函数。
对于getArea()函数的放置,我们有两个选择:

1、放哪儿都行,既可以放在基类Shape也可以放在子类中定义
2、Shape类定义中getArea()函数,并且强制要求Shape的子类必须实现getArea()

对于第二种方法,怎么实现强制要求呢?C++给出了抽象函数的概念:
抽象函数(abstract function) 也被称为纯虚函数(pure virtual function)
抽象函数要求子类实现它:

virtual double getArea() =0 ; //在Shape类中,注意这里不是大括号,而是替换为=0,纯虚函数的“纯”就体现于此

Circle子类必须实现getArea()纯虚函数才能实例化。

子类从基类将纯虚函数继承过来,如果不进行重新实现这个函数,那么此时的子类也将是一个抽象类,不能实例化。
并且要在函数后面加上override,表明是对抽象函数的覆写。

注意:纯虚函数不需要定义函数体也不能定义函数体

3.抽象类示例

【C++grammar】访问控制与抽象类与纯虚函数相关推荐

  1. C++中的抽象类及纯虚函数的实现与否

    1.含有纯虚函数的叫抽象类 2.抽象类(一般是基类)中的纯虚函数无论函数体实现与否,都没有关系,系统会自动忽略 3.继承自抽象类的子类,必须要实现父类的纯虚函数才可以实例化对象 4.抽象类不允许实例化 ...

  2. C++编程练习:多态实验——利用抽象类和纯虚函数,编程计算正方体、球体和圆柱体的表面积和体积。

    例.要求利用抽象类和纯虚函数,编程设计一个程序计算正方体.球体和圆柱体的表面积和体积,具体要求如下: 1.设计一个抽象类为公共基类 : 2.设计成员函数source_area( ),求表面积: 3.设 ...

  3. 抽象类(纯虚函数、虚函数)和虚基类(虚继承)

    C++多态 C++的多态包括静态多态和动态多态,静态多态包括函数重载和泛型编程,动态多态包括虚函数.静态多态实在编译期间就能确定,动态多态实直在程序运行时才能确定. 抽象类 虚函数 在默认情况下对函数 ...

  4. 项目3抽象类与纯虚函数

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 6 月 2 日 * 版 本 号:v1. ...

  5. 【C++】多态(早期绑定、后期绑定)、抽象类(纯虚函数)、虚析构函数

    我们都知道面向对象编程的三大特征是封装.继承.多态,今天我们就来说一下其中之一的多态. 概念: 多态: 多态字面意思就是多种形态,C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同 ...

  6. C++之纯虚函数和抽象类

    纯虚函数和抽象类 1.基本概念 2.案例 #include <iostream> using namespace std;////面向抽象类编程(面向一套预先定义好的接口编程)//解耦合 ...

  7. c++远征之多态篇——纯虚函数和抽象类、接口类

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 1.纯虚函数 没有函数体: =0: 即只有函数声明,而没有函数定义的虚函数,是纯虚函数. 2.抽象类 概念:含有纯虚函数的类,叫抽象类. 抽象类无 ...

  8. 【C++】C++类的学习(五)——纯虚函数与抽象类

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 在前面的博客中讲到了虚函数,今天讲述一种特别的虚函数--纯虚函数,以及与之相关的抽象类 ...

  9. C++ 虚函数,纯虚函数,抽象类整理

    抽象类,类中包含纯虚函数的为抽象类,其中抽象类的子类必须实现抽象类的纯虚函数方法. 抽象类无法实例化 虚函数,子类可以实现或者不实现该方法都可以 如果父类调用子类的基类指针时,有虚函数的则使用子类的实 ...

最新文章

  1. 安卓图表引擎AChartEngine(一) - 简介
  2. before vue路由钩子_vue组件级路由钩子函数介绍,及实际应用
  3. JQuery图表插件Highcharts示例教程
  4. [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...
  5. 洛谷P2158 [SDOI2008]仪仗队
  6. SDUT - 2604 Thrall’s Dream(tarjan+拓扑)
  7. fluidity详解
  8. android基于蓝牙实验,基于Android智能蓝牙的血糖实时监测系统的设计与实现
  9. 违反GPL协议,法院判罚了!国内首例
  10. 用C做的电子时钟程序
  11. 利用vSAN Performance Monitor可视化监控vSAN性能指标
  12. Mac新手使用技巧——AirDrop
  13. VC2012安装Opengl开发环境
  14. 三相短路电流计算机算法的原理什么,第三章电力系统三相短路电流及实用计算.ppt...
  15. Automatically assigning platform `iOS` with version `8.0` on target `Runner`
  16. mac 查看端口_交换机端口对应的mac地址与IP地址
  17. 【C++】register 关键字
  18. 嵌入式典型ARM处理器介绍以及分类
  19. 【渝粤教育】 国家开放大学2020年春季 1459公共卫生伦理 参考试题
  20. 抚仙湖,一个亦梦亦幻的地方,这个五一节,我们骑友′的诗和远方

热门文章

  1. html5拖动的面板 panel,基于jQuery UI的Bootstrap Panel面板功能增强插件
  2. java中菜单分几级_JavaWeb三级菜单分类查询详解
  3. python鼠标选中事件_python对绑定事件的鼠标、按键的判断实例
  4. sql显示前10行数据_SPL 简化 SQL 案例详解:计算各组前 N 行
  5. angular使用sass的scss语法
  6. 静态页面如何实现 include 引入公用代码
  7. 前端程序员容易忽视的一些基础知识
  8. vue+elementUI 添加多个可以全选的多选框
  9. Spark2.3(三十五)Spark Structured Streaming源代码剖析(从CSDN和Github中看到别人分析的源代码的文章值得收藏)...
  10. 单元测试中Assert类的用法