类的组合、作用域与可见性、类的静态成员、单例模式、
类的组合
一个类内嵌其他类的对象作为成员的情况
has - a组合
初始化列表的另一用途:为了调用数据成员的带参构造函数
能够层层递进

class Line
{
public:Line(int x1 = 0, int y1 = 0, int x2 = 0, int y2 = 0);Line(const Line &other);~Line();Line(const Point &p1, const Point &p2);void showLine(void);
private:Point m_p1, m_p2;
};
Line::Line(int x1, int y1, int x2, int y2) : m_p1(x1, y1), m_p2(x2, y2)
{}Line::Line(const Line &other) : m_p1(other.m_p1), m_p2(other.m_p2)
{}Line::~Line()
{}Line::Line(const Point &p1, const Point &p2) : m_p1(p1), m_p2(p2)
{}void Line::showLine()
{m_p1.showPoint();cout << "->";m_p2.showPoint();cout << endl;
}
Line l1(1, 2, 3, 4);Line l2(l1);Point p1(5, 6);Point p2(7, 8);Line l3(p1, p2);l1.showLine();l2.showLine();l3.showLine();

前向引用声明
针对引用和指针
class A; //前向声明class B
{
public:void fn(A *a){} //或者 void fn(A &a){}};class A
{
public:void fn(B *b){} //或者 void fn(B &b){}
};
作用域
全局作用域 — 名称前面加两个冒号
匿名作用域(相当于c中的static) — 直接使用

作用域的关系

全局命名空间作用域,要访问时加上::
例::x
作用域可见性的一般规则如下:
1、标识符要声明在前,引用在后
2、在同一作用域中,不能声明同名的标识符
3、在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响
4、如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见
生存期
静态生存期:对象的生存期与程序的运行期相同
全局变量(全局对象)
static修饰的静态局部变量:调用时创建,程序结束之后销毁
动态生存期:诞生于声明点,作用域结束时会被销毁
匿名对象生存期:
匿名对象:函数返回值为一个对象时,调用函数返回的对象就是匿名对象
为动态生存期,若是对匿名对象加名字(加常引用),匿名对象生存期将会被改变
const Clock &ref = Clock(11, 22, 33);
左值和右值
locatiable left value:能被取地址就是左值
readable right value:不能被取地址就是右值
所有的匿名对象都是右值而非左值
右值引用:希望能够使用匿名对象,起一个右值引用类型的别名
(给匿名对象起名字)
例:Clock &&ref = Clock(11, 22, 33);
类的静态成员
静态属性不为本类对象所特有的,而为本类所有对象所共有的属性
数据类型 类名 ::成员名

即类中的对象为声明,实际的对象是全局变量
静态对象函数:不需要使用对象.函数来调用,可以直接类名::函数来使用
静态数据成员:具有唯一性,对象有几个都没关系,这个成员在内存中只有一份
静态成员函数:不需要对象出现就能调用
在类的静态成员中不能访问类的非静态成员
在类的非静态成员中既可以访问类的非静态数据成员也可以访问类的静态数据成员
单例模式

#include <iostream>using namespace std;class Singleton
{
public:static Singleton *creat()//creat在没有对象的时候也能调用(类名::函数){if (m_p == NULL){m_p = new Singleton;//new:在堆上申请一个空间}return m_p;}static void destory(){delete m_p;//相当于freem_p = NULL;}
private:Singleton() {}static Singleton *m_p;//使得对象只能创建一个
};Singleton *Singleton::m_p = NULL;int main()
{Singleton *p, *q;p = Singleton::creat();q = Singleton::creat();//虽然分两次调用,但是调用的都是同一个东西,称为单例调用cout << p << endl;cout << q << endl;Singleton::destory();//类的使用者使用完之后调用销毁程序return 0;
}
使用counter验证是否为单例模式

#include <iostream>using namespace std;class Singleton
{
public:static Singleton *creat()//creat在没有对象的时候也能调用(类名::函数){if (m_p == NULL){m_p = new Singleton;//new:在堆上申请一个空间}return m_p;}static void destory(){delete m_p;//相当于freem_p = NULL;}static int getcounter(){return counter;}~Singleton(){--counter;}
private:Singleton(){++counter;}static Singleton *m_p;//使得对象只能创建一个static int counter;
};Singleton *Singleton::m_p = NULL;
int Singleton::counter = 0;int main()
{Singleton *p, *q;cout << Singleton::getcounter() << endl;p = Singleton::creat();q = Singleton::creat();//虽然分两次调用,但是调用的都是同一个东西,称为单例调用cout << Singleton::getcounter() << endl;cout << p << endl;cout << q << endl;Singleton::destory();//类的使用者使用完之后调用销毁程序cout << Singleton::getcounter() << endl;return 0;
}
类的友元函数 / 类
临时打破类的访问权限设置,从而在类外对类内的私有成员访问的机制
相关文章:
类的组合、作用域与可见性、类的静态成员、单例模式、
类的组合 一个类内嵌其他类的对象作为成员的情况 has - a组合 初始化列表的另一用途:为了调用数据成员的带参构造函数 能够层层递进 class Line { public:Line(int x1 0, int y1 0, int x2 0, int y2 0);Line(const Line &other);~Line();Line(const Po…...
高速公路定向广播(声光一体) HT-600D
1、产品概述: HT-600D声光一体平面波IP定向广播是北京恒星科通创新性研发产品,采用公司自主研发的平面波传声技术,该产品具有高声压、强指向性、高清晰度等特点,采用定向声传声技术将声音聚集到正前方定向传输,周边声压级明显降低…...
2024离婚新规已生效,不用等30天冷静期,线上开庭
2024年离婚必知的12条法律知识: ✅分居多久都不会自动离婚,想离婚,必需通过协议或起诉程序离婚 ✅婚后的工资收入,继承的遗产(未指定只给一人)都是夫妻共同财产 ✅没有领结婚证,或领证后没有共同生活&#…...
从零搭建python环境:深入解析虚拟环境与Python版本管理
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:为何需要虚拟环境? 二、虚拟环境的创建与命名 1. 虚拟环境…...
windows安装官方正版notepad++
一 、notepad介绍 Notepad 是一个免费的、开源的文本编辑器,主要面向程序员和高级用户。以下是 Notepad 的特点: 跨平台: 虽然主要为 Windows 平台设计,但可以通过 Wine 在 Linux 和 macOS 上运行。 语法高亮: 自动识…...
netty-socketio 集群随记
实现netty-socketio集群的方式 代码实例 PostConstructpublic void subscribe() {pubSubStore.subscribe(PubSubType.DISPATCH, new PubSubListener<DispatchMessage>() {Overridepublic void onMessage(DispatchMessage message) {log.debug("subscribe: {}"…...
查看目录或文件的磁盘使用情况
在排查问题过程中,会遇到磁盘占满,需要排查具体哪个文件占用比较大,此时可以使用du 命令 du [选项] [文件或目录...] 常用的选项包括: -h 或 --human-readable:以人类可读的格式(如 K、M、G)…...
如何选择合适的自动化框架
自动化测试框架的选型是一个复杂且重要的过程,需要考虑多个因素以确保所选框架能够满足项目的需求。以下是一些建议的步骤和考虑因素: 1. 明确项目需求: * 首先,要明确项目的测试需求,包括测试的类型(如…...
Java面试进阶指南:高级知识点问答精粹(二)
Java 面试问题及答案 1. 什么是Java内存模型(JMM)?它在并发编程中扮演什么角色? 答案: Java内存模型(JMM)是一个抽象的模型,它定义了Java程序中各种变量(线程共享变量&…...
thinkphp 使用模型实现多表连接查询
解决问题,多张表的查询连接问题,3张表及以上 爷爷表 有字段id 爸爸表 有字段id,grandfather_id 儿子表 id,parent_id 控制器中编写 public function getdata(){ $data model(爷爷表)->with([father.son])->select(); var_dump($data…...
LeetCode674:最长连续递增序列
题目描述 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l < i < r,都有 nums[i] < nums…...
Java技术精粹:高级面试问题与解答指南(一)
Java 面试问题及答案 问题1:请解释Java中的多态性,并给出一个例子。 答案: 多态性是Java中的一个重要特性,它允许一个引用类型可以指向多种实际类型的对象,并且可以通过这个引用调用实际对象的方法。多态性主要通过继…...
数据可视化技术头歌测试合集
努力是为了不平庸~ 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰 目录 时间趋势可视化-柱形图 第1关:“大胃王”比赛数据柱形图绘制——绘制柱形图的基本步骤 任务描述 相关知识 观察和处理数据 绘…...
【linux-IMX6ULL-字符设备驱动简单框架实验】
目录 1. 字符设备驱动简介1.1 重要函数1.2 简单框架代码流程1.3 linux中关于驱动的重要命令 2. 字符设备驱动简单框架编写2.1 添加LICENSE信息2.2 驱动模块的入口与出口2.3 入口和出口函数的编写2.4 设备操作结构体定义2.4.1 结构体函数内容填充 3. 应用程序简介:4.…...
3D模型旋转显示不全怎么办---模大狮模型网
在3D建模和渲染过程中,我们有时会遇到旋转模型时显示不全的问题。这种情况可能由多种原因造成,包括模型本身的问题、软件设置不当、硬件配置不足等。本文将为您详细介绍几种可能的解决方法,帮助您解决3D模型旋转显示不全的问题。 一、检查模型…...
DLRover:蚂蚁集团开源的AI训练革命
在当前的深度学习领域,大规模训练作业面临着一系列挑战。首先,硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次,传统的检查点机制在大规模训练中效率低下,耗时长且容易降低训练的有效时间。资源管理的复杂性也给…...
ubuntu_概念
su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统,方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…...
Oracle递归查询笔记
目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…...
FaceFusion源码框架解读
FaceFusion源码框架解读 我的视频讲解:FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具,一款非常好用的换脸工具,操作简单,上手容易。 Facefusion:GitHub - facefusion/facefusion: Next gene…...
React项目知识积累(三)
1.primary-color 公共样式 less文件中的primary-color,会在config.js中的theme中统一写,方便统一更改。 config.js: theme{"primary-color":"#f0f0f0","font-size":"16px", }less: .classname{color:primary-…...
ClusterFuzz终极内存泄漏检测指南:LSAN与UBSAN的完整配置教程
ClusterFuzz终极内存泄漏检测指南:LSAN与UBSAN的完整配置教程 【免费下载链接】clusterfuzz Scalable fuzzing infrastructure. 项目地址: https://gitcode.com/gh_mirrors/cl/clusterfuzz ClusterFuzz是一款强大的可扩展模糊测试基础设施,能够帮…...
.games 域名重塑数字娱乐边界
在互联网基础设施日益垂直化的今天,域名已不再仅仅是简单的网络地址,它已进化为一种数字资产的视觉锤和品牌战略的先导。在众多的新顶级域名(gTLD)中,“.games”凭借其鲜明的行业属性,正在重构全球游戏开发…...
Qwen3.5-2B企业降本案例:用2B模型替代8B,GPU成本降低57%实录
Qwen3.5-2B企业降本案例:用2B模型替代8B,GPU成本降低57%实录 1. 轻量化模型带来的成本革命 在AI应用大规模落地的今天,模型部署成本已成为企业最关注的痛点之一。我们团队近期完成了一个典型案例:用Qwen3.5-2B模型成功替代原有8…...
别再纠结SSR还是SSG了!用create-nuxt-app创建项目时,这个选择直接影响你的部署成本
Nuxt.js渲染模式深度解析:如何用create-nuxt-app做出高性价比技术选型 在2023年的前端技术栈中,Nuxt.js依然保持着作为Vue生态中最成熟SSR解决方案的领先地位。但很多团队在项目启动时,往往会在create-nuxt-app的配置界面陷入纠结——特别是当…...
【书生·浦语】internlm2-chat-1.8b效果展示:中文诗歌创作+格律校验双能力
【书生浦语】internlm2-chat-1.8b效果展示:中文诗歌创作格律校验双能力 当AI不仅能写诗,还能自己检查格律——这才是真正的"诗人助手" 1. 模型简介:小而精的诗歌创作专家 InternLM2-Chat-1.8B虽然只有18亿参数,但在中文…...
面向 LLM 的程序设计 3:LLM-Friendly 的响应结构:扁平键、稳定字段与类型标注
在满足能力端点与确定性契约之后,响应长什么样仍会直接影响模型能不能「读对结果、少误解、少编造字段」。本系列继续围绕「让 AI 更好理解、更好调用」,讨论如何把 JSON 响应设计成对模型和后续工具链都更友好:键名稳定、层次尽量扁平、数组…...
ERTEC 系列 PROFINET 芯片级硬件过滤器分析
起因是我想在搞一些操作windows进程的事情时,老是需要右键以管理员身份运行,感觉很麻烦。就研究了一下怎么提权,顺手瞄了一眼Windows下用户态权限分配,然后也是感谢《深入解析Windows操作系统》这本书给我偷令牌的灵感吧ÿ…...
像素幻梦应用场景:独立开发者快速构建像素风APP启动页与加载动画
像素幻梦应用场景:独立开发者快速构建像素风APP启动页与加载动画 1. 为什么独立开发者需要像素幻梦 在移动应用市场竞争激烈的今天,一个独特的视觉风格往往能成为APP脱颖而出的关键。对于独立开发者而言,设计精美的启动页和加载动画不仅能提…...
LFM2.5-1.2B-Thinking-GGUF惊艳效果:32K上下文下长文档关键信息抽取准确率实测
LFM2.5-1.2B-Thinking-GGUF惊艳效果:32K上下文下长文档关键信息抽取准确率实测 1. 模型效果实测背景 LFM2.5-1.2B-Thinking-GGUF作为Liquid AI推出的轻量级文本生成模型,在低资源环境下展现出令人惊喜的性能表现。本次测试聚焦于模型在32K超长上下文环…...
Qwen2-VL-2B-Instruct一键部署教程:Ubuntu 20。04环境快速搭建
Qwen2-VL-2B-Instruct一键部署教程:Ubuntu 20.04环境快速搭建 想试试这个能看懂图片还能跟你聊天的AI模型吗?Qwen2-VL-2B-Instruct是个挺有意思的多模态模型,不仅能处理文字,还能理解图片内容,进行对话。今天咱们就来…...
