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

目录

  • 一、访问控制 (可见性控制)
    • 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.抽象类示例

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377709.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb 如何删除 字段值为 json对象中的某个字段值

例如&#xff1a; { attributes: { birthday:1988-01-01, name: aq } } birthday是attributes字段的value的一个字段&#xff0c; 我要删除birthday 用这句话&#xff1a; db.User.update({email:adminlinkris.com},{$unset:{attributes.birthday:}})转载于:https://www.cnblog…

使用 Spring 的 Web 服务模拟器框架解决方案

http://www.ibm.com/developerworks/cn/web/wa-aj-simulator/index.html转载于:https://www.cnblogs.com/diyunpeng/archive/2012/02/28/2371390.html

三、上传织物图片至SQL Server并提供name进行展示织物照片

一、数据库的建立 还是在fiber_yy数据库下创建images表 images表设计如下 二、页面完善设计 main_page页面进行功能完善 入库管理系统 warehousing页面 库存查询系统 query页面 登录注册页面前面几个博文已经实现过了&#xff0c;这里就再赘述了&#xff0c;仍是沿用前…

gettype_PHP gettype()函数与示例

gettypePHP gettype()函数 (PHP gettype() function) In PHP, we have a library function gettype() to identify the type of data. The function is primarily used to sanity check the type of data being input in a variable. The function can identify the data into …

ARM MMU工作原理剖析[转]

一、MMU的产生 许多年以前&#xff0c;当人们还在使用DOS或是更古老的操作系统的时候&#xff0c;计算机的内存还非常小&#xff0c;一般都是以K为单位进行计算&#xff0c;相应的&#xff0c;当时的程序规模也不大&#xff0c;所以内存容量虽然小&#xff0c;但还是可以容纳当…

栈与队列在SGI STL的底层实现

栈 栈提供push和pop等接口&#xff0c;不提供走访功能&#xff0c;也不提供迭代器。 STL中栈不被归类为容器&#xff0c;而被归类为container adapter(容器适配器)&#xff0c;这是因为栈是以底层容器完成其所有的工作&#xff0c;对外提供统一的接口&#xff0c;底层容器是可…

【原创】SharePoint Document library List Check out 文档时碰到的问题解决

环境&#xff1a;TFS(Team Foundation Server)集成的WSS 3.0&#xff08;SharePoint Service 3.0&#xff09; 问题&#xff1a;如题&#xff0c;祥见下图 解决&#xff1a;一般碰到没有经验的问题&#xff0c;大家当然是外事不决问谷歌了&#xff0c;于是谷歌搜到了这篇博客 h…

getdate函数_PHP getdate()函数与示例

getdate函数PHP getdate()函数 (PHP getdate() function) getdate() function is used to get the local date/time (or it is also used to get the date/time based on the given timestamp. getdate()函数用于获取本地日期/时间(或也用于根据给定的时间戳获取日期/时间。 S…

四、入库管理功能的完善

一、数据库的创建 在fiber_yy数据库下创建yy_textile表 先随便添加几条数据 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 warehousing入库页面 main_page页面进行功能完善 三、代码实现 warehousing页面 using System; using System.…

leetcode 232. 用栈实现队列 思考分析

题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek() 返…

YCSB初步介绍

随着大数据时代的到来和云计算的不断发展&#xff0c;作为云计算最基础的设施存储产品也越来越多&#xff0c;开源分布式存储系统有BigTable-like系统HBase&#xff0c;dynamo-like系统Cassandra&#xff0c;voldemort&#xff0c;Riak&#xff0c;淘宝开源的OceanBase等。当然…

kotlin实现继承_Kotlin程序| 继承的例子

kotlin实现继承遗产 (Inheritance) Inheritance is a mechanism wherein a new class is derived from an existing class. 继承是一种机制&#xff0c;其中新类是从现有类派生的。 All Kotlin Classes have a common Superclass Any, it is the Default Superclass with no S…

【C++grammar】动态类型转换、typeid与RTTI

目录动态类型转换1、为何需要动态类型转换2、dynamic_cast<>();运算符3、向上转换和向下转换( Upcasting and Downcasting)4、 基类对象和派生类对象的互操作5、Upcasting/Downcasting与继承链上不同类的对象之间的赋值有什么关系和区别&#xff1f;typeid 运行时查询类型…

nginx资源定向 css js路径问题

今天玩玩项目&#xff0c;学学nginx发现还不错&#xff0c;速度还可以&#xff0c;但是CSS JS确无法使用&#xff0c;原来Iginx配置时需要对不同类型的文件配置规则&#xff0c;真是很郁闷&#xff0c;不过想想也还是很有道理。闲暇之际&#xff0c;把配置贴上来。#user nobody…

五、库存查询功能的完善

一、数据库的建立 由于查询功能和之前的 入库管理功能 所用的数据库都一样&#xff0c;这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 query查询页面 main_page…

整合ajaxmin 和 less 到VS.net

我用的前端框架是bootstrap_extra, twitter团队做的&#xff0c;这个是他的一个扩展&#xff0c;首先从上面下载一个。至于ajaxmin&#xff0c;请参考这里1) 从bootstrap_extra的解压包中&#xff0c;复制build目录下三个文件到项目中去&#xff0c;这三个文件分别是BatchSubsi…

转:只能选择GridView中的一个CheckBox(单选CheckBox)

方法1&#xff1a; protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e){CheckBox cbx e.Row.FindControl("cbID") as CheckBox;try{//绑定选中CheckBox 客户端IDcbx.Attributes.Add("onclick", "Change(" cbx.Cli…

六、出库管理功能的实现

一、数据库的建立 这里仍使用yy_textile表 在fiber_yy数据库下创建yy_textile表 初始数据库信息 二、页面的完善 登录注册页面我就不演示了&#xff0c;前几篇博文也都有介绍 shipment出库管理页面 main_page页面进行功能完善 三、代码实现 shipment出库管理页面 u…

数学建模:层次分析法实例以及代码

博主联系方式&#xff1a; QQ:1540984562 QQ交流群&#xff1a;892023501 群里会有往届的smarters和电赛选手&#xff0c;群里也会不时分享一些有用的资料&#xff0c;有问题可以在群里多问问。 目录层次分析法的思想层次分析法步骤具体案例(市政工程项目建设决策)1.问题提出2.…

c 僵尸进程_演示僵尸进程的C程序

c 僵尸进程僵尸进程 (Zombie process) A process which has finished its execution but still has an entry in the process table to report to its parent process is known as a zombie process. 一个已经完成执行但仍在进程表中具有要报告给其父进程的条目的进程称为僵尸进…