类和对象的下篇

𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary_walk

      ⸝⋆   ━━━┓
     - 个性标签 - :来于“云”的“羽球人”。 Talk is cheap. Show me the code
┗━━━━━━━  ➴ ⷯ

本人座右铭 :   欲达高峰,必忍其痛;欲戴王冠,必承其重。

👑💎💎👑💎💎👑 
💎💎💎自💎💎💎
💎💎💎信💎💎💎
👑💎💎 💎💎👑    希望在看完我的此篇博客后可以对你有帮助哟

👑👑💎💎💎👑👑   此外,希望各位大佬们在看完后,可以互相支持,蟹蟹!
👑👑👑💎👑👑👑 

 目录:
一:构造函数的补充
二:static修饰的变量以及函数
三:友元
四:内部类
五:匿名对象
六:拷贝对象的一些优化
七:深度理解封装

1:构造函数的补充
1.1初始化列表

类的成员里面有const 修饰的时候,我们在定义构造函数的时候,是有问题的,若不对当前const 修饰的变量进行初始化

const 修饰的变量必须在进行声明的时候就进行初始化

为解决这一问题,引出了初始化列表这个概念

对于自定义类型的成员,引用类型的成员并且对应的改类没有默认构造函数的,也需要借助 初始化列表来进行完成

1.2 注意:

     1:每个成员变量在初始化列表中只能出现一次(初始化只能初始化一次)
     2: 类中包含一些特殊的成员,必须放在初始化列表位置进行初始化

     3:不管是否显示在初始化列表中进行初始化,编译器都会默认在初始化列表中对所有是类的变量进行初始化

   4:初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟一个放在括号中的初始值或表达式。

   5:当定义的对象给出了初始化的值,在调用初始化列表的时候就会以给出的参数进行初始化,若是没有给出参数,就看看是否有缺省值,有的话使用缺省值,若是2个都没有编译器就会使用随机值

栗子见下:

 6:关于在初始化列表里面对类的成员进行初始化的先后顺序问题:是以类的成员定义的先后顺序进行初始化的

栗子见下:

 1.3 explicit关键字

对于自定义类型与内内置类型之间的转换的理解:

当我们不想让自定义类型与内置类型之间进行转换 的时候可以使用关键字 explicit

2:static修饰的变量以及函数
2.1概念

类的成员在生命的时候使用关键字static进行修饰,称之为类的静态成员

static修饰的函数称之为静态成员函数

注意对静态成员变量一定要在类的外面进行初始化

 2.2应用

 

 2.3 static 的特性

1.静态成员为所有的类对象共享,不属于某一个对象,是放在静态区的

2.静态成员变量必须在类外进行定义,定义时不能加关键字 static

3. 类的静态成员的访问:类名 :: 静态成员变量名字 或者对象.静态成员变量

4.静态成员函数是没有隐藏的this指针

5.静态成员也是类的成员,也受到访问限定符的限制

6. 静态成员函数可以调用静态成员变量

7.静态成员函数可以调用静态成员函数

8.非静态成员函数可以调用静态成员函数

3:友元
3.1概念

友元其实是打破了对类的封装:当我们对类的成员属性设置为private或者protected的时候,在类是不能直接进行访问的,这个时候借助友元函数或者友元类进OK

3.2友元类

友元类是单向的,不能双向互相访问

代码:

class Time
{
private:int _hour;int _min;int _sec;
public:friend class Date;//声明日期为时间的友元类(也就是Date里面可以访问Timel里面的私有成员)Time(int hour = 0,int min = 0,int sec = 0):_hour(hour),_min(min),_sec(sec){}
};
class Date
{
public:void Print(){cout << _year << '/' << _month << '/' << _day << endl;cout << _t._hour << ':' << _t._min<< ':' << _t._sec << endl;}Date(int year = 2024, int month = 4, int day = 2)//初始化列表:_year(year), _month(month), _day(day){cout << "Date()" << endl;}void SetTimeOfDate(int hour, int min, int sec){_t._hour = hour;_t._min = min;_t._sec = sec;}
private:int _year;int _month;int _day;Time _t;//自定义类型
};
int main()
{Date d(2024, 4, 3);d.SetTimeOfDate(21, 31, 42);d.Print();return 0;
}

运行结果:

 

