继承与派生

基本概念和语法

概念

  • 继承与派生是同一过程从不同角度看

    保持已有的特性而构造新类的过程称为继承。

    在已有类的基础上新增自己的特性而产生新类的过程为派生。
  • 被继承的已有类称为基类(父类)
  • 派生出的新类称为派生类(或子类)
  • 直接参与派生出某类的基类称为直接基类。
  • 基类的基类甚至更高的基类称为间接基类。

定义

语法:

单继承:

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++第四次作业:继承的更多相关文章

  1. C++第四次作业--继承与派生

    C++ 继承 面向对象程序设计中最重要的一个概念是继承.继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易.这样做,也达到了重用代码功能和提高执行效率的效果. 当创建一个类时 ...

  2. C++ 第四次作业 继承

    继承 继承时从新的类从已有类那里得到新的特征.继承实现了代码的重用,极大地减少了代码量,同时通过新增成员,加入了自身的独有特性,达到了程序的扩充. 派生类继承了基类的全部数据类和除了构造函数.析构函数 ...

  3. Java第四次作业——面向对象高级特性(继承和多态)

    Java第四次作业--面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能, ...

  4. Java第四次作业,面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  5. Java第四次作业—面向对象高级特性(继承和多态)

    Java第四次作业-面向对象高级特性(继承和多态) (一)学习总结 1.学习使用思维导图对Java面向对象编程的知识点(封装.继承和多态)进行总结. 2.阅读下面程序,分析是否能编译通过?如果不能,说 ...

  6. C#基础第四天-作业答案-Hashtable-list<KeyValuePair>泛型实现名片

    .Hashtable 实现 Hashtable table = new Hashtable(); while (true) { Console.WriteLine("------------ ...

  7. C#基础第四天-作业-Hashtable-list<KeyValuePair>泛型实现名片

    1.名片集: 名片集实现功能:不限定集合实现 增加,查询,查询全部,删除 功能,需求条件: 根据姓名去(查询/删除)某一行数据.指定:姓名,年龄,性别,爱好,联系方式. 采用技术:Hashtable- ...

  8. 【西北师大-2108Java】第四次作业成绩汇总

    [西北师大-2108Java]第四次作业成绩汇总 深入理解程序设计中算法与程序的关系: 深入理解java程序设计中类与对象的关系: 理解OO程序设计的第2个特征:继承.多态: 学会采用继承定义类设计程 ...

  9. 【OO学习】OO第四单元作业总结及OO课程总结

    [OO学习]OO第四单元作业总结及OO课程总结 第四单元作业架构设计 第十三次作业 第十四次作业 总结 这两次作业架构思路上是一样的. 通过将需要使用的UmlElement,封装成Element的子类 ...

  10. BUAA OO 2019 第四单元作业总结

    目录 第四单元总结 总 UML UML 类图 UML 时序图 UML 状态图 架构设计 第十三次作业 第十四次作业 课程总结 历次作业总结 架构设计 面向对象方法理解 测试方法理解与实践 改进建议 尽 ...

随机推荐

  1. 2016年省赛 G Triple Nim

    2016年省赛 G Triple Nimnim游戏,要求开始局面为先手必败,也就是异或和为0.如果n为奇数,二进制下最后一位只有两种可能1,1,1和1,0,0,显然异或和为1,所以方案数为0如果n为偶 ...

  2. MySQL系列(一)--基础知识(转载)

    安装就不说了,网上多得是,我的MySQL是8.0版本,可以参考:CentOS7安装MySQL8.0图文教程和MySQL8.0本地访问设置为远程访问权限 我的MySQL安装在阿里云上面,阿里云向外暴露端 ...

  3. Qt运行不出现界面

    安装Qt之后按照例程运行,结果不出现界面,原因是路径中有中文,将中文全部改成英文之后,问题解决.

  4. bzoj 1034 [ZJOI2008]泡泡堂BNB——贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1034 原来觉得和 bzoj4977跳伞求生 有点像(虽然还没做). 所以对于a[ ]从小到大 ...

  5. 严格模式下顶层箭头函数this指向的是全局对象

    我们知道普通函数调用,this在非严格模式下指向全局对象,在严格模式下是undefined.那箭头函数呢?我们知道,箭头函数没有自己的this,它的this是最近外层非箭头函数的this,那直接在顶层 ...

  6. mysql 索引优化 性能调优 锁

    1 检查mysql 是否安装 rpm -qa|grep -i mysql 2 ntsysv 查看和设置开机启动列表 3 mysql 在 centos 上默认 的数据目录是 /var/lib/mysql ...

  7. windows 下nginx配置ssl https支持

    本文适合正式上线的配置,购买来的证书 私钥*.key文件需要先去掉密码 openssl rsa -in old.key -out new.key

  8. GIT → 02:Git和Svn比较

    2.1 SVN介绍 2.1.1 SVN简介 SVN 属于集中式版本管理控制系统,服务器中保存了所有文件的不同版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新.Subversio ...

  9. Ubuntu 服务器默认的root账号是没有激活的,需要用初装的用户账号给root设置管理密码

    user@ubuntu12:~$ sudo password root //用sudo修改账户 1.根据提示输入当前用户的密码: 2.修改成功之后你就可以使用root账号了,可以使用su root 命 ...

  10. HR招聘_(四)_招聘方法论(简历筛选)

    .主动投递 筛选时需要看学历背景,公司平台,所在时间,岗位职责,项目经验几个部分,根据对岗位需求和企业文化选择合适的候选人. 筛选简历建议分岗位筛选,切记误操作或大意淘汰优秀候选人. .搜索下载 互联 ...