博客
关于我
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/

你可能感兴趣的文章
Mysql性能优化(6):读写分离
查看>>
MySQL性能优化(八)--
查看>>
MySQL性能测试及调优中的死锁处理方法
查看>>
mysql性能测试工具选择 mysql软件测试
查看>>
mysql恢复root密码
查看>>
Mysql悲观锁
查看>>
MySQL慢查询-开启慢查询
查看>>
MySQL慢查询分析和性能优化的方法和技巧
查看>>
MySQL慢查询日志总结
查看>>
Mysql慢查询日志,查询截取分析
查看>>
MySQL慢查询问题排查
查看>>
mysql截取sql语句
查看>>
mysql截取身份证号前几位_EXCEL中怎样截取身份证号前六位数字
查看>>
mysql手工注入
查看>>
MySQL执行SQL文件出现【Unknown collation ‘utf8mb4_0900_ai_ci‘】的解决方案
查看>>
Mysql执行update by id的过程
查看>>
mysql执行计划
查看>>
MySQL执行计划 EXPLAIN参数
查看>>
MySQL执行计划【explain】,看这一篇就够啦!
查看>>
Mysql执行计划字段解释
查看>>