博客
关于我
C++面向对象--------继承
阅读量:548 次
发布时间:2019-03-09

本文共 3039 字,大约阅读时间需要 10 分钟。

C++面向对象---继承

继承的定义

继承是C++语言中的一种核心概念,它让我们可以基于已有的类或结构创建新类,继承其属性和方法。在这种继承关系中,原有的类称为基类(Base Class),新创建的类称为派生类(Derived Class)。通过继承,我们可以封装代码重复,提高代码复用性和可维护性。在实际代码中,继承有两种常见类型:一对一继承和一对多继承。虽然一对多和多对一也是可能的,但最常见的是一对一继承。

一对一继承

一对一继承是指一个基类只能有一个派生类。这个概念类似于现实生活中的父子关系,一个父亲只能有一个儿子,但一个儿子有一个父亲。在C++中,一对一继承通过向基类的继承声明(using :声明)来实现。例如,人具有多个属性和方法,如姓名、年龄、身高和体重,以及一个方法来介绍自己。

例如:

#include 
using namespace std;class People {public: string name; double height; double weight; string age;public: void introduce() { cout << "你好我叫 "; cout << this->name; cout << "!人身信息:身高" << this->height << "cm,体重" << this->weight << "kg,年龄" << this->age << endl; }};class Teacher : public People {public: string profession;};

完整代码:

#include 
using namespace std;class People {public: string name; double height; double weight; string age;public: void introduce() { cout << "你好我叫 " << name << "!\n身高" << height << "cm,体重" << weight << "kg,年龄" << age << endl; }};class Teacher : public People {public: string profession;};int main() { Teacher Lisi; Lisi.age = 18; Lsi.height = 170.5; Lsi.name = "李四"; Lsi.profession = "英语老师"; Lsi.weight = 50; Lsi.introduce(); return 0;}

这个例子中的People类是基类,Teacher类是派生类。派生类继承了基类的所有公有属性和方法,并在此基础上新增了独特的属性(如profession)。

在实际编码中,基类和派生类的访问级别(public、protected、private)会影响继承和访问的方式:

  • Public:所有派生类都可以访问基类的公有属性和方法。
  • Protected:派生类可以通过虚拟函数调用(如operator())间接访问保护的属性和方法,但不能直接访问。
  • Private:派生类无法直接访问基类的私有属性和方法。

一对多继承

一对多继承是指一个基类可以有多个派生类。在现实中,这相当于一个父亲可以有多个儿子。在C++中,我们可以通过将基类声明为多个不同的派生类来实现一对多继承。

例如:

#include 
using namespace std;class People {public: string name; double height; double weight; string age;public: void introduce() { cout << "你好我叫 " << name << "!\n身高" << height << "cm,体重" << weight << "kg,年龄" << age << endl; }};class Teacher : public People {public: string profession;};class Doctor : public People {public: string profession;};class Driver : public People {public: string profession;};int main() { // 多个对象: Teacher Lisi; Doctor Wang; Driver Zhang; // 具体属性和逻辑可根据需要扩展 // 这里仅示意 Lisi.name = "李四"; Wang.name = "王五"; Zhang.name = "张六"; Lisi.introduce(); Wang.introduce(); Zhang.introduce(); return 0;}

多对一继承

多对一继承是更为复杂的一种继承方式。在这种关系中,一个派生类可以继承多个基类的属性和方法。例如,在现实生活中,一个儿子可以有多个父亲,每个父亲传授不同的技能。这种多对一继承在C++中通过使用多继承(multi-inheritance)实现。

例如:

#include 
using namespace std;class Driver {public: void driving() { cout << "嘀嘀嘀!司机在开车\n"; }};class Doctor {public: void treatment() { cout << "请问哪里不舒服?医生在治疗\n"; }};class Teacher {public: void teaching() { cout << "学而时习之,不亦乐乎!老师在教育\n"; }};class Youngman : public Doctor, public Teacher, public Driver {public: string name; int age; double height; double weight;};int main() { Youngman Lisi; Lisi.driving(); // 开车 Lisi.teaching(); // 教课 Lisi.treatment(); // 治疗 return 0;}

注意到Youngman类同时继承了DriverTeacherDoctor三个类的属性和方法。这种双重继承(多继承)的实现让一个对象可以同时具有多个行为或属性。

转载地址:http://zbhiz.baihongyu.com/

你可能感兴趣的文章
php源码中如何添加滚动公告,给WordPress网站添加滚动公告的方法
查看>>
PHP源码安装后如何新增模块
查看>>
php源码详细安装步骤,linux下php源码安装步骤
查看>>
php漏洞tips
查看>>
php版Zencoding之 phpstorm
查看>>
PHP版本升级5.4手记
查看>>
php版本升级总结
查看>>
php版本微信公众号开发
查看>>
php版的微信公众号开发演示
查看>>
php生成html文件的多种方法介绍
查看>>
php生成二维码到图片上
查看>>
php生成二维码并下载图片(适应于框架)
查看>>
PHP生成及获取JSON文件的方法
查看>>
PHP生成唯一不重复的编号
查看>>
PHP生成器-动态生成内容的数组
查看>>
PHP的ip2long和long2ip升级函数
查看>>
PHP的json_encode函数应用到微信接口问题(include \uxxxx will create fail)
查看>>
php的web路径获取
查看>>
php的一些小笔记--字符串
查看>>
php的几种运行模式CLI、CGI、FastCGI、mod_php
查看>>