3.3友元函数
lass Date
{
public://friend ostream& operator << (ostream& _cout, Date& d);//errfriend ostream& operator<< (ostream& _cout,const  Date& d);friend istream& operator>> (istream& _cin,  Date& d);Date(int year, int month, int day)//初始化列表:_year(year), _month(month),_day(day){}void Print(){cout << _year << '/' << _month << '/' << _day << endl;}/*ostream& operator << (ostream& _cout){_cout << _year << '/' << _month << '/' << _day << endl;return _cout;}*/
private:int _year;int _month;int _day;};
ostream& operator<< (ostream& _cout,const Date& d)
{_cout << d._year << '/' << d._month << '/' << d._day << endl;return _cout;
}
istream& operator>> (istream& _cin, Date& d)//注意第二个参数不能用const 修饰
{//一开始是不能对类外私有成员进行访问的,可以借助友元函数进行操作_cin >> d._year >>d._month>>d._day;return _cin;
}
int main()
{Date d1(2024, 4, 2);//cout << d1 << endl;//err 此时this 指针和_cout这个参数都进行抢占第一个参数的位置cin >> d1;cout << d1 << endl;return 0;
}

 

注意:

  1.友元函数不是类的成员,不属于任何类
  2.友元函数不属于该类的成员函数,它是定义在类外的普通函数,只是类中声明该函数可以直接访问类中的private或者protected成员  

  3.友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有声明。
  4.友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有声明。

4:内部类
概念: 如果一个类定义在另一个类的内部,这个内部类就叫做内部类 。内部类是一个独立的类,
它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越
的访问权限。
注意: 内部类是外部类的友元,但是外部类不一定就是内部类的友元 (看外部类是否进行友元的声明)

内部类的特点:

     1. 内部类可以定义在外部类的public、protected、private都是可以的。
    2. 注意内部类可以直接访问外部类中的static成员,不需要外部类的对象 / 类名。
    3. sizeof(外部类) = 外部类,和内部类没有任何关系。 

     4. 内部类在空间上是与外部类相互独立的但是受到外部类的类域的限制

5:匿名对象

书写形式:类名 ()

6:拷贝对象的一些优化
在传参和传返回值的过程中,一般编译器会做一些优化, 减少对象的拷贝 ,以此提高效率

栗子见下:

7:深度理解封装
在类和对象阶段,大家一定要体会到,类是对某一类实体(对象)来进行描述的,描述该对象具有那的属性,以及方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化   具体的对象。
结语:

以上就是今日的share,对于类和对象下期的理解还是比较好容易的(当然是建立在前期:对类和对象上,中期的理解),希望各位老铁们可以有所收获!

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

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

相关文章

2024年03月CCF-GESP编程能力等级认证Scratch图形化编程二级真题解析

本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里. 一、单选题(共 10 题,每题 3 分,共 30 分) 第1题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( )。 A、小程序 B、计时器 C、操作系统 D、神话人物 答案:…

【漏洞复现】大华 DSS user_edit.action 信息泄露漏洞

0x01 产品简介 DSS是大华的大型监控管理应用平台&#xff0c;支持几乎所有涉及监控等方面的操作&#xff0c;支持多级跨平台联网等操作。 可将视频监控、卡口拍照、 区间测速 、电子地图、违章查询系统等诸多主流应用整合在一起&#xff0c;实现更加智能、便捷的分级查询服务。…

CPU设计实战-FPGA基础操作学习

目录 硬件调试方法 ILA&#xff08;监控内如何端口信号&#xff09;或VIO核&#xff08;不仅可以监控还可以驱动&#xff09;进行硬件调试 添加ILAIP核 实例化ILAIP核 使用ILA排查错误 另一个debug方法 仿真 代码固化&#xff08;即写入Flash中&#xff09; 方法一 方…

代码随想录算法训练营第四十二天 | 卡码网46. 携带研究材料、416. 分割等和子集

代码随想录算法训练营第四十二天 | 卡码网46. 携带研究材料、416. 分割等和子集 卡码网46. 携带研究材料题目解法 416. 分割等和子集题目解法 感悟 卡码网46. 携带研究材料 题目 解法 题解链接 二维数组 # include <bits/stdc.h> using namespace std;int n, bagweig…

Jackson 2.x 系列【6】注解大全篇二

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …

WebKit揭秘:从内部结构到应用程序开发

文章目录 WebKit结构简介核心模块其他组件多进程架构&#xff08;WebKit2&#xff09; Wekbit做了什么&#xff1f;应用程序如何利用 Webkit WebKit结构简介 WebKit是一个开源的浏览器引擎&#xff0c;它由多个模块组成&#xff0c;这些模块协同工作以提供Web内容的渲染和交互…

