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

类的组合、作用域与可见性、类的静态成员、单例模式、

类的组合

一个类内嵌其他类的对象作为成员的情况

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组合 初始化列表的另一用途&#xff1a;为了调用数据成员的带参构造函数 能够层层递进 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、产品概述&#xff1a; HT-600D声光一体平面波IP定向广播是北京恒星科通创新性研发产品&#xff0c;采用公司自主研发的平面波传声技术&#xff0c;该产品具有高声压、强指向性、高清晰度等特点&#xff0c;采用定向声传声技术将声音聚集到正前方定向传输,周边声压级明显降低…...

2024离婚新规已生效,不用等30天冷静期,线上开庭

2024年离婚必知的12条法律知识&#xff1a; ✅分居多久都不会自动离婚&#xff0c;想离婚&#xff0c;必需通过协议或起诉程序离婚 ✅婚后的工资收入&#xff0c;继承的遗产(未指定只给一人&#xff09;都是夫妻共同财产 ✅没有领结婚证&#xff0c;或领证后没有共同生活&#…...

从零搭建python环境:深入解析虚拟环境与Python版本管理

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;为何需要虚拟环境&#xff1f; 二、虚拟环境的创建与命名 1. 虚拟环境…...

windows安装官方正版notepad++

一 、notepad介绍 Notepad 是一个免费的、开源的文本编辑器&#xff0c;主要面向程序员和高级用户。以下是 Notepad 的特点&#xff1a; 跨平台&#xff1a; 虽然主要为 Windows 平台设计&#xff0c;但可以通过 Wine 在 Linux 和 macOS 上运行。 语法高亮&#xff1a; 自动识…...

netty-socketio 集群随记

实现netty-socketio集群的方式 代码实例 PostConstructpublic void subscribe() {pubSubStore.subscribe(PubSubType.DISPATCH, new PubSubListener<DispatchMessage>() {Overridepublic void onMessage(DispatchMessage message) {log.debug("subscribe: {}"…...

查看目录或文件的磁盘使用情况

在排查问题过程中&#xff0c;会遇到磁盘占满&#xff0c;需要排查具体哪个文件占用比较大&#xff0c;此时可以使用du 命令 du [选项] [文件或目录...] 常用的选项包括&#xff1a; -h 或 --human-readable&#xff1a;以人类可读的格式&#xff08;如 K、M、G&#xff09;…...

如何选择合适的自动化框架

自动化测试框架的选型是一个复杂且重要的过程&#xff0c;需要考虑多个因素以确保所选框架能够满足项目的需求。以下是一些建议的步骤和考虑因素&#xff1a; 1. 明确项目需求&#xff1a; * 首先&#xff0c;要明确项目的测试需求&#xff0c;包括测试的类型&#xff08;如…...

Java面试进阶指南:高级知识点问答精粹(二)

Java 面试问题及答案 1. 什么是Java内存模型&#xff08;JMM&#xff09;&#xff1f;它在并发编程中扮演什么角色&#xff1f; 答案&#xff1a; Java内存模型&#xff08;JMM&#xff09;是一个抽象的模型&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&…...

thinkphp 使用模型实现多表连接查询

解决问题&#xff0c;多张表的查询连接问题&#xff0c;3张表及以上 爷爷表 有字段id 爸爸表 有字段id&#xff0c;grandfather_id 儿子表 id,parent_id 控制器中编写 public function getdata(){ $data model(爷爷表)->with([father.son])->select(); var_dump($data…...

LeetCode674:最长连续递增序列

题目描述 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定&#xff0c;如果对于每个 l < i < r&#xff0c;都有 nums[i] < nums…...

Java技术精粹:高级面试问题与解答指南(一)

Java 面试问题及答案 问题1&#xff1a;请解释Java中的多态性&#xff0c;并给出一个例子。 答案&#xff1a; 多态性是Java中的一个重要特性&#xff0c;它允许一个引用类型可以指向多种实际类型的对象&#xff0c;并且可以通过这个引用调用实际对象的方法。多态性主要通过继…...

数据可视化技术头歌测试合集

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰 目录 时间趋势可视化-柱形图 第1关&#xff1a;“大胃王”比赛数据柱形图绘制——绘制柱形图的基本步骤 任务描述 相关知识 观察和处理数据 绘…...

【linux-IMX6ULL-字符设备驱动简单框架实验】

目录 1. 字符设备驱动简介1.1 重要函数1.2 简单框架代码流程1.3 linux中关于驱动的重要命令 2. 字符设备驱动简单框架编写2.1 添加LICENSE信息2.2 驱动模块的入口与出口2.3 入口和出口函数的编写2.4 设备操作结构体定义2.4.1 结构体函数内容填充 3. 应用程序简介&#xff1a;4.…...

3D模型旋转显示不全怎么办---模大狮模型网

在3D建模和渲染过程中&#xff0c;我们有时会遇到旋转模型时显示不全的问题。这种情况可能由多种原因造成&#xff0c;包括模型本身的问题、软件设置不当、硬件配置不足等。本文将为您详细介绍几种可能的解决方法&#xff0c;帮助您解决3D模型旋转显示不全的问题。 一、检查模型…...

DLRover:蚂蚁集团开源的AI训练革命

在当前的深度学习领域&#xff0c;大规模训练作业面临着一系列挑战。首先&#xff0c;硬件故障或软件错误导致的停机时间会严重影响训练效率和进度。其次&#xff0c;传统的检查点机制在大规模训练中效率低下&#xff0c;耗时长且容易降低训练的有效时间。资源管理的复杂性也给…...

ubuntu_概念

su(switch user) wget(Web Get) cd(change directory) dpkg(Debian Packager)为 “Debian” 专门开发的套件管理系统&#xff0c;方便软件的安装、更新及移除。 chmod(Change Mode)用于改变文件或目录的权限 ps(Process Status)进程状态 grep(Global Regular Expression Print)…...

Oracle递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询指定节点的递归路径 六、递归子类 七、递归父类 一、创建表结构和插入数据 CREATE TABLE "REGION" ( "ID" VARCHAR2(36) DEFAULT SYS_GUI…...

FaceFusion源码框架解读

FaceFusion源码框架解读 我的视频讲解&#xff1a;FaceFusion入门教学 FaceFusion官网 FaceFusion是一款开源的AI换脸工具&#xff0c;一款非常好用的换脸工具&#xff0c;操作简单&#xff0c;上手容易。 Facefusion&#xff1a;GitHub - facefusion/facefusion: Next gene…...

React项目知识积累(三)

1.primary-color 公共样式 less文件中的primary-color&#xff0c;会在config.js中的theme中统一写,方便统一更改。 config.js: theme{"primary-color":"#f0f0f0"&#xff0c;"font-size":"16px", }less: .classname{color:primary-…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...