当前位置: 首页 > news >正文

c++--类型的基础

1.常量对象,常量成员函数
(1).常量对象
常量对象的引用和指针不能调用类的普通的成员函数。只能调用常量成员函数。
(2).常量成员函数:把const放在类成员函数参数列表后。表示隐含的this是一个指向常量的指针
(3).当创建一个const对象时,直到构造函数完成初始化过程,对象才取得其常量属性。

2.友元
(1).类可以允许其他类或函数访问它的非公有成员,方法是令其他类或函数成为它的友元。
(2).友元:在类内为对应函数(成员函数或非成员函数)或类加上一个friend开头的声明。
(3).把一个A类的成员函数FunA声明为令一个类B的友元时,需要组织下定义和声明顺序。
a.定义A。
b.定义B,声明A::FunA为其友元。
c.定义A:FunA。

3.内联函数
类内部定义函数的默认为内联的
类外部定义函数时,加上inline修饰使其内联。
内联是否有效取决于编译器判断。

4.可变数据成员
mutable 类型 变量名;然后可以在const成员函数里访问和修改此数据成员。

5.类内初始值

class x
{
private:int a = 0;vector<int> b{0};
};

6.类声明
类在声明后定义前这段区间属于不完全类型。此时只能,定义指向此类型的指针或引用;声明以其为形参或返回类型的函数。
类内部不能有类自己的成员声明。指向类自己的指针或引用可以。

class A;// ok
A* p = nullptr;// ok
A& pp = *p;// ok
A fun(A a);// okclass A
{
private:A m_ppp;// errA* m_p;// okA& m_pp;// okint m_i;
};int main()
{return 0;
}

7.类的定义分两步处理:
(1).编译成员的声明。
(2).直到类全部可见才编译函数体,意味着函数体内可以使用类中任何成员。

成员函数的返回类型或参数列表中名字,须使用前可见。
意味着成员函数的返回类型,形参类型必须在类定义中:
a.前面部分。
b.外层作用域内已经被声明。

class A
{
public:B fun();// errvoid fun(B);// errvoid fun(){B* p = nullptr;// ok}class B;B fun2();// okvoid fun2(B);// ok
};int main()
{
}

8.构造函数
(1).对const,引用或某种未提供默认构造函数的类类型的类内成员,则必须通过构造函数初始值列表为这些成员提供初值。
随着构造函数体一执行,初始化就完成了。构造函数体内不属于初始化过程

(2).类成员初始化顺序和他们在类定义中出现顺序一致。(构造函数初始值列表无法影响初始化顺序)。

(3).默认初始化:
块作用域内定义不含初始值的非静态变量或数组;类类型成员中没在构造函数初始值列表中初始化的。

(4).值初始化:
数组初始化时,初始值数量少于数组大小时,后续数组元素;定义局部静态变量无初始值;显式请求值初始化T()。

(5).默认初始化,值初始化效果
对基本数值类型,默认初始化后,值大小为未知。值初始化后,为0。
对类类型,默认初始化,值初始化均指向默认构造函数。

如果构造函数只接受一个形参,则它实际上定义了通过形参类型自动转化为此类类型的隐式转换机制。
在构造函数声明前加explicit可以阻止此隐式转换发生。定义处不用加explicit。

9.聚合类
(1).条件:
所有成员都是public
没定义任何构造函数
没类内初始值
没基类,没virtual函数

(2).针对这种类型可以成员初始值列表初始化。

10.类的静态成员
(1).特性
类的静态成员存在于任何此类型实例对象之外。
类的静态成员函数不包含this指针。

(2).访问
可通过类对象,引用或指针或作用域运算符来访问静态成员。
成员函数内,可直接访问。

(3).初始化
在类外部初始化静态成员时,不能重复static。
静态数据成员,不是在构造函数中初始化的。必须在类外部定义和初始化每个静态成员。

(4).不同于普通成员处:
静态数据成员可以是不完全类型,类的非静态成员则不可。
可以用静态成员做默认实参,类的非静态成员则不可。

#include <iostream>
class A
{
public:A(){}public:static A m_a;// ok
};A A::m_a;
void fun(A a = A::m_a)// ok
{}int main()
{return 0;
}

相关文章:

c++--类型的基础

1.常量对象&#xff0c;常量成员函数 (1).常量对象 常量对象的引用和指针不能调用类的普通的成员函数。只能调用常量成员函数。 (2).常量成员函数&#xff1a;把const放在类成员函数参数列表后。表示隐含的this是一个指向常量的指针 (3).当创建一个const对象时&#xff0c;直到…...

Python with提前退出:坑与解决方案

Python with提前退出&#xff1a;坑与解决方案 问题的起源 早些时候使用with实现了一版全局进程锁&#xff0c;希望实现以下效果&#xff1a; Python with提前退出&#xff1a;坑与解决方案 全局进程锁本身不用多说&#xff0c;大部分都依靠外部的缓存来实现的&#xff0c;r…...

Vue3-provide和inject

作用和场景&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 跨层传递普通数据&#xff1a; 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 既可以传递普通数据&#xff0c;也可以使用ref传递响应式数据&#xff08…...

Python与设计模式--适配器模式

23种计模式之 前言 &#xff08;5&#xff09;单例模式、工厂模式、简单工厂模式、抽象工厂模式、建造者模式、原型模式、(7)代理模式、装饰器模式、适配器模式、门面模式、组合模式、享元模式、桥梁模式、&#xff08;11&#xff09;策略模式、责任链模式、命令模式、中介者模…...