英伟达智算先锋训练,冲刺智算时代实战

随着数字经济的深入发展&#xff0c;智能算力作为关键生产力&#xff0c;其规模在2022年已达到268.0 EFLOPS&#xff0c;并预计到2028年将增长至2769 EFLOPS&#xff0c;显示出强劲的发展势头。在2024年政府工作报告中&#xff0c;也首次提出了“人工智能”行动&#xff0c;强调…

Python轻量级框架Flask开发web应用(附源码自取)

目录 介绍 安装 简单初使用 新建项目目录 视图映射 无参映射 带参映射 ? 传参映射 连接mysql orm对象视图映射建表 ​编辑 crud操作 新增操作 查询操作 普通查询 查询返回json数据 前端传递json体数据查询 更新操作 删除操作 orm表关系映射 flask-migrate迁…

【Vue】vue3简介与环境配置

文章目录 项目编码规范什么是 Vue&#xff1f;安装node环境nvm针对node版本惊醒管理的工具 项目编码规范 组合式API Typescript setup(语法糖) 什么是 Vue&#xff1f; Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;…

JavaBean是什么?

Bean的本意为豌豆、子实&#xff0c;在这里引申为一种实体。JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean&#xff0c;类必须是具体的和公共的&#xff0c;并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性&#xff0…

【总结】在嵌入式设备上可以离线运行的LLM--Llama

文章目录 Llama 简介运用另一种&#xff1a;MLC-LLM 一个令人沮丧的结论在资源受限的嵌入式设备上无法运行LLM&#xff08;大语言模型&#xff09;。 一丝曙光&#xff1a;tinyLlama-1.1b&#xff08;10亿参数&#xff0c;需要至少2.98GB的RAM&#xff09; Llama 简介 LLaMA…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

【从零开始】自建高质量免费ip代理池(截止2024.4.1最新版)

文章目录 前言基础常识代理服务器状态码端口号 常见免费ip代理池网站实现思路代码实现main.pyutils.pydemo.py 结果如下 前言 为了防止ip被封后还能爬取网页&#xff0c;最常见的方法就是自己构建一个ip代理池。 本来用的是下面这个开源项目ip代理池&#xff0c; github开源项…

二维数字滤波器设计

Rafael C. Gonzalez “Digital Image Processing”的错误 按理说这本书的第三作者Steven是数字信号处理出身&#xff0c;他本人又对信号处理非常熟悉&#xff0c;不能理解为什么这本书的频域滤波器一章几乎没有对的地方。 对于巴特沃斯等模拟滤波器&#xff0c;利用全通带减去…

GPT 模型解析:ChatGPT 如何在语言处理领域引领潮流?

人工智能时代来临 我们正处于AI的iPhone时刻。——黄仁勋&#xff08;英伟达CEO&#xff09; ChatGPT 好得有点可怕了&#xff0c;我们距离危险的强人工智能不远了。——马斯克&#xff08;Tesla/SpaceX/Twitter CEO&#xff09; 以上的内容说明我们现在正处于一个技术大翻牌的…

就业班 第二阶段 2401--3.29 day9 shell之正则+数组

九、shell 编程-数组 普通数组:只能用整数作为数组的索引 关联数组:可以使用字符串作为数组的索引 数组定义 普通数组定义: [rootnewrain shell]# books( linux shell awk sed ) 引用: [rootnewrain shell]# echo ${books[0]} linux [rootnewrain shell]# echo ${books[1]…

篮球竞赛预约平台的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)篮球馆,篮球赛,竞赛项目,赛事预约

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

苍穹外卖06(HttpClient,微信小程序开发,微信登录流程,获取授权码从微信平台获取用户信息)

目录 一、HttpClient 1. 介绍 2. 入门案例 1 导入依赖(已有) 2 GET方式请求 2 POST方式请求 二、微信小程序开发 1. 介绍 2. 准备工作 1 注册小程序获取AppID 注册小程序 完善小程序信息 2 下载并安装开发者工具 3 设置小程序开发者工具(必做) 3. 入门案例 1 小…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入&#xff08;Loop and Import&#xff09;2. 简单移动&#xff08;Simple move&#xff09;3. 首次攻击&#xff08;First Attack&#xff09;4. 爬虫的身体部分&#xff08;Creeps Bodies&#xff09;5. 存储和转移 &#xff08;Store and Tra…