C++ 编程基础(5)类与对象 | 5.4、继承

文章目录

  • 一、继承
    • 1、概念
    • 2、继承类型
    • 3、继承中的构造函数与析构函数

前言:

在C++这一强大的编程语言中,继承是面向对象编程(OOP)的核心概念之一。它允许我们创建一个新的类(称为派生类或子类),这个新类可以继承一个或多个已存在的类(称为基类或父类)的属性和方法。通过继承,我们可以实现代码的重用、扩展和修改,从而构建更加复杂和灵活的软件系统。

一、继承

1、概念

继承的基本思想是基于已有,构建新的,下面是与继承相关的概念

  • 基类与派生类: 基类是一个已经定义好的类,包含了一些属性和行为。派生类是在基类的基础上进行扩展,可以添加新的属性和行为,或者重写基类的方法。
  • 派生类的定义: 在C++中,使用:运算符来定义一个派生类。

继承的一般语法:

class 派生类名:[继承方式] 基类名{派生类新增加的成员
};

示例代码:

#include <iostream>
#include <string>// 基类 Animal
class Animal {
public:// 基类的构造函数Animal(const std::string& name) : name_(name) {}// 基类的成员函数void eat() const {std::cout << name_ << " is eating." << std::endl;}// 基类的虚函数,用于后续的多态性virtual void sound() const {std::cout << "Some generic animal sound." << std::endl;}// 基类的析构函数(虚析构函数是良好的实践,尤其是当基类有虚函数时)virtual ~Animal() {}private:std::string name_; // 基类的私有数据成员
};// 派生类 Dog,继承自 Animal
class Dog : public Animal {
public:// 派生类的构造函数,调用基类的构造函数Dog(const std::string& name, const std::string& breed) : Animal(name), breed_(breed) {}// 重写基类的虚函数void sound() const override {std::cout << name_ << " barks." << std::endl;}// 派生类特有的成员函数void fetch() const {std::cout << name_ << " is fetching the ball." << std::endl;}private:std::string breed_; // 派生类的私有数据成员
};int main() {// 创建 Dog 对象Dog myDog("Buddy", "Golden Retriever");// 调用派生类的成员函数myDog.fetch();// 调用基类的成员函数(通过派生类对象)myDog.eat();// 调用重写后的虚函数myDog.sound();// 基类的虚析构函数确保当派生类对象被销毁时,基类部分也被正确清理return 0;
}

2、继承类型

C++支持多种类型的继承,包括公有继承、私有继承和保护继承。

  • 公有继承: 在这种类型的继承中,基类的公有成员在派生类中仍然是公有的,而基类的保护成员在派生类中仍然是保护的。这是最常用的继承类型。
  • 私有继承: 当使用私有继承时,基类的所有公有成员和保护成员在派生类中都会变成私有的。这意味着派生类的对象不能直接访问这些成员,但派生类内部可以访问。
  • 保护继承: 保护继承与私有继承类似,但基类的公有成员在派生类中会变成保护的。这意味着派生类的对象不能直接访问这些成员,但派生类及其派生类可以访问。

3、继承中的构造函数与析构函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9155.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SQL EXISTS谓词

谓词时返回值为真值&#xff08;true、false或unknown&#xff09;的函数。EXISTS与其他谓词不同&#xff0c;它接受的参数是行的集合。 输入值为一行的谓词叫做“一阶谓词”&#xff08;例如>、<、 及 LIKE等&#xff09;&#xff1b;输入值为行的集合的谓词叫做“二阶…

[产品管理-59]:项目组合中产品或项目的类型分类: 平台类、支持改进类、衍生类、突破类

目录 一、概述 1、平台型项目&#xff1a;平台产品 2、支持性项目&#xff1a;现有产品的改进&#xff0c;还是现有产品&#xff0c;只不过性能、效率提升。 3、衍生型项目&#xff1a;衍生出来的新产品&#xff0c;不同于现有产品&#xff0c;但与现有产品有关联 4、突破…

Jmeter的安装和使用

使用场景&#xff1a; 我们需要对某个接口进行压力测试&#xff0c;在多线程环境下&#xff0c;服务的抗压能力&#xff1b;还有就是关于分布式开发需要测试多线程环境下数据的唯一性。 解决方案: jmeter官网连接&#xff1a;Apache JMeter - Apache JMeter™ 下载安装包 配…

一文学习Android中的Property

