C++语法细微(四)(运算符重载/继承派生)

C++继承机制深度解析:从语法到内存模型与多态实现 面向对象编程(OOP)的核心机制之一是继承,它允许新创建的类(派生类)基于现有类(基类)构建,从而实现代码复用和层次化设计。其基本原理是通过派生类继承基类的成员,并可以添加或重写功能,这为软件的可扩展性和维护性奠定了基础。从技术价值看,继承不仅是实现代码复用的关键手段,更是构建多态性的基石,通过虚函数和动态绑定,程序能在运行时根据对象实际类型调用相应方法,极大地提升了代码的灵活性和可维护性。在实际应用场景中,继承广泛用于框架设计、库开发和大型软件系统的架构,例如在GUI库中定义通用控件基类,或在游戏引擎中构 阅读详情

运算符重载的方法:
函数类型 operator 运算符名称(形参表列)
{对运算符的重载处理}
函数operator+重载了运算符+
C++不允许用户自己定义新的运算符 只能对已有的C++运算符进行重载
只有5个运算符不能被重载
(.)(成员访问运算符),
(.*)(成员指针访问运算符),
(::)(域运算符),
(sizeof)(长度运算符),
(?:)(条件运算符)
重载不能改变运算符对象(即操作数)的个数
重载不能改变运算符的优先等级
重载不能改变运算符的结合性
重载运算符的函数不能有默认的参数
重载的运算符必须和用户定义的自定义类型的对象一起使用 其参数至少应该是一个类对象(或类对象的引用)
对于类对象的运算符一般必须重载 但是有两个例外 (=)(&)
应当使重载的运算符的功能类似于该运算符作用于标准类型数据时所实现的功能
运算符重载函数可以是类的成员函数 也可以是友元函数 还可以是既非类的成员函数和友元函数的普通函数

先搭框架 逐步扩充 由简到繁 最后完善 边编程 边调试 边扩充

istream &operator >> (istream&,自定义类&);
ostream &operator << (ostream&,自定义类&);
只能将重载<< AND >>的函数作为友元函数或者普通函数 而不能将他们定义为成员函数

隐式类型转换 显式类型转换
提倡的标准写法 类型名(数据)

转换构造函数(conversion constructor function)将一个其他类型的数据转换成一个类的对象
类名(指定类型的数据)
类型转换函数(type conversion function)的作用是将一个类的对象转换成另一种类型的数据
operator 类型名()
{实现转换的语句}
在函数名前面不能制定函数类型 函数没有参数

在已经定义了相应的转换构造函数的情况下 将运算符"+" 重在为友元函数在惊醒两个复述相加时 可以用交换律。
如果将运算符+函数重载为类的成员函数时 交换律不适用 于是 将双目运算符重载为友元函数 单目运算符重载为成员函数

类型转换函数和 运算符重载以及转换构造函数相矛盾

继承(inheritance)和派生
BaseClass FatherClass DerivedClass SonClass
Multiple Inheritance
派生类是基类的具体化 基类是派生类的抽象
class DerivedClassName : [inheritMethod] BaseClassName
{Derived Class Implement};
保护派生类(protected derived class)

在执行派生来的构造函数是 调用基类的构造函数是一个继承里面用到的好的方法
派生类构造函数名(总参数表列):基类构造函数名(参数表列)
{派生类中新增数据成员初始化语句}

执行派生类构造函数的顺序:
调用基类构造函数 对基类的数据成员初始化
调用子对象构造函数 对子对象数据成员初始化
再执行派生类构造函数 对派生类数据成员初始化

在执行派生来的析构函数的时候 系统会自动调用基类的析构函数和子对象的析构函数
先执行派生类自己的析构函数 对派生类新增加的成员进行清理 然后调用子对象的析构函数
对子对象进行清理 最后调用基类的析构函数 对基类进行清理。

多重继承:
class D : public A, protected B, private C
{类D增加的成员};

派生类的构造函数名(总参数列表):基类1构造函数(参数表列),基类2构造函数(参数表列),基类3构造函数(参数表列)
{派生类中构造函数体}
先调用基类的构造函数,调用顺序是按照声明派生类时基类出现的顺序
多重继承会产生二义性,需要加类名来限制说明具体是哪个成员

