C++笔记(三)

封装意义:

在设计类的时候,属性和行为写在一起,表现事物

类在设计时,可以把属性和行为放在不同的权限下,加以控制。

访问权限有三种:

public 公共

类内 类外都可以访问,

protected保护

类内可以访问 类外不可以访问 儿子可以访问父亲中的保护内容

private 私有

类内可以访问 类外不可以访问 儿子不可以访问父亲中的保护内容

struct 和 class的区别

在C++中struct和class的唯一区别就在于默认访问权限不同

struct默认权限为公共 class默认权限为私有

成员属性私有化

成员属性设置为私有:可以自己控制读写权限;可以通过设置一些公共的接口来进行访问私有属性

对于写可以检测数据的有效性

在public的接口函数里判断 如设置年龄的函数里对年龄小于0大于200的进行检查

对象的初始化和清理

构造函数和析构函数:

对象的初始化和清理是两个非常重要的安全问题。

​ 一个对象或者变量没有初始状态,对其使用后果是未知的。

​ 使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。

构造函数:主要作用在创建对象时为对象的成员属性赋值,构造函数有编译器自动调用,无需手动调用。

构造函数语法:

类名(){}

构造函数,没有返回值,也不写void

函数名称与类名相同

构造函数可以有参数,因此可以发生重载

程序在调用对象时会自动调用构造,无需手动调用,且只会调用一次

析构函数:主要作用在于对象销毁前系统自动调用,执行一些清理工作。

析构函数语法:

~类名(){}

析构函数,没有返回值,也不写void

函数名称与类名相同,在名称前加上符号 ~

析构函数不可以有参数,因此不可以发生重载

程序在对象销毁前会自动调用析构函数,无需手动调用,且只会调用一次

构造和析构都是必须有的实现,如果我们自己不提供,编译器会提供一个空实现的构造和析构

构造函数的分类及调用:

两种分类方式:

按参数分为:有参构造和无参构造

按类型分为:普通构造和拷贝构造

拷贝函数的写法:

Person(const Person &p)

{

age=p.age;

}

三种调用方式:

括号法

Person p1;//默认构造函数调用

Person p2(10);//有参构造函数

Person p3(p2);//拷贝构造函数

注意事项:

调用默认构造函数时候不要加(),如Person p1()编译器会认为是一个函数的声明

显示法

Person p1;

Person p2=Person (10);//有参构造

Person p3=Person(p2);//拷贝构造

等号右边如Person (10)单独拎出来叫做匿名对象 特点:当前行执行完后系统自动回收匿名对象

注意事项二:不要利用拷贝构造函数初始化匿名对象 编译器会认为 Person(p3)===Person p3,但是p3在Person p3(p2);中已经定义过了

如:Person(p3);

隐式转换法

Person p4=10;//相当于写了Person p4 = Person(10);调用了有参构造

Person p5=p4//拷贝构造

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

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

相关文章

蓝桥杯备战——5.动态数码管扫描

1.分析原理图 经查阅说明书得知数码管为共阳极,共阳端口接到了U8,而段码接到了U7。 如果需要选中U8,我们只需要将P250;P261;P271; 如果需要选中U7,我们只需要将P251;P261;P271; 2.代码示例 void Delay1ms() //12.000MHz {unsigned char data i, j;i 12;j 169;…

ubuntu20.04 格式化 硬盘 扩展硬盘GParted

如何在 Ubuntu 22.04 LTS 上安装分区编辑器 GParted?_gparted安装-CSDN博客 sudo apt install gparted 步骤5:启动GParted 安装完成后,您可以在应用程序菜单中找到GParted。点击它以启动分区编辑器。 通过以上步骤,您可以在Ubun…

【2024】新建mysql数据库,如何选择字符集和排序规则

如何使用 Navicat 新建 MySQL 数据库,并选择字符集与排序规则 如何使用 Navicat 新建 MySQL 数据库并选择字符集与排序规则1. 开始之前2. 新建数据库步骤 1: 打开 Navicat步骤 2: 创建新数据库步骤 3: 填写数据库名称 常见的字符集和排序规则及其选择场景1. 字符集&…

7.前端--CSS-复合选择器

1.什么是复合选择器 复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的,可以更准确、更高效的选择目标元素(标签) 常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等 2.后代选择器 …

定时器越走越快的原因

在上述例子中,本应每1秒输出一次,但在多次点击按钮后会变成每0.9秒、0.8秒、0.7秒… 就输出一次,即定时器时间间隔越来越短,这就是所谓的定时器越走越快。 其实原因很简单,在多次点击按钮时,多次创建了定时…

