C++核心编程——类和对象(二)、友元、多态

news2024/12/24 9:59:44

C++对象模型和this指针

4.3.1 成员变量和成员函数分开存储

在C++中,类内的成员变量和成员函数分开存储

只有非静态成员变量才属于类的对象上

 空类(类里面是空的),空对象占用内存空间为:1字节。

静态成员变量,类内声明,类外初始化。

4.3.2 this指针概念

this指针指向被调用的成员函数所属的对象。

4.3.3 空指针访问成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针

4.3.4 const修饰成员函数

常函数

  • 成员函数后加const后我们称为这个函数是常函数
  • 常函数内不可以修改成员属性
  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改
//常函数
void func() const
{
    cout << "常函数" << endl;
}

常对象

  • 声明对象前加const称该对象为常对象
  • 常对象只能调用常函数

this指针的本质  是指针常量  指针的指向是不可以修改的。

常对象不可以调用普通成员函数,因为普通成员函数可以修改属性。

4.4 友元

友元的目的就是让一个函数或者类 访问另一个类中私有成员

友元的关键字为friend

友元的三种实现

  • 全局函数做友元
  • 类做友元
  • 成员函数做友元

4.5 运算符重载

4.5.1 赋值运算符重载

C++编译器至少各一个类添加4个函数

  1. 默认构造函数(无参,函数体为空)
  2. 默认析构函数(无参,函数体为空)
  3. 默认拷贝构造函数,对属性进行值拷贝
  4. 赋值运算符operator=,对属性进行值拷贝

类名后面跟一个小括号,称之为匿名对象,执行完后立即释放。

如:

Person()   其中Person是类名

4.6 继承

继承的好处,减少重复代码

继承方式:

父类中所有非静态成员属性都会被子类继承下去。

父类中私有成员属性,是被编译器给隐藏了,因此是访问不到,但是确实被继承下去了。

 继承中的构造和析构顺序如下:

先构造父类,再构造子类,析构的顺序与构造的顺序相反。

 4.6.1 继承中的同名静态成员处理

 4.7 多态

4.7.1 多态的基本概念

多态分为两类

  • 静态多态:函数重载 和 运算符重载属于 静态多态,复用函数名
  • 动态多态:派生类和虚函数实现运行时多态

静态多态和动态多态区别:

  • 静态多态的函数地址早绑定 - 编译阶段确定函数地址
  • 动态多态的函数地址晚绑定 - 运行阶段确定函数地址

动态多态满足条件

  1. 有继承关系
  2. 子类重写父类的虚函数

动态多态使用:父类的指针或引用 指向 子类对象。

重写:函数返回值类型 函数名 参数列表 完全一致,只有函数体中的内容不同 称为函数重写。

4.7.2 多态的原理剖析

 要想写多态,父类中需要写虚函数,子类需要对父类中的虚函数进行重写。

4.7.3 纯虚函数和抽象类

纯虚函数语法:virtual 返回值类型 函数名(参数列表) = 0;

当类中有了纯虚函数,这个类也称为抽象类

抽象类特点

  • 无法实例化对象
  • 子类必须重写抽象类中的纯虚函数,否则也属于抽象类

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

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

相关文章

Simulink仿真模块 - Random Number