虚基类:
虚基类声明并不是在生命基类时声明的而是在声明派生类时 指定继承方式时声明的。
class 派生类名:vritual 继承方式 基类名
最终派生类在构造函数初始化的时候需要调用虚基类的构造函数 ,并且直接派生虚基类的派生类不会再调用

在一个类中以另一个类的对象作为数据成员称为类的组合。

2、探索C++的C子集:奠定坚实基础 本文深入探讨了C++中的C子集及其核心特性,包括基本语法、数据类型、指针等,并详细介绍了C++的面向对象编程基础,如类和对象、封装、继承、多态性以及运算符重载等内容。通过实例分析,帮助读者更好地理解C++语言的强大功能及其在现代编程中的应用。 阅读详情

相关推荐

掌握C++继承与多态:面向对象编程的核心

本文详细探讨了C++中继承和多态的概念及其在面向对象编程中的应用。通过分析基类和派生类的定义、构造函数和析构函数的链式调用、函数重定义与重载的区别、以及虚函数实现动态绑定等关键主题,我们深入理解了如何有效地利用继承来重用软件,以及如何通过多态实现类型安全的泛型编程。

weixin_36427956的博客 691

c++派生,运算符重载,虚函数的使用

1 设置一个完整的程序 2.设置一个基类,并派生出一个子类,继承方式为public 3.在基类和子类中定义带参构造函数(简单派生类的构造函数) 4.程序中引入运算符重载,(包含运算符和输入输出的重载) 5.增加虚函数的使用 #include using namespace std; class point { public: point (int a=0,int b=0)

Sona的绯闻男友的博客 1024

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1060

C++对象运算符重载,容器迭代器

+,++, += 、其他的运算符重载函数差不多,以及输出out,输入 in #include <iostream> using namespace std; /* C++ 运算符重载:使对象的运算表现得和编译器内置类型一样 template<typename T> T sum(T a, T b) { return a+ b; //a.+(b) } 1.编译器做对象运算的时候,会调用对象的运算符重载函数(优先调用成员方法);如果没有成员方法 就在全局作用域找.

weixin_40533189的博客 1676

【传感器标定(三):激光雷达标定原理与实现详解】

本文系统介绍了激光雷达标定的基本原理与方法。主要内容包括:激光雷达标定的分类(内参标定和外参标定)、坐标系定义和刚体变换数学基础;详细阐述了测距误差和光束方向两种内参标定方法;重点分析了基于目标(平面标定板、三维标定物)和基于运动(手眼标定、点云配准)的外参标定方法;介绍了多传感器联合标定技术及非线性优化、鲁棒标定等实现方法;最后提出了定量和定性两种标定评估体系。为激光雷达在自动驾驶等领域的精确应用提供了系统的标定技术指导。

weixin_47429781的博客 3792

STM32定时器ARR寄存器详解:从‘水桶接水’到精准测速,你的PWM和编码器都靠它

本文深入解析STM32定时器ARR寄存器的核心原理与应用技巧,从PWM波形生成到编码器测速实战。通过水桶模型和硬件本质的比喻,揭示ARR如何作为定时器的'心跳节拍器',并详细探讨其在动态调频、死区时间配置和高精度PWM中的关键作用。特别针对编码器模式下的ARR配置和溢出补偿算法进行优化建议,帮助工程师提升系统性能和实时性。

weixin_33734785的博客 379

c++ operator 重载运算符 简单理解

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将 operator== 整体上视为一个函数名。 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。 一、为什么使用操作符重载? 对于系统的所有操作符,**一般情况下,只支持基本数据类型和标准...

顾清欢的博客 1795

Bladed风电仿真软件新手必看:从界面操作到功率曲线计算的完整指南

本文为风电工程师提供Bladed仿真软件的完整入门指南,涵盖界面操作、功率曲线计算及动态仿真等核心功能。通过实战技巧和常见问题解决方案,帮助新手快速掌握这款全球领先的风电机组仿真工具,提升风电项目开发效率。

weixin_30839881的博客 102

运算符重载

