C++复习笔记--继承和派生

-继承和派生

一继承(继承就是从先辈处得到属性和行为特征)

1 派生类的声明

class  派生类名∶[继承方式] 基类名

{

派生类新增的数据成员和成员函数

};

2 基类成员在派生类中的访问属性

3 派生类对基类成员的访问规则

1)内部访问 由派生类中新增的成员函数对基类继承来的成员的访问

2)对象访问 在派生类外部,通过派生类的对象对从基类继承来的成员的访问

3)

1. 私有继承的访问规则

2)公有继承的访问规则

.

3)保护继承的访问规则

4  派生类的构造函数和析构函数

1)

派生类构造函数和析构函数的执行顺 序

当创建派生类对象时:

基类的构造函数---派生类的构造函数;

当撤消派生类对象时:

派生类的析构函数---基类的析构函数。

注:当基类含有带参数的构造函数时,派生类必须定义构造函数,并缀上“:基类名(参数表) ”,以提供把参数传递给基类构造函数的途径。

派生类构造函数的一般格式为

派生类名(参数总表):基类名(参数表)

{

派生类新增成员的初始化语句

}

说明:  (1)可以将派生类构造函数定义在类的外部,而在类体内只写该函数的声明

(2) 若基类使用不带参数的构造函数或带缺省参数的构造函数,则在派生类中定义构造函数时可略去“∶基类(参数表)”;

(3)如果派生类的基类也是一个派生类,每个派生类只需负责其直接基类的构造,依次上溯

(4)    在执行派生类的析构函数时,系统会自动调用基类的析构函数,对基类的对象进行清理

问题:当派生类中含有对象成员时,其构造函数应该如何构造?

当派生类中含有对象成员时,其构造函数的一般形式为:

派生类名(参数总表):基类名(参数表0),对象名成员1(参数表1),…,对象成员名n (参数表n)

{

//派生类新增成员的初始化语句 ..

}

定义派生类对象时,构造函数的执行顺序如下:

·调用基类的构造函数;

·调用对象成员的构造函数;

·执行派生类的构造函数体。

撤消对象时,析构函数的调用顺序与构造函数的调用顺序正好相反。

.调用派生类的析构函数;

. 调用对象成员的析构函数;

. 调用基类的析构函数

5 调整基类成员在派生类中的访问属性的其他方法

1)同名成员(C++语言允许在派生类中说明的成员与基类中的成员名字相同)

为了在派生类中使用基类的同名成员,必须在该成员名之前加上基类名和作用域标  识符“::”,

? 能否使私有继承的派生类的对象访问基类的公有成员或保护成员

访问声明:

把基类的保护成员名或公有成员名直接写到私有派生类定义式中的同名段中,

同时在成员名前冠以“基类名∷”

例如:

#include<iostream.h>

class A{

int x;

public:

A(int x1){x=x1;}

void print( ){cout<<"x="<<x;} };

class B: private A{

int y;

public:

B(int x1,int y1):A(x1){y=y1;}

A::print; //访问声明

};

main( )

{ B b(10,20);

b.print( );

return 0;  }

说明:(1)访问声明中只能含不带类型和参数的函数名或变量名

(2) 数据成员也可以使用访问声明

(3) 访问声明不能改变类成员在基类中原来的性质

二 多继承与虚基类

1 多继承(当一个派生类具有多个基类时,这种派生方法称为多基派生或多继承)

多重继承声明的一般形式如下:

class 派生类名:继承方式1 基类名 1,…,        继承方式n 基类名n

{

派生类新增的数据成员和成员函数

};

2  多继承派生类的构造函数与析构函数

多继承构造函数定义的一般形式如下:

派生类名(参数总表):基类名1(参数表1),基类名2(参数表2),…,基类名n(参数表)

{

派生类新增成员的初始化语句

}

注:

多继承构造函数的执行顺序与单继承构造函数的执行顺序相同:

· 先执行基类的构造函数;

· 再执行对象成员的构造函数;

· 最后执行派生类构造函数。

析构函数的执行顺序则刚好与构造函数的执行顺序相反。

3 虚基类

1)作用

如果一个派生类是从多个基类派生出来的,而这些基类又有一个共同的基类,

则在这个派生类中访问这个共同的基类中的成员时,可能会产生二义性

所以引入虚基类 使从不同的路径继承的基类的成员在内存中只拥有一个拷贝

时间: 2024-11-05 12:24:57

C++复习笔记--继承和派生的相关文章

C++学习笔记44:继承与派生

类的组合,类的继承 类的组合(汽车类,轮子类,此时可以把轮子类组合到汽车类:) 类的继承(交通工具类,汽车类,此时汽车类可以派生自交通工具类:) 组合:常用描述has a.. 继承:常用描述is a .. 如果既可以用组合又可以用派生解决,那首选组合方式: 继承与派生的目的 继承的目的:实现设计和代码的重用 派生的目的:当新的问题出现,原有程序无法解决,需要对原有的程序进行改造 派生类的构成 吸收基类的成员 改造基类的成员 添加新的成员 吸收基类的成员 默认情况下派生类包含了全部的基类中除了构造