在 Android 系统中&#xff0c;Property 是一种全局的键值对存储系统&#xff0c;允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景&#xff0c;使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?

背景 近期各个大厂已经开始准备aosp15的系统rom适配工作了&#xff0c;应该是想2025年初开发发布相关的新机型&#xff0c;所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。 近期就有相关学员朋友在做android15相关的dialog开发时候&#xff0c;发现了一个严…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

LeetCode 热题 100之 堆

1.数组中第k个最大元素 和Acwing 786 第k个数一模一样 排序 思路分析1&#xff1a;此题要求时间复杂度未为O(n)。虽然库函数sort和快速排序都能过&#xff0c;但是时间复杂度不满足条件。下面优化快速排序&#xff0c;写一个快速选择算法。我们可以引入随机化来加速这个过程&…

使用SpringBoot+Vue+Echarts制作一个文章贡献度表

使用SpringBootVueEcharts制作一个文章贡献度表 制作博客贡献表 使用了ECharts中的 calendar-effectscatter 组件制作贡献表&#xff1a;点我传送 首先附上完整的vue代码&#xff1a; <template><div id"container" style" width: 100%; height: 30…

使用Matlab建立决策树

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下先构建一个决策树模型。 决策树算法的优点如下&#xff1a;1、 决策树易于理解和实现&#xff0c;用户在学习过程中不需要了解过多的背景知识&#xff0c;其能够…

LangGPT结构化提示词编写实践

基础任务 如果直接询问大模型strawberry有几个r&#xff0c;大模型会给出错误的答案&#xff1a; 这里我们引入思维连Chain of Thought&#xff0c;我们让大模型遍历一遍单词&#xff0c;每次累加得到最终结果 之前怎么都做不对的题&#xff0c;让大模型一步一步思考&#xf…

开源ISP(Infinite-ISP)介绍

ISP&#xff08;Image Signal Processor&#xff09;我介绍了很多了&#xff0c;大家可以先看下面的文章&#xff0c;了解基本概念&#xff1a; ISP算法及架构分析介绍 谈谈FPGA工程师如何做ISP 图像信号处理器和 Infinite-ISP ISP从图像传感器获取 RAW 像素&#xff0c;并将其…

如何在c++侧编译运行一个aclnn(AOL)算子?

1 AOL算子库 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;提供了算子加速库&#xff08;Ascend Operator Library&#xff0c;简称AOL&#xff09;。该库提供了一系列丰富且深度优化过的高性能算子API&#xff0c;更亲和昇腾AI处理器&#xff0c;调…

三分钟学会Docker基本操作,快速入门容器技术!

如果您时常遭遇以下困境&#xff1a; 被繁琐的应用安装依赖与环境配置耗尽了宝贵时间与精力&#xff1f; 即便严格遵循安装指南&#xff0c;仍频遇障碍&#xff0c;导致应用无法启动&#xff0c;让您倍感挫败与焦虑&#xff1f; 向研发团队反馈安装难题&#xff0c;却只换来“…

快速入门Zookeeper

Zookeeper ZooKeeper作为一个强大的开源分布式协调服务&#xff0c;扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务&#xff0c;用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性&#xff0c;ZooKeeper能够确保在复杂的分布式…

uniapp—android原生插件开发(3Android真机调试)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 一、打包uniapp资源包&#xff1a; 打包…

Windows 11开发环境配置与应用开发

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 Windows 11是微软发布的新一代操作系统&#xff0c;它不仅在视觉和用户体验上进行了革新&#xff0c;还为开发者提供了更…

停车共享小程序ssm+论文源码调试讲解

2 系统关键技术 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与普…

【MRAN】情感分析中情态缺失问题的多模态重构和对齐网络

abstract 多模态情感分析&#xff08;MSA&#xff09;旨在通过文本、视觉和声音线索识别情感类别。然而&#xff0c;在现实生活中&#xff0c;由于各种原因&#xff0c;可能会缺少一到两种模式。当文本情态缺失时&#xff0c;由于文本情态比视觉和听觉情态包含更多的语义信息&…

通过 Windows IIS 服务访问腾讯云 CFS 文件系统

互联网信息服务&#xff08;IIS&#xff09;可以像访问本地数据一样访问文件存储&#xff08;Cloud File Storage&#xff0c;CFS&#xff09;系统上的数据&#xff0c;并提供 Web 服务&#xff0c;实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…

L7.【LeetCode笔记】相交链表

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…