1、基本概念 所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。运算符也可以重载。运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。 重载运算符的函数一般格式如下: 函数类型operator运算符名称(形参表列) {对运算符的重载处理} 例如,想将“+”用于Complex类(复数)的加法运算,函数的原型可以是这样的:...

hopegrace的博客 811

爆肝5万字❤️Open3D 点云数据处理基础(Python版)

本文为Open3D 点云数据处理基础教程(Python版),小白也能轻松上手!还等什么呢,学起来!

孙悟空 13万+

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

服务部署之配置WSUS更新服务(基于Windows配置 Server 2022)

2301_77192876的博客 2214

c++继承—知识点汇总

面向对象编程基于 4 个重要方面:封装、抽象、继承和多态。继承是一种强大的属性重用方式, 是通向多态的跳板。在本章中,您将学习: • 编程意义的继承;• C++继承语法;• 公有继承、私有继承和保护继承;• 多继承;• 隐藏基类方法和切除(slicing)导致的问题。

killer884800的博客 1400

【华为OD机试】贪吃蛇(python, java, c++, js)

贪吃蛇是一个经典游戏,蛇的身体由若干方格连接而成,身体随蛇头移动。蛇头触碰到食物时,蛇的长度会增加一格。蛇头和身体的任一方格或者游戏版图边界碰撞时,游戏结束。 下面让我们来完成贪吃蛇游戏的模拟。 给定一个NM的数组arr,代表NM个方格组成的版图,贪吃蛇每次移动一个方格。 若arr[i][j] == H,表示该方格为贪吃蛇的起始位置; 若arr[i][j] == F,表示该方格为食物, 若arr[i][j] == E,表示该方格为空格。 贪吃蛇初始长度为1,初始移动方向为向左。

A_D_I_D_A_S的博客 541

C++ 继承(1)

这个地方函数的同名要和函数重载区分一下首先函数重载是在同一个域中这个地方的函数同名是处于两个不同的域我们直接上代码就很容易理解了。

Starry_tsx的博客 686

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 136

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++编译错误C1057-C1144解析:运算符重载与类成员函数规范

在C++编程中,运算符重载和类成员函数是面向对象编程的核心机制,它们允许开发者自定义类型的行为,提升代码的表达能力。其原理基于C++的函数签名规则和对象模型,通过特定的语法扩展语言的操作符语义。掌握这些机制的技术价值在于能够编写更直观、类型安全的代码,同时遵循语言规范可以避免未定义行为。在实际应用场景中,这些特性广泛用于智能指针、容器类、数学库和资源管理类的实现。然而,不正确的使用常会触发C1057至C1144系列编译错误,例如运算符返回类型不匹配或参数规范错误,这些问题正是C++编译器对代码确定性和安全性

weixin_34318326的博客 506

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++函数重载:从编译原理到实战应用

函数重载是C++实现编译时多态的核心机制,它允许在同一作用域内定义多个同名函数,通过参数列表的差异实现智能分发。其背后是编译器复杂的重载决议过程,涉及候选函数筛选、隐式转换评级与最佳匹配选择。这一特性不仅是语法糖,更是提升代码可读性、实现类型安全接口的关键技术。在工程实践中,函数重载广泛应用于构造函数设计、运算符重载以及创建通用API等场景,例如实现类似`std::to_string`的泛型转换接口。理解重载与隐藏、覆盖的区别,以及默认参数、函数模板的交互优先级,能有效避免歧义错误与链接问题,是编写高质量C

weixin_30386713的博客 408

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C++学习记录(二):实现继承

2 实现继承 面向对象编程基于四个重要方面:封装、抽象、继承和多态。继承是一种强大的属性重用方式,是通向多态的跳板。 这章中将学习: 编程意义上的继承; C++继承语法; 公有继承、私有继承和保护继承; 多继承; 隐藏基类方法和切除(slicing)导致的问题。 2.1 继承基础 在编程领域,经常会遇到具有类似属性,但细节或行为存在细微差异的组件。在这中情况下,一种解决之道是将每个...

qq_41665685的博客 362

c++编程基础知识