大模型能否生成搜索引擎的未来?

文&#xff5c;郝 鑫 编&#xff5c;刘雨琦 ChatGPT火爆之前&#xff0c;水面下&#xff0c;也有中国公司也在朝着智能助手的方向努力。夸克便是其中之一。在GPT风靡科技圈后&#xff0c;国内就开始陆续冒出一些大模型厂商。对当时夸克而言&#xff0c;做大模型毋庸置疑&am…...

鸿蒙开发-ArkTS 语言-状态管理

[写在前面: 文章多处用到gif动图&#xff0c;如未自动播放&#xff0c;请点击图片] 衔接上一篇:鸿蒙开发-ArkTS 语言-基础语法 3. 状态管理 变量必须被装饰器装饰才能成为状态变量&#xff0c;状态变量的改变才能导致 UI 界面重新渲染 概念描述状态变量被状态装饰器装饰的变…...

一篇文章带你掌握MongoDB

文章目录 1. 前言2. MongoDB简介3. MongoDB与关系型数据库的对比4. MongoDB的安装5. Compass的使用6. MongoDB的常用语句7. 总结 1. 前言 本文旨在帮助大家快速了解MongoDB,快速了解和掌握MongoDB的干货内容. 2. MongoDB简介 MongoDB是一种NoSQL数据库&#xff0c;采用了文档…...

删除docker镜像

随着我们拉取的镜像越来越多&#xff0c;镜像的管理越来越难。这时候可能就需要删除镜像了。 本关的任务是学习如何删除容器&#xff0c;要求学习者参照示例&#xff0c;将busybox:latest镜像删除。 相关知识 删除镜像 如果要删除本地的镜像&#xff0c;可以使用 docker rm…...

力扣 --- 删除有序数组中的重复项 II

题目描述&#xff1a; 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c;返回删除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的…...

Opencv图像处理(全)

文章目录 博主精品专栏导航备注&#xff1a;以下源码均可运行&#xff0c;不同项目涉及的函数均有详细分析说明。11、图像项目实战&#xff08;一&#xff09;银行卡号识别 —— sort_contours()、resize()&#xff08;二&#xff09;文档扫描OCR识别 —— cv2.getPerspectiveT…...

Flutter桌面应用开发之毛玻璃效果

目录 效果实现方案依赖库支持平台实现步骤注意事项话题扩展 毛玻璃效果&#xff1a;毛玻璃效果是一种模糊化的视觉效果&#xff0c;常用于图像处理和界面设计中。它可以通过在图像或界面元素上应用高斯模糊来实现。使用毛玻璃效果可以增加图像或界面元素的柔和感&#xff0c;同…...

基于C#实现优先队列

一、堆结构 1.1性质 堆是一种很松散的序结构树&#xff0c;只保存了父节点和孩子节点的大小关系&#xff0c;并不规定左右孩子的大小&#xff0c;不像排序树那样严格&#xff0c;又因为堆是一种完全二叉树&#xff0c;设节点为 i,则 i/2 是 i 的父节点&#xff0c;2i 是 i 的…...

ssm+vue的仓库在线管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的仓库在线管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三…...

什么是木马

木马 1. 定义2. 木马的特征3. 木马攻击流程4. 常见木马类型5. 如何防御木马 1. 定义 木马一名来源于古希腊特洛伊战争中著名的“木马计”&#xff0c;指可以非法控制计算机&#xff0c;或在他人计算机中从事秘密活动的恶意软件。 木马通过伪装成正常软件被下载到用户主机&…...

Pinia仓库统一管理

pinia独立维护 在src/stores文件夹下创建index.js文件&#xff0c;将main.js中关于pinia的语句放到index.js中 index.js文件内容&#xff1a; import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstate const pinia createPi…...

[论文阅读]VoxSet——Voxel Set Transformer

VoxSet Voxel Set Transformer: A Set-to-Set Approach to 3D Object Detection from Point Clouds 论文网址&#xff1a;VoxSet 论文代码&#xff1a;VoxSet 简读论文 这篇论文提出了一个称为Voxel Set Transformer(VoxSeT)的3D目标检测模型,主要有以下几个亮点: 提出了基于…...

【开源】基于Vue.js的医院门诊预约挂号系统的设计和实现

项目编号&#xff1a; S 033 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S033&#xff0c;文末获取源码。} 项目编号&#xff1a;S033&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 功能性需求2.1.1 数据中心模块2.1.2…...

1、Mysql架构与历史

Mysql逻辑架构 最上层是服务并不是Mysql所独有的&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构&#xff0c;比如连接处理&#xff0c;授权认证&#xff0c;安全等。 第二层是Mysql比较有意思的部分。大多数Mysql的核心服务都在这一层&#xff0c;…...

考试复习

选择20道 填空10道 判断10道 简答4-5道 编程题2道 一、选择题 1.js中更改一个input框的值&#xff1a; <input ida type"text" value"123456"> 通过a.value改变他的值 方法&#xff1a; 在script标签中通过id获得该输入框对象&#xff0c;然…...

使用Docker一键安装MySQL与Nginx脚本

在项目开发和部署过程中&#xff0c;使用Docker可以方便地快速搭建和管理数据库&#xff08;MySQL&#xff09;以及Web服务器&#xff08;Nginx&#xff09;。本教程将为你提供一份一键安装脚本。 安装Docker 首先&#xff0c;确保你的系统已经安装了Docker。如果没有安装&am…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...