c++——派生类和基类转换(类型兼容性原则)
基类也叫父类,派生类也叫子类。
类之间的继承关系
继承关系是类之间的父子关系。 继承关系的特点如下:
A、 子类拥有父类的所有属性和行为
B、 子类也是一种特殊的父类
C、 子类对象可以当父类对象使用
D、 子类中可以添加父类没有的属性和方法
E、 子类对象可以直接初始化父类对象
F、 子类对象可以直接赋值给父类对象
G、 继承是面向对象编程中代码复用的重要手段
H、父类指针可以直接指向子类对象
I、父类引用可以直接引用子类对象
在 C++编程中, 软件可重用性(software reusability)是通过继承(inheritance)机
制来实现的。 类的继承, 是新的类从已有类得到已有的特性。 从已有类产生新类
的过程就是类的派生。原有的类称为基类或父类, 产生的新类称为派生类或子类。
继承是一种封装模型之间关系的抽象, 是不同封装模型的层次分类。
如果一个派生类同时有多个基类, 称为多重继承; 如果派生类只有一个基类,称为单继承。
使用 class 关键字定义派生类时, 默认继承方式为 private。
使用 struct 关键字定义派生类时, 默认继承方式为 public。
C++工程项目中, 通常只使用 public 继承方式。
派生类中的成员包含两大部分, 一类是从基类继承过来的, 一类是自己增加
的成员。 从基类继承的成员表现其共性, 而新增的成员体现其个性。
派生类中由基类继承而来的成员的初始化工作还是由基类的构造函数完成,
然后派生类中新增的成员在派生类的构造函数中初始化。 派生类没有继承基类的
构造函数和析构函数。
派生类经常(但不总是)覆盖它继承的虚函数。如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其他的普通成员,派生类会直接继承其在基类中的版本。
c++11允许派生类显式地注明它使用某个成员函数覆盖了它继承的虚函数。具体做法是在形参列表后面、或者在const成员函数的const关键字后面、或者在引用成员函数的引用限定符后面添加一个关键字override。
派生类也必须使用基类的构造函数来初始化它的基类部分。(除非基类没有显式定义构造函数,这样在派生类的构造函数中可以不显式调用基类的构造函数)
我们可以把公共派生类当做基类使用,派生类可以赋值给基类,基类的引用或者指针可以绑定到派生类上(反之不行)。
遵循基类的接口:
尽管在语法上来说我们可以在派生类构造函数体内给它的共有或者受保护的基类成员赋值,但是最好不要这么做。和使用基类的其他场合一样,派生类应该遵循基类的接口,并通过调用基类的构造函数来初始化那些从基类中继承而来的成员。
如果基类定义了一个静态成员,则在整个继承体系中只存在该成员的唯一定义。不论基类中派生出来多少个派生类,对于每个静态成员都只存在唯一的实例。静态成员也要遵循通用的访问控制规则,public,private,protected。
如果我们想要将某个类用作基类,则该类必须是已经定义了的而不能仅仅声明。这意味着,一个类不能派生它本身。
有时候我们会定义这样一种类,我们不希望其他类继承它,或者不想考虑它是否适合作为一个基类,为了实现这一目的,c++11提供了一种防止继承发生的方法,即在类名后跟一个关键字final。我们还能把某个函数指定为final,则之后任何尝试覆盖该函数的操作都将引发错误。
eg:
class A final { ....};//A不能作为基类

当我们用一个派生类对象为一个基类对象初始化或者赋值时,只有该派生类对象中的基类部分会被拷贝、移动或赋值,它的派生部分会被忽略掉。
如果表达式既不是指针也不是引用,那么它的动态类型永远与静态类型一致,如果是指针或者引用,将产生动态绑定,动态类型直到运行时才可知,而静态类型在编译时就总是已知的。
c++——派生类和基类转换(类型兼容性原则)的更多相关文章
- c++ 派生类向基类转换的可访问性
对于c++面向对象一直很疑惑,这次决定下功夫把它弄明白 一.派生类和基类之间的类型转换 首先理解,派生类含有基类的所有成分,只不过有些就算在派生类的成员函数也不能访问而已. (1)派生类和基类的自动转 ...
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
一.不能自动继承的成员函数 构造函数 析构函数 =运算符 二.继承与构造函数 基类的构造函数不被继承,派生类中需要声明自己的构造函数. 声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类 ...
- C++ 派生类到基类转换的可访问性
今天看c++ primer关于派生类到基类转换的可访问性,看的很晕,看了下面的文章恍然大悟: http://www.2cto.com/kf/201403/283389.html C++ primer第 ...
- c++ primer 学习杂记2【派生类到基类转换的可访问性】
参考: http://blog.csdn.net/rehongchen/article/details/7930853 http://blog.csdn.net/ming_road/article/d ...
- C++_派生类的构造函数及派生类和基类之间的特殊关系
派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...
- C#中派生类调用基类构造函数用法分析
这里的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1.当基类中没有自己编写构造函数时,派生类默认的调用基类的默认构造函数例如: ? 1 2 3 4 5 6 7 8 9 10 11 ...
- 转 关于C#中派生类调用基类构造函数的理解
关于C#中派生类调用基类构造函数的理解 .c#class 本文中的默认构造函数是指在没有编写构造函数的情况下系统默认的无参构造函数 1. 当基类中没有自己编写构造函数时,派生类默认的调用 ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
- C# 派生和继承(派生类与基类)
using System; using System.Collections.Generic; using System.Text; namespace 继承 { class Program { st ...
随机推荐
- eclipse 如何运行mavenWeb项目
1.使用maven 首先,在eclipse中,使用maven对项目进行打包: 其次,将项目发布到Tomcat服务器上 说明: demo_WebService2-0.0.1-SNAPSHOT文件夹存 ...
- logging日志管理--将日志打印在屏幕上
# -*- coding: cp936 -*- # test.py #http://blog.chinaunix.net/uid-27571599-id-3492860.html #logging日志 ...
- openfire + spark 展示组织机构(客户端)
在spark 加一个插件用于展示组织机构, 参考了好多人的代码 插件主类增加一个 TAB用于展示机构树 package com.salesoa.orgtree; import java.net.URL ...
- java内存泄露问题
内存泄露是指一个不再被程序使用的对象或变量还在内存中占用存储空间. 在Java语言中,判断一个内存空间是否符合垃圾回收的标准有两个: ①给对象赋予了空值null,以后再没有使用过: ②给对象赋予了新值 ...
- Maven 向私服nexus上传jar
1. 单个jar上上传 方法一:利用界面(省略) 方法二:利用命令行: 1). 安装到本地库:mvn install:install-file -DgroupId=org.apache.hadoop ...
- HDUOJ----2489 Minimal Ratio Tree
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDUOJ-----2824The Euler function
The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 给你出道题:依次去掉离中心最远的M个点
给定一个数组a[N],里面包含N个向量.现在要求进行删点操作,删点原则如下: 1.求出N个向量的中心O1,删除离O1最远的那个点 2.求出N-1个向量的中心O2,删除O2最远的那个点 ...... 重 ...
- 在python中使用静态方法staticmethod
静态方法: 静态方法是类中的函数,不需要实例.静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作.可以理解为将静态方法存在 ...
- Hadoop命令手册
原文地址:http://hadoop.apache.org/docs/r1.0.4/cn/commands_manual.html 概述 常规选项 用户命令 archive distcp fs fsc ...