c++第四次作业:继承
继承与派生
基本概念和语法
概念
- 继承与派生是同一过程从不同角度看
保持已有的特性而构造新类的过程称为继承。
在已有类的基础上新增自己的特性而产生新类的过程为派生。 - 被继承的已有类称为基类(父类)
- 派生出的新类称为派生类(或子类)
- 直接参与派生出某类的基类称为直接基类。
- 基类的基类甚至更高的基类称为间接基类。
定义
语法:
单继承:
class 派生类名:继承方式 基类名{
成员声明;
}
多继承:
class 派生类名:继承方式1 基类名,继承方式2 基类名2,...
{
成员声明;
}
派生类的构成
- 吸收基类成员
- 改造基类的成员
- 添加新的成员
吸收:吸收基类成员:包含了全部基类中除构造和析构函数之外的所以成员,但可以用using语句继承基类构造函数
改造:若派生类中有和基类中同名的函数时,基类的会被覆盖
添加:添加新功能和数据
继承方式
不同继承方式的影响体现在:
- 派生类成员对基类成员的访问权限
- 通过派生类对象对基类成员的访问权限

举例:
using namespace std;
class Point{
public:
void initP(float xx,float yy)
{
x=xx;
y=yy;
}
void Move(float xOff,float yOff){
x+=xOff;
y+=yOff;
}
float GetX()const{return x;}
float GetY()const{return y;}
private:
float x,y;
};
class Rectangle:public Point{
public:
void initRectangle(float x,float y,float w,float h){
initP(x,y);
this->w=w;
this->h=h;
}
float GetH(){return h;}
float GetW(){return w;}
private:
float w,h;
};
int main(){
Rectangle a;
a.initRectangle(1,2,3,4);
a.Move(1,2);
cout<<a.GetX()<<endl;
cout<<a.GetY()<<endl;
cout<<a.GetW()<<endl;
cout<<a.GetH()<<endl;
return 0;
}

可以看出,声明的rectangle对象可以调用父类Point的成员
私有继承和保护继承
- 私有继承:
私有继承,继承过来的父类的public只能在类内调用,但是不能被对象直接调用,私有继承的父类的公有成员为派生类的私有成员


由图中可见,只能在类中调用私有继承,不能直接调用。
- 保护继承
对建立其所在类对象的模块来说,它与private成员的性质相同。
对于其派生来说,它与父类public成员的性质相同。

其中的x相当于A类中的私有成员

作为B的父类时,又相当于A类中的公有成员
既实现了数据的隐藏,又方便继承,实现代码重用。
最后举个多继承的例子:
#include<iostream>
using namespace std;
class A{
public:
void setA(int aa){
a = aa;
}
void showA()const{
cout<<a<<endl;
}
private:
int a;
};
class B{
public:
void setB(int bb){
b = bb;
}
void showB()const{
cout<<b<<endl;
}
private:
int b;
};
class C:public A,private B{
public:
void setC(int a,int b,int c){
setA(a);
setB(b);
this->c = c;
}
showC()const{
cout<<c<<endl;
}
private:
int c;
};
int main(){
C test;
test.setA(5);
test.showA();
test.setC(6,7,9);
test.showC();
test.setB(6);
}

可以看到,test.setA和setC是可以调用的,public成员可以直接在对象上调用,而私有成员只能在类内的成员中调用,不能被对象直接调用。
c++第四次作业:继承的更多相关文章
- C++第四次作业--继承与派生
C++ 继承 面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行效率的效果. 当创建一个类时 ...
- C++ 第四次作业 继承
继承 继承时从新的类从已有类那里得到新的特征.继承实现了代码的重用,极大地减少了代码量,同时通过新增成员,加入了自身的独有特性,达到了程序的扩充. 派生类继承了基类的全部数据类和除了构造函数.析构函数 ...
- Java第四次作业——面向对象高级特性(继承和多态)
Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...
- Java第四次作业,面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- Java第四次作业—面向对象高级特性(继承和多态)
Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...
- C#基础第四天-作业答案-Hashtable-list<KeyValuePair>泛型实现名片
.Hashtable 实现 Hashtable table = new Hashtable(); while (true) { Console.WriteLine("------------ ...
- C#基础第四天-作业-Hashtable-list<KeyValuePair>泛型实现名片
1.名片集: 名片集实现功能:不限定集合实现 增加,查询,查询全部,删除 功能,需求条件: 根据姓名去(查询/删除)某一行数据.指定:姓名,年龄,性别,爱好,联系方式. 采用技术:Hashtable- ...
- 【西北师大-2108Java】第四次作业成绩汇总
[西北师大-2108Java]第四次作业成绩汇总 深入理解程序设计中算法与程序的关系: 深入理解java程序设计中类与对象的关系: 理解OO程序设计的第2个特征:继承.多态: 学会采用继承定义类设计程 ...
- 【OO学习】OO第四单元作业总结及OO课程总结
[OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...
- BUAA OO 2019 第四单元作业总结
目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...
随机推荐
- 基于PHP的一种Cache回调与自动触发技术
$s = microtime(true); for($i=0; $iaaa($array, $array, $array); $data = a::bbb($array, $array, $array ...
- 微信小程序之组件的集合(二)
继续微信小程序开发的学习,继续跟着老师的讲课思路来学习,继续开发项目中所用到的组件 一.导航栏navi组件的开发 1.新建组件的文件结构 这个就是先新建目录navi.然后在navi文件夹中新建comp ...
- LUOGU P3435 [POI2006]OKR-Periods of Words
传送门 解题思路 首先求出kmp,那么i-nxt[i]一定是一个周期,对于每一个点一直跳nxt,跳到最小的nxt之后用i-这个nxt即为i这个前缀的答案. 代码 #include<iostrea ...
- MySQL用命令行复制表,查看表结构
一.mysql中用命令行复制表结构的方法主要有一下几种: 1.只复制表结构到新表 1 CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2; 或 1 CREATE TA ...
- pip在多个python版本中将包安装到制定版本
$ pip install -t /usr/local/lib/python3./site-package/ beautifulsoup4 利用pip install -t 制定到具体位置
- free内存监控
语 法: free [-bkmotV][-s <间隔秒数>] 补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等. 参 ...
- SQL SERVER 自增列的方法
declare @Table_name varchar(60) set @Table_name = ''; if Exists(Select top 1 1 from sysobjects ...
- iview 中table列 一列显示多个数据(后台返回数组显示在列内)
一.首先出现的是比较复杂的一种情况(多个key) 1.首先页面显示效果如下 2.后台返回数据格式如下: 3.在iview中table的columns中的render函数: 4.具体代码 render: ...
- 【python之路18】内置函数,补充请看【python之路46】
1.abs(number)表示某个数字的绝对值 print(abs(-123)) #打印出123 2.all(iterable) 表示可迭代的参数全部为True那么返回True,否则返回False r ...
- PHPStrom直接在编辑器打开php文件
以下是自己配置PHP+Apache的开发环境,集成环境的话要换第二种方法(看个人配置):PHPStrom 如果希望直接在编辑器打开php文件,要做以下这几步配置. 第一种:非集成环境 1 2 3 第二 ...