aspcms网络公司官方网站源码,国内网站建设公司,网站推广的方法和渠道,网站后台里有网页代码没今天我们来学习C中的继承的概念和意义。
一、类之间的组合关系
问题#xff1a;类之间是否存在直接的关联关系#xff1f; 回答#xff1a;类之间存在组合的关系#xff0c;整体与部分的关系。 可以看一下生活中的例子#xff1a; 下面我们以一个简单的程序来看一下…今天我们来学习C中的继承的概念和意义。
一、类之间的组合关系
问题类之间是否存在直接的关联关系 回答类之间存在组合的关系整体与部分的关系。 可以看一下生活中的例子 下面我们以一个简单的程序来看一下类组合的关系
#include iostream
#include stringusing namespace std;class Memory
{
public:Memory(){cout Memory() endl;}~Memory(){cout ~Memory() endl;}
};class Disk
{
public:Disk(){cout Disk() endl;}~Disk(){cout ~Disk() endl;}
};class CPU
{
public:CPU(){cout CPU() endl;}~CPU(){cout ~CPU() endl;}
};class MainBoard
{
public:MainBoard(){cout MainBoard() endl;}~MainBoard(){cout ~MainBoard() endl;}
};class Computer
{Memory mMem;Disk mDisk;CPU mCPU;MainBoard mMainBoard;
public:Computer(){cout Computer() endl;}void power(){cout power() endl;}void reset(){cout reset() endl;}~Computer(){cout ~Computer() endl;}
};int main()
{ Computer c; //电脑类的创建依赖于前面四个类的创建return 0;
}运行结果为 Memory() Disk() CPU() MainBoard() Computer() ~Computer() ~MainBoard() ~CPU() ~Disk() ~Memory()
从上面程序我们可以看出组合关系的特点是
将其他类的对象作为当前类的成员使用当前类的对象与成员对象的生命周期相同成员对象与普通对象在语法上完全相同
二、类之间的继承关系
还是先看一个生活中的实例
那么继承关系有什么样的性质呢
面向对象的继承就是指类之间的父子关系
子类拥有父类的所有属性和行为子类就是一种特殊的父类子类对象可以当做父类对象使用子类中可以添加父类没有的属性和方法
C中通过下面的方式描述继承的关系
下面还是来用一个例子程序来分析继承的关系吧
#include iostream
#include stringusing namespace std;class Parent
{int mv;
public:Parent(){cout Parent() endl;mv 100;}void method(){cout mv mv endl;}
};class Child : public Parent
{
public:void hello(){cout Im Child calss! endl;}
};int main()
{ Child c;c.hello();c.method();return 0;
}运行结果为 Parent() I’m Child calss! mv 100 由运行结果可以看出当执行Child c创建类c时就直接调用了父类的构造函数进行打印语句。然后执行 c.hello();c.method();这两个语句时分别调用孩子类的成员函数与父亲类的成员函数这说明孩子对象可以直接调用父亲的成员函数和本身自己的成员函数。
继承的重要规则
子类就是一个特殊的父类子类对象可以直接初始化父类对象子类对象可以直接赋值给父类对象
继承的意义 继承是C中代码复用的重要手段。通过继承可以获得父类的所有功能并且可以在子类中重写已有功能或者添加新功能。
下面再来一个例子看看继承的规则与意义
#include iostream
#include stringusing namespace std;class Memory
{
public:Memory(){cout Memory() endl;}~Memory(){cout ~Memory() endl;}
};class Disk
{
public:Disk(){cout Disk() endl;}~Disk(){cout ~Disk() endl;}
};class CPU
{
public:CPU(){cout CPU() endl;}~CPU(){cout ~CPU() endl;}
};class MainBoard
{
public:MainBoard(){cout MainBoard() endl;}~MainBoard(){cout ~MainBoard() endl;}
};class Computer
{Memory mMem;Disk mDisk;CPU mCPU;MainBoard mMainBoard;
public:Computer(){cout Computer() endl;}void power(){cout power() endl;}void reset(){cout reset() endl;}~Computer(){cout ~Computer() endl;}
};class HPBook : public Computer
{string mOS;
public:HPBook(){mOS Windows 8;}void install(string os){mOS os;}void OS(){cout mOS endl;}
};class MacBook : public Computer
{
public:void OS(){cout Mac OS endl;}
};int main()
{ HPBook hp;hp.power();hp.install(Ubuntu 16.04 LTS);hp.OS();cout endl;MacBook mac;mac.OS();return 0;
}运行结果为 Memory() Disk() CPU() MainBoard() Computer() power() Ubuntu 16.04 LTS
Memory() Disk() CPU() MainBoard() Computer() Mac OS ~Computer() ~MainBoard() ~CPU() ~Disk() ~Memory() ~Computer() ~MainBoard() ~CPU() ~Disk() ~Memory()
我们可以看出程序的前几个类是组合关系后面的两个类HPBook与MacBook类与Computer类是继承的关系。其中HPBook与MacBook类继承了Computer类的所有行为。
由以上几个程序的分析可以得出以下几条总结
继承是面向对象中类之间的一种关系子类拥有父类所有的属性和行为子类对象可以当做父类的对象使用子类中可以添加父类中所没有的方法和属性继承是面向对象中代码复用的重要手段
想一起探讨以及获得各种学习资源加我有我博客中写的代码的原稿 qq1126137994 微信liu1126137994 可以共同交流关于嵌入式操作系统C语言C语言数据结构等技术问题。