Random Number模块的功能是生成正态分布的随机数。它所在的库为: Simulink / Sources 如图所示: Random Number 模块可生成正态分布的随机数。要生成均匀分布的随机数,可以使用 Uniform Random Number 模块。两个模块都使用正态(高斯)随机数生成器(v4:rng 函数…

eSIM是未来?谷歌Pixel8取消物理卡槽,将于今年秋季推出

根据近期的报道&#xff0c;谷歌计划在今年秋季推出的Pixel 8系列手机上取消物理SIM卡卡槽&#xff0c;而是仅支持使用eSIM卡方案。这意味着用户将不再需要插入实体SIM卡来激活移动网络服务&#xff0c;而是可以通过在手机设置中添加和激活eSIM卡来实现。 这一步骤将更加简化手…

视觉SLAM:一直在入门,如何能精通,CV领域的绝境长城,

目录 前言 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 1 什么是SLAM&#xff1f; 2 为什么用SLAM&#xff1f; 3 视觉SLAM怎么实现&#xff1f; 4 前端视觉里程计 5 后端优化 6 回环检测 7 地图构建 8 结语 前言 上周的组会上&…

数字孪生流域共建共享相关政策解读

当前数字孪生技术在水利方面的应用刚起步&#xff0c;2021年水利部首次提出“数字孪生流域”概念&#xff0c;即以物理流域为单元、时空数据为底座、数学模型为核心、水利知识为驱动&#xff0c;对物理流域全要素和水利治理管理活动全过程的数字映射、智能模拟、前瞻预演&#…

湘潭大学 湘大 XTU OJ 1140 平衡三进制1 题解(非常详细)

链接 1140 题面 题目描述 平衡三进制分别使用字符-,0,1表示-1,0,1。下表表示从0到10的十进制数对应的平衡三进制的值。 十进制平衡三进制001121-31041151--61-071-1810-910010101 现在给你一个关于平衡三进制的串&#xff0c;请将其转成对应的十进制数。 输入 第一行是一…

线性代数的学习和整理3:什么是标量向量和张量?什么是向量空间?

目录 1 标量和向量 1.1 标量 scalar 1.2 向量vector /矢量 1.2.1 什么是向量 1.2.2 向量如何表示&#xff1f;在向量空间的表示方法 因此这种向量空间特点是 1.3 ​矩阵(matrix) 1.3.1 矩阵和向量的关系 1.3.2 方阵 1.4 ​张量(tensor)&#xff1a;标量&#xff0c;…

HAProxy+nginx搭建负载均衡群集

目录 一、常见的Web集群调度器 二、HAProxy群集介绍 1、Haproxy的特性 : 2、Haproxy常用的调度算法 ① 轮询调度&#xff08;Round Robin&#xff09; ② 最小连接数&#xff08;Least Connections&#xff09; ③ 基于来源访问调度算法&#xff08;Source Hashing&am…

G0第27章:服务注册与服务发现

服务注册与服务发现 服务注册与服务发现原理 技术原理 实现方案 1、客户端服务发现 2、服务端服务发现 注册中心的技术选型及Consul介绍 注册中心的技术选型 Consul介绍 Raft协议介绍 Consul架构介绍 使用docker-compose搭建consul环境 Consul Agent HTTP API 将gRPC服务注…

API 接口选择那个?RESTful、GraphQL、gRPC、WebSocket、Webhook

大家好&#xff0c;我是比特桃。目前我们的生活紧紧地被大量互联网服务所包围&#xff0c;互联网上每天都有数百亿次API调用。API 是两个设备相互通讯的一种方式&#xff0c;人们在手机上每次指尖的悦动&#xff0c;背后都是 API 接口的调用。 本文将列举常见的一些 API 接口&…

阿拉伯国家-中国经贸合作创新中心揭牌仪式在阿联酋迪拜举行

当地时间8月16日&#xff0c;阿拉伯国家-中国经贸合作创新中心揭牌仪式在迪拜举行。中心的成立将为 “一带一路”中国与沿线各国提供科技交流和经贸合作的高质量平台。中国国际科技促进会军民科技产业委员会主任林志东代表中国国际科技促进会宣读了阿拉伯国家-中国经贸合作创新…

Redis 整合中 Redisson 的使用

大家好 , 我是苏麟 , 今天带来 Redisson 使用 . 官方文档 : GitHub - redisson/redisson: Redisson - Easy Redis Java client with features of In-Memory Data Grid. Sync/Async/RxJava/Reactive API. Over 50 Redis based Java objects and services: Set, Multimap, Sorte…

DC电源模块关于高效率的特点

DC电源模块关于高效率的特点 DC电源模块是目前应用广泛的电源系统之一&#xff0c;它的高效率是其最为显著地特点之一。本文将从以下三个方面进行介绍&#xff1a;什么是DC电源模块、DC电源模块的工作原理以及DC电源模块的高效率特点。 一、什么是DC电源模块 DC电源模块是一种…

使用 KubeBlocks 为 K8s 提供稳如老狗的数据库服务

原文链接&#xff1a;https://forum.laf.run/d/994 大家好&#xff01;今天这篇文章主要向大家介绍 Sealos 的数据库服务。在 Sealos 上数据库后端服务由 KubeBlocks 提供&#xff0c;为用户的数据库应用保驾护航。无论你是在公有云还是本地环境中使用&#xff0c;Sealos 都能为…

基于JavaEE的ssm公司员工信息管理系统的设计与实现

基于JavaEE的ssm公司员工信息管理系统的设计与实现043 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存…

这么深入浅出理解k8s集群控制器,能行!

1、控制器&#xff0c;是k8s集群的“大脑” 控制器本身对我们来说并不陌生的。我们每天使用的洗衣机、冰箱、空调等&#xff0c;都是依靠控制器才能正常工作 K8S集群的核心组件逻辑上可以被分为三个部分&#xff1a;核心组件etc数据库&#xff0c;对etcd进行直接操作的入口组…

科学家使用DL和其他工具预测2019年新型冠状病毒宿主和传染性

一项新的研究表明&#xff0c;2019年新型冠状病毒&#xff08;2019-nCoV&#xff09;的人与人之间的传播可能早在2019年12月中旬就开始了。这些发现与武汉市卫生健康委员会在12月底或1月初的声明相矛盾&#xff0c;即“没有发现2019-nCoV在人与人之间传播的重要证据”。 这项研…

Netty核心源码解析(二)--ServerBootstrap启动过程

serverbootstrap用于建立netty服务端&#xff0c;核心逻辑-- 设置线程池-- bossGroup和workGroup设置accept连接handler定义服务器的serversocketchannel实现设置IO读写的业务逻辑相关childHanlder绑定监听端口-- 创建serversocketchannel对象初始化serversocketchannel--添加…

【HCIP】13.BGP选路

每条BGP路由至少携带3个属性&#xff0c;目的影响选路。 基本概念 公认必遵&#xff1a;所有厂家设备都要识别的属性&#xff1b;发送路由时必须携带的属性公认任意&#xff1a;所有厂家设备都要识别的属性&#xff1b;发送路由时候可以携带也可以不携带可选过渡&#xff1a;…

iPad怎么录屏?不会录屏?一步步教你操作!

ipad作为一款受欢迎的移动设备&#xff0c;不仅在娱乐和办公中发挥着重要作用&#xff0c;还可以用于创作和分享。录屏功能作为ipad的一项重要特性&#xff0c;允许用户将屏幕上的活动记录成视频&#xff0c;以便用于演示、教学、分享等用途。可是您知道ipad怎么录屏吗&#xf…

JVS低代码中表单引擎与逻辑引擎是如何联合调用外部API的?

在企业项目中&#xff0c;常常出现需要给外部系统提供一个api &#xff0c;让外部系统触发调用&#xff0c;本系统直接数据入库&#xff0c;那么我们来看看jvs的表单引擎与逻辑引擎联合实现这个功能&#xff0c;先看实现效果&#xff1a; 配置步骤&#xff1a; 一、配置列表页…