安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)

什么是ViewPager? 关于ViewPager的介绍和使用,在之前我写过一篇相关的文章<安卓开发复习笔记——ViewPager组件(仿微信引导界面)>,不清楚的朋友可以看看,这里就不再重复. 什么是Fragment? Fragment是Android3.0后新增的概念,Fragment名为碎片,不过却和Activity十分相似,具有自己的生命周期,它是用来描述一些行为或一部分用户界面在一个Activity中,我们可以合并多个Fragment在一个单独的activity中建立多个UI面板,或

[Java基础] Java线程复习笔记

先说说线程和进程,现代操作系统几乎无一例外地采用进程的概念,进程之间基本上可以认为是相互独立的,共享的资源非常少.线程可以认为是轻量级的进 程,充分地利用线程可以使得同一个进程中执行多种任务.Java是第一个在语言层面就支持线程操作的主流编程语言.和进程类似,线程也是各自独立的,有自 己的栈,自己的局部变量,自己的程序执行并行路径,但线程的独立性又没有进程那么强,它们共享内存,文件资源,以及其他进程层面的状态等.同一个进程内的 多个线程共享同样的内存空间,这也就意味着这些线程可以访问同样的变量和

安卓开发复习笔记——TabHost组件(实现底部菜单导航)

安卓开发复习笔记——TabHost组件(实现底部菜单导航) 4 来源:cnblog    阅读:1048   时间:2014-09-16 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先说一件事情,翻翻谷歌提供给我们的API,我们可以发现这样的一段话: 它告诉我们,这个组件在安卓4.0之后已经被废弃了,建议我们新的程序应该使用Fragment组件

2014年软考程序员-常考知识点复习笔记【第一章】

51CTO学院,在软考备考季特别整理了"2014年软考程序员-常考知识点复习笔记[汇总篇]",帮助各位学院顺利过关!更多软件水平考试辅导及试题,请关注51CTO学院-软考分类吧! 查看汇总:2014年软考程序员-常考知识点复习笔记[汇总篇]  常考基础知识必会 A. 排序:排序有几种,各种排序的比较,哪些排序是稳定的,快排的算法; B. 查找:哈希查找.二叉树查找.折半查找的对比,哈希映射和哈希表的区别? C. 链表和数组的区别,在什么情况下用链表什么情况下用数组? D. 栈和队列的区

0721-----C++Primer听课笔记----------继承

1. 通过子类对象来调用函数: a)从父类继承而来的函数,可以正常使用: b)子类自行添加的函数,可以正常使用: c)子类编写和父类重名的函数,不管是否改变了参数,调用的都是子类的版本,如果需要调用父类的版本,需要显示指定父类名. 例1: #include <iostream> #include <string> using namespace std; /* * 派生类对象可以正常的调用从基类继承的函数 */ class Person{ public: Person(){} Pe

程序设计实习MOOC / 继承和派生——编程作业 第五周程序填空题1

描述 写一个MyString 类,使得下面程序的输出结果是: 1. abcd-efgh-abcd- 2. abcd- 3. 4. abcd-efgh- 5. efgh- 6. c 7. abcd- 8. ijAl- 9. ijAl-mnop 10. qrst-abcd- 11. abcd-qrst-abcd- uvw xyz about big me take abcd qrst-abcd- 要 求:MyString类必须是从C++的标准类string类派生而来.提示1:如果将程序中所有 "My

C++继承与派生

2017-06-25 23:00:59 c++中的继承和派生是面向对象编程中的一个重要内容,通过继承可以实现代码的复用,同时继承也是实现多态性的基础. 一.c++继承的基本形式 class 派生类名:继承方式 基类名,继承方式 基类名 {}: 继承方式主要有三种,public ,private ,protected. 缺省条件下是private继承,三种中public继承用的最多,不同的继承方式决定了子类中从基类继承过来的成员的访问属性. public继承: 基类的public,protecte

四.OC基础--1.文档安装和方法重载,2.self和super&amp;static,3.继承和派生,4.实例变量修饰符 ,5.私有变量&amp;私有方法,6.description方法

四.OC基础--1.文档安装和方法重载, 1. 在线安装 xcode-> 系统偏好设置->DownLoads->Doucument->下载 2. 离线安装 百度xcode文档 3. 方法重载: 是指在一个类中定义多个同名的方法 在OC中没有重载 2.self和super&static, self和super: 1. self理解: 谁调用当前方法, self就代表谁. 比如: 在对象方法中,self代表的是对象, 因为只有对象才可以调用对象方法 在类方法中, self代表的