【卡梅德生物】单域抗体|纳米抗体|VHH文库构建

单域抗体,也称为VHH(Variable domain of heavy chain of HCAb)抗体或纳米抗体,是一种小型抗体分子。与传统抗体相比,VHH具有更小的分子尺寸、更高的稳定性和更易于工程化的特点,具有广泛的生物医学应用潜力…

LeetCode:670. 最大交换(Java 贪心)

目录 670. 最大交换 题目描述: 实现代码与解析; 贪心 原理思路: 670. 最大交换 题目描述: 给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释…

flink基础概念之什么是时间语义

什么是时间语义 Flink支持三种不同的时间语义,以便处理流式数据中的事件时间、处理时间和摄入时间。 1. 处理时间(Processing Time) 处理时间的概念非常简单,就是指执行处理操作的机器的系统时间。 在这种时间语义下处理窗口非…

接口自动化测试实践

众所周知,接口自动化测试有着如下特点: 低投入,高产出。 比较容易实现自动化。 和UI自动化测试相比更加稳定。 如何做好一个接口自动化测试项目呢? 我认为,一个“好的”自动化测试项目,需要从“时间”…

05-Seata下SQL使用限制

不支持 SQL 嵌套不支持多表复杂 SQL(自1.6.0版本,MySQL支持UPDATE JOIN语句,详情请看不支持存储过程、触发器部分数据库不支持批量更新,在使用 MySQL、Mariadb、PostgreSQL9.6作为数据库时支持批量,批量更新方式如下以 Java 为例 …

掌握大语言模型技术: 推理优化

掌握大语言模型技术_推理优化 堆叠 Transformer 层来创建大型模型可以带来更好的准确性、少样本学习能力,甚至在各种语言任务上具有接近人类的涌现能力。 这些基础模型的训练成本很高,并且在推理过程中可能会占用大量内存和计算资源(经常性成…

C++:反向迭代器-reverse_iterator

目录 1.关于反向迭代器 2.反向迭代器的成员函数 1.构造 2.base 3.operator* 4.operator 5.operator-- 6.operator-> 7.operator[] 3.反向迭代器的模拟实现 小结 1.关于反向迭代器 在C中,可以使用反向迭代器来逆序遍历容器中的元素。反向迭代器是通过…

链表的中间结点,简单的快慢指针问题

总结 struct ListNode* middleNode(struct ListNode* head) {struct ListNode*fasthead;struct ListNode*slowhead;while( fast && fast->next)//结束条件{slowslow->next;fastfast->next->next;}return slow; }

组件冲突、data函数、组件通信

文章目录 1.组件的三大组成部分 - 注意点说明2.组件的样式冲突(用 scoped 解决)3.data是一个函数4.组件通信1.什么是组件通信?2.不同的组件关系 和 组件通信方案分类 5.prop详解prop 校验①类型校验②完整写法(类型,非…

面试项目问题

1. 你们这个项目多少人在做?人员分布是怎样的?做了多长时间? 我们项目组一共十个人,包括四个后端开发人员、两个前端开发人员、两个测试人员和两个产品经理。 从需求分析、设计、开发到测试上线到最后的维护阶段,整个项目的周期大概是六个月左右。 …

REVIT二次开发设置门垛高度

步骤1 步骤2 步骤3 using System; using System.Collections.Generic; using System.Linq; using System

Redis 持久化详解:RDB 与 AOF 的配置、触发机制和实际测试

什么是持久化? 就是 Redis 将内存数据持久化到硬盘,避免从数据库恢复数据。之所以避免从数据库恢复数据是因为后端数据通常有性能瓶颈,大量数据从数据库恢复可能会给数据库造成巨大压力。 Redis 持久化通常有 RDB 和 AOF 两种方式&#xff…

《开始使用PyQT》 第01章 PyQT入门 02 安装Python3和PyQT6

02 安装Python3和PyQT6 《开始使用PyQT》 第01章 PyQT入门 02 安装Python3和PyQT6 So that all readers are on the same page, let’s begin by installing or updating your version of Python. 为了让所有读者都能理解,让我们从安装或更新 Python 版本开始。 …

计算机网络 第5章(运输层)

系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 计算机网络 第5章(运输层) 计算机…

vue3之 websoket发送消息

1.封装websoket var ws null; //建立的连接 var lockReconnect false;//是否真正建立连接 var timeout 6 * 1000 * 5;//30秒一次心跳 var timeoutObj null;//心跳心跳倒计时 var serverTimeoutObj null;//心跳倒计时 var timeoutnum null;//断开 重连倒计时 var global_…