参考: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++继承的概念及语法的更多相关文章

  1. C++学习14 继承的概念及语法

    继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承(例如儿子继承父亲财产)类似. 继承(Inheritance)可以理解为一个类从另一个类获取成员变量和成员函数的过程.例如类B继承于 ...

  2. C#中区别多态、重载、重写的概念和语法结构

    C#中区别多态.重载.重写的概念和语法结构 重写是指重写基类的方法,在基类中的方法必须有修饰符virtual,而在子类的方法中必须指明override. 格式: 基类中: public virtual ...

  3. C++虚继承的概念[转]

    C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题,将共同基类设置为虚基类.这时从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数 ...

  4. C++虚继承的概念(转)

    http://blog.csdn.net/wangxingbao4227/article/details/6772579 C++中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同 ...

  5. JavaSE 基础知识(常识概念 + 基础语法)问答总结/面试题 —— 讲给应届生的 Java 开源知识项目

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  6. 学习 JavaScript (三)核心概念:语法、变量、数据类型

    JavaScript 的核心概念主要由语法.变量.数据类型.操作符.语句.函数组成,这篇文章主要讲解的是前面三个,后面三个下一篇文章再讲解. 01 语法 熟悉 JavaScript 历史的人应该都知道 ...

  7. net必问的面试题系列之基本概念和语法

    上个月离职了,这几天整理了一些常见的面试题,整理成一个系列给大家分享一下,机会是给有准备的人,面试造火箭,工作拧螺丝,不慌,共勉. 1.net必问的面试题系列之基本概念和语法 2.net必问的面试题系 ...

  8. XML的基础之一(概念和语法)

    XML的基础(概念和语法) xml html 概念 异同  XML全称为extensible markup language,即可扩展标记语言,简单理解为可预定义标签的编程语言.它与HTML(超文本标 ...

  9. linux设备树笔记__dts基本概念及语法【转】

    转自:http://www.360doc.com/content/15/1113/11/15700426_512794532.shtml 设备树手册(Device Tree Usage)原文地址:ht ...

随机推荐

  1. 20165327 2017-2018-2 《Java程序设计》第4周学习总结

    20165327 2017-2018-2 <Java程序设计>第4周学习总结 教材内容总结 第五章 继承是一种由已有的类创建新类的机制. class 子类名 extends 父类名{ - ...

  2. Scrapy - CrawlSpider爬虫

    crawlSpider 爬虫 思路: 从response中提取满足某个条件的url地址,发送给引擎,同时能够指定callback函数. 1. 创建项目 scrapy startproject mysp ...

  3. Stark组件 (一)

    Stark组件构建 1.启动所有app下的stark.py文件,的配置实现步骤 1.创建一个Django项目crm,并创建  app1 ,app2, stark 三个app 2.在crm 项目的set ...

  4. Vue音乐项目笔记(五)

    1.搜索列表的点击删除.删除全部的交互事件 https://blog.csdn.net/weixin_40814356/article/details/80496097 seach组件中放search ...

  5. 『TensorFlow』SSD源码学习_其八:网络训练

    Fork版本项目地址:SSD 作者使用了分布式训练的写法,这使得训练部分代码异常臃肿,我给出了部分注释.我对于多机分布式并不很熟,而且不是重点,所以不过多介绍,简单的给出一点训练中作者的优化手段,包含 ...

  6. element中使用button会刷新一遍页面

     会刷新:   <el-form-item> <button @click="register('form')" class="submitBtn&qu ...

  7. js动态修改title

    问题描述: 由于微信浏览器只在页面首次加载时初始化了标题title,之后就没有再监听 window.title的change事件.所以这里修改了title后,立即创建一个请求,加载一个空的iframe ...

  8. ubuntu 安装国际qq

    下载地址::http://pan.baidu.com/s/1nt1Nu6P 解压后,输入终端:suao dpkg -i 解压的文件名称.deb 如果你前面安装过qq,你可以输入sudo dpkg -P ...

  9. OpenStack设计与实现5——RESTful API和WSGI

    转https://segmentfault.com/a/1190000004361778 Tips:文章为拜读@xingjiarong 后有感而做的分享,先对作者表示感谢,附原文地址:http://b ...

  10. [已解决]Can't update: no tracked branch

    报错:Can't update: no tracked branch 我们之前的分支是drome,然后删除了这个分支,换到了另一个分支上面去了,所以出现了这个问题. 解决办法: 0:点击VCS-> ...