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

本文共 3151 字,大约阅读时间需要 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/

你可能感兴趣的文章
Node.js 调用微信公众号 API 添加自定义菜单报错的解决方法
查看>>
node.js 配置首页打开页面
查看>>
node.js+react写的一个登录注册 demo测试
查看>>
Node.js中环境变量process.env详解
查看>>
Node.js之async_hooks
查看>>
Node.js升级工具n
查看>>
Node.js卸载超详细步骤(附图文讲解)
查看>>
Node.js基于Express框架搭建一个简单的注册登录Web功能
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
Node.js安装及环境配置之Windows篇
查看>>
Node.js安装和入门 - 2行代码让你能够启动一个Server
查看>>
node.js安装方法
查看>>
Node.js官网无法正常访问时安装NodeJS的方法
查看>>
Node.js的循环与异步问题
查看>>
Node.js高级编程:用Javascript构建可伸缩应用(1)1.1 介绍和安装-安装Node
查看>>
nodejs + socket.io 同时使用http 和 https
查看>>
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
查看>>
Nodejs express 获取url参数,post参数的三种方式
查看>>
nodejs http小爬虫
查看>>
nodejs libararies
查看>>