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 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...
随机推荐
- mac下更改MySQL的默认编码
mysql默认的编码是latin1,它不支持中文,所以我们一般需要修改他的默认编码格式. 打开终端1. 进入root权限sudo -i 2. cp /usr/local/mysql/support-f ...
- FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
自从继承了hibernate ,全都是些奇葩问题. 努力解决中,先发布,以备忘
- 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]
P2826 [USACO08NOV]光开关Light Switching 题目描述 Farmer John tries to keep the cows sharp by letting them p ...
- 【模板】 递归线段树 [2017年五月计划 清北学堂51精英班Day4]
P3372 [模板]线段树 1 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别 ...
- expect.js
前言 1> 借鉴里面的应用思想,使用断言提高代码的健壮性及维护性 2> 实现方式--不采用直接嵌入expect的方式,统一进行重写(提取常用断言方法,重新构造API) 官网介绍 https ...
- 两张图搞清composer install与update区别 - 今日头条(www.toutiao.com)
composer update : 主要是在开发阶段使用,根据我们在composer.json文件中指定的内容升级项目的依赖包. composer install : 主要是在部署阶段使用,以便在生产 ...
- 杨柳絮-Info:对抗杨柳絮的7种方法和2种防治手段
ylbtech-杨柳絮-Info:对抗杨柳絮的7种方法和2种防治手段 园林养护人员在对抗杨柳絮上 主要有以下两种方法↓↓ 1.化学方法 化学方法是通过激素等调节剂来抑制植物发芽分化,达到减少杨柳开花的 ...
- Spring_Hibernate
Spring与Hiberante整合 通过hibernate的学习,我们知道,hibernate主要在hibernate.cfg.xml配置文件中 接下来我们看一下hibernate的一个配置文件 h ...
- python实现贝叶斯网络的概率推导(Probabilistic Inference)
写在前面 这是HIT2019人工智能实验三,由于时间紧张,代码没有进行任何优化,实验算法仅供参考. 实验要求 实现贝叶斯网络的概率推导(Probabilistic Inference) 具体实验指导书 ...
- Sql server定时执行某个sql 通过Windows 计划任务(非代理Job方式)
建立 bat文件.内容如下: osql -s "xxx.xxx.xx.x" -U sa -P sa -d DB -i TruncateSql.sql osql -S "l ...