3.1 C++继承的概念及语法
参考:http://www.weixueyuan.net/view/6358.html、
总结:
继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程。
被继承的类称为父类或基类,继承的类称为子类或派生类。
由于派生类可以将基类的代码继承过来,无需重新设计,因而继承解决了代码重用的问题,大大提高了软件的开发效率
采用公用继承方式,则基类的公有成员变量和成员函数的属性继承到派生类后不发生变化。
如果在继承过程中不指名继承方式时,编译器系统会默认继承方式为private或protected属性。
虽然我们可以继承到book类的私有成员,但是book类的私有成员变量在派生类中我们是无法直接访问的,只能通过间接的方式访问。
-----------------------------------
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似。
继承可以理解为一个类从另一个类获取方法(函数)和属性(成员变量)的过程。如果类B继承于类A,那么B就拥有A的方法和属性。被继承的类称为父类或基类,继承的类称为子类或派生类。
在上一章中我们例举了不少book类相关的示例,book类中有两个成员变量:title和price,即书的名字和价格。如果此时我们要按照编程语言将这些书进行分类,此时我们需要第三个成员变量language,这个时候我们没有必要重新设计一个全新的类,只需要在book类的基础上加上language属性及其相关的方法即可。
此时就可以将我们需要的codingbook类继承book类就可以得到book类的成员变量及成员函数,继承后在添加需要的language属性和相关的方法。新类codingbook叫做book类的派生类或子类,而原有的book类则称为基类。派生类codingbook除了能够拥有基类book的所有数据成员和成员函数之外,还可以拥有基类没有的language成员变量及其相关成员函数。
由于派生类可以将基类的代码继承过来,无需重新设计,因而继承解决了代码重用的问题,大大提高了软件的开发效率。同时如果这些代码在基类中运行无误,则继承之后到派生类中运行也是不会有问题的。
继承并非只能进行一层,可以是任意层次的。比如codingbook继承自book类,如果我们需要对codingbook类继续添加某一新属性时,同样可以设计一个类继承自codingbook类。
从book类中派生出codingbook类的语法如下例所示。
例1:
enum language{cpp, java, python,javascript, php, ruby}; class book
{
public:
void setprice(double a);
double getprice()const;
void settitle(char* a);
char * gettitle()const;
void display();
private:
double price;
char * title;
}; class codingbook: public book
{
public :
void setlang(language lang);
language getlang(){return lang;}
private:
language lang;
};
为了方便起见,我们先在类定义前声明了一个全局的枚举类型language,用于表示编程语言。book类我们已经很熟悉了,关键是codingbook类的定义。在定义codingbook类时多出了“: public book”,除此之外codingbook类的定义和上一章介绍的类定义方法没有什么差别。其中关键字public指明继承方式属于公有继承,book为被继承的类名。采用公用继承方式,则基类的公有成员变量和成员函数的属性继承到派生类后不发生变化。例如book类的公有的setprice和settitle成员函数继承到codingbook类后,这两个成员变量的属性仍将是public属性。如果在继承过程中不指名继承方式时,编译器系统会默认继承方式为private或protected属性。
在本例中因为已经定义过一个book类,具有book类的基本属性:书名和书的价格。现在需要一个新的类codingbook来描述编程类书籍,为此我们继承book类中的所有成员及成员函数,并新增language属性及相应的操作函数。虽然我们可以继承到book类的私有成员,但是book类的私有成员变量在派生类中我们是无法直接访问的,只能通过间接的方式访问。间接访问则是通过getprice、gettitle、setprice和settitle函数来实现的,因为这些函数在派生类中是public属性的。如下表所示为codingbook类中的所有成员的一览。
codingbook类成员 | 成员属性 | 来源 |
---|---|---|
price | 不可访问 | 继承自book类 |
title | 不可访问 | 继承自book类 |
lang | private | codingbook新增 |
setprice | public | 继承自book类 |
settitle | public | 继承自book类 |
getprice | public | 继承自book类 |
gettitle | public | 继承自book类 |
dispaly | public | 继承自book类 |
setlang | public | codingbook新增 |
getlang | public | codingbook新增 |
3.1 C++继承的概念及语法的更多相关文章
- C++学习14 继承的概念及语法
继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程.例如类B继承于 ...
- C#中区别多态、重载、重写的概念和语法结构
C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...
- C++虚继承的概念[转]
C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类.这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数 ...
- C++虚继承的概念(转)
http://blog.csdn.net/wangxingbao4227/article/details/6772579 C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同 ...
- JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- 学习 JavaScript (三)核心概念:语法、变量、数据类型
JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,这篇文章主要讲解的是前面三个,后面三个下一篇文章再讲解. 01 语法 熟悉 JavaScript 历史的人应该都知道 ...
- net必问的面试题系列之基本概念和语法
上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉. 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系 ...
- XML的基础之一(概念和语法)
XML的基础(概念和语法) xml html 概念 异同 XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...
- linux设备树笔记__dts基本概念及语法【转】
转自:http://www.360doc.com/content/15/1113/11/15700426_512794532.shtml 设备树手册(Device Tree Usage)原文地址:ht ...
随机推荐
- computational biology | Bioinformatician | 开发者指南
对自己的定位要明确,不要定义为码农,我是computational biologist. 入了这一行就不要三心二意,这基本注定你未来10年都在干这个,就算要转行也要先把这个做好.其实大多数人最喜欢的肯 ...
- English trip EM2-PE-1B Teacher:Patirck
PE = 演讲课 课上内容(Lesson) How are you today? 你今天怎么样? What is your name? 你的名字叫什么? What do you come from ...
- Apache Hadoop Operations at Scale
book: Hadoop Operations,A Guide for Developers and Administrators Apache Hadoop Operations at Scale ...
- linux下网络查看命令ss
ss命令 ss命令用来显示处于活动状态的套接字信息.可以显示和netstat类似的内容,并且可以显示更详细的信息,而且查看速度更快. 格式 ss [options] [ FILTER ] 选项 -h: ...
- Python安装第三方库,报错超时: Read timed out.
1.安装beautifulsoup4 >pip install beautifulsoup4 报错超时: Read timed out. 2.解决办法:pip --default-timeout ...
- 『MXNet』第八弹_数据处理API_上
一.Gluon数据加载 下面的两个dataset处理类一般会成对出现,两个都可做预处理,但是由于后面还可能用到原始图片,.ImageFolderDataset不加预处理的话可以满足,所以建议在.Dat ...
- Oracle RAC管理及维护命令详解
Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrcheck,ocrdump,ocrconfig 应用层:sr ...
- CURD插件(仿Django-admin版)
前言 如何提升自己的开发效率? 每个新项目都是自己经做过的项目(经验所致),在项目开发过程中不断总结.封装属于自己的组件, 例如:每个web项目大部分都涉及增删改查,分页显示,搜素,CRM就是这样的组 ...
- ActiveMQ producer 提交事务时突然宕机,会发生什么
producer 在提交事务时,发生宕机,commit 的命令没有发送到 broker,这时会发生什么? ActiveMQ 开启事务发送消息的步骤: session.getTransactionCon ...
- Spring Boot整合@Scheduled定时计划
原文地址:https://blog.csdn.net/justry_deng/article/details/80666508 修改部分: SpringBoot集成了@Scheduled的相关依赖(o ...