面向对象和面向过程: 面向过程:为了实现某个目标 设计者需要自己一步一步的去完成,面向过程适合于小型项目的运用 面向对象:为了实现某个目标,设计者可以把这个目标划分为多个模块,然后设计一个或者多个对象去完成每一个对象自己的功能模块,以完成目标,面向对象适合于大型项目的实现 对象=数据+函数 注意区分变量和对象 类: 类的成员函数: 类的成员函数在类内定义和在类外定义的区别: 调用一个函数的时间开销远远大于小规模函数体中全部语句的执时间。为了减少时间开销,如果在类体中定义的成员函数中不包.

m0_60274660的博客 7603

“码” 上认亲!面向对象之继承:解锁代码的 “家族传承” 密码

本文介绍了C++中继承的基础知识,主要包含以下内容: 继承的定义:继承是面向对象程序设计中实现代码复用的重要手段,允许在保持原有类特性的基础上进行扩展。 继承语法:通过示例展示了鱼类基类(Fish)和派生类(Carp、Tuna)的实现方式,解释了protected限定符的作用。 基类初始化:演示了如何使用派生类构造函数通过初始化列表向基类传递参数。 方法覆盖:说明如何在派生类中覆盖基类方法,并提供了畜牧业动物类的示例。 显式调用:介绍了如何在派生类中通过作用域限定符显式调用基类方法。 文章通过多个具体代码示

Vect__的博客 959

C++名字隐藏:从编译错误到继承体系的核心机制解析

在C++面向对象编程中,名字查找是编译器处理函数调用的基础机制,它决定了在类继承体系中如何定位成员函数。这一过程遵循作用域规则,当派生类定义了与基类同名的成员时,会导致基类同名成员被隐藏,从而引发编译错误。理解名字隐藏的原理对于编写健壮的代码至关重要,它能帮助开发者避免常见的陷阱,如无意中切断基类接口。通过使用using声明等解决方案,可以恢复基类函数的可见性,确保派生类接口的完整性。这一机制在大型项目开发和面试准备中都是高频考点,深入掌握有助于提升代码质量和可维护性。

weixin_33971977的博客 393

c++ 接口/多态

接口可以看作是类与类之间通信的桥梁。它只声明方法(或函数)的签名(如名称、参数、返回值类型),而不关心这些方法如何实现。实现接口的类必须按照接口的定义提供具体实现。多态,字面意思是“多种形态”,在编程中指的是同一个接口或方法可以在不同的对象上表现出不同的行为。换句话说,多态允许用统一的接口调用不同类的实现,而具体执行哪个实现取决于对象的实际类型。通俗解释:多态就像一个遥控器,按下“播放”按钮,不同设备(电视、音响、DVD播放器)会有不同的反应,但你只需要知道“按播放”就行,不用管背后是哪种设备。

2402_88047672的博客 1212

继承与多态

函数原型相同:新定义的虚函数要全部与基类的虚函数一致,除了函数体.c++提供了一个保留字override:重写,用来说明某一个函数是覆盖基类的虚函数的,建议加上,可以用来检测.如果基类的某一个函数不想被派生类新定义的所覆盖,可以使用final修饰,表示是最终版本,不可重写.在一个类后面用final修饰,表明这个类不允许被继承.

2401_82787242的博客 1433

C++规定

前有c++11后有c++17现在有c++20, 新特性在不断增加.从这篇笔记出发,开始记录提示:以下是本篇文章正文内容,下面案例可供参考。

Computer_Tech的博客 1154

C++学习之路—继承与派生(一):基本概念与基类成员的访问属性

(本文根据《c++程序设计》(谭浩强)总结而成,整理者:华科小涛@http://www.cnblogs.com/hust-ghtao,转载请注明) 1 基本思想与概念 在传统的程序设计中,人们无法利用现有的丰富的软件资源,造成软件开发中人力、物力和时间的巨大浪费,这是因为过去的程序设计方法和计算机语言缺乏软件重用机制。而作为面向对象的语言,C++强调软件的可重用性,通过继承机制,解...

weixin_30273175的博客 120
上一篇: C++语法细微(三)(面向对象和类)
下一篇: C++语法细微(五)(多态虚函数)
stefansen
博客等级 码龄18年 3粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值