类型转换和特殊类

特殊类的设计

不能被拷贝的类

如io流

1.只声明,不定义,且设置为私有

2.在默认成员函数后加=delete

只能在堆上创建对象的类

1.构造函数私有化

将构造函数和拷贝构造和赋值封死,然后设计一个专门的接口用于new一个对象

就能实现只能在堆上创建对象

2.析构函数私有化

只能在栈上创建对象的类

和上面的类类似

但是需要封死拷贝构造,才能保证只在栈上创建对象

但是需要保留移动构造

因为createobj需要返回一个值

保留移动构造就能解决拷贝问题

但是又可以使用move来移动构造

不能被继承的类

将构造函数私有化

或者使用final修饰类,表明该类不能被继承

只能创建一个对象的类(单例模式)

单例模式:该类只能创建一个对象,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享

1.饿汉模式

可以将构造函数私有化,就能确保只生成一个对象

同时将拷贝构造封死

提前将对象创建好(静态对象),全局想调用的时候随时都能调用

但是如果多个饿汉模式的单例,可能会导致启动较慢

且如果存在A和B两个饿汉,但是对象初始化存在依赖关系,饿汉无法保证初始化顺序

2.懒汉模式

当需要使用的时候再初始化

懒汉模式在第一次调用时初始化对象

这样就可以解决饿汉模式的问题

但是懒汉模式存在线程安全的问题

懒汉模式还存在一种更简单的实现方式

就是创建一个局部的静态

类型转换

类型转换的前提是不同类型之间存在关联

而类型转换分为隐式类型转换和显式类型转换

1.内置类型之间的转换

隐式类型转换:

整形系列互相转换,整形和浮点数之间

显式类型转换:

指针和整形,指针之间(指针是地址,而地址是一个一个字节的编号)

2.内置类型和自定义类型之间的转换

自定义类型 = 内置类型,依赖构造函数支持

内置类型 = 自定义类型,需要重载()

单参数构造函数支持隐式类型转换

内置类型和自定义类型之间的转换依赖构造函数进行转换

多参数构造函数的隐式类型转换需要加{ }

如果不想发生隐式类型转换可以加explicit

但是加explicit还是可以进行显示类型转换

自定义类型也可以转换成内置类型

需要重载operator(),但是由于()被仿函数占用了,所以不能用

因此换了一种写法:operato 类型,无返回类型

3.自定义类型之间的转换

自定义类型之间只要建立关联就可以进行转换

即需要对应的构造函数支持(因为自定义类型之间的转换,需要通过A的构造产生一个B的对象)

但是自定义类型之间的转换基本都是隐式类型转换

eg.

这样就可以进行类型转换

iterator和const_iterator是两种不同的类型

这里需要一个const_iterator到iterator的构造

如果想要实现iterator和const_iterator的转换,则需要设计一个构造函数

4.强制类型转换

1.static_cast

2.reinterpret_cast

3.const_cast

4.dynamic_cast

通常父类不能转换成子类

将父类强制类型转换成子类是不安全的

dynamic_cast会检查是否能转换,能则转换,不能则返回

相关推荐
彧azz4 小时前
图的存储结构详解:邻接矩阵的原理、实现与应用
开发语言·数据结构·学习·php
hansang_IR4 小时前
【题解】P4460 [CQOI2018] 解锁屏幕
c++·算法
嵌入式学习菌4 小时前
Modbus‑RTU 数据类型分析
开发语言·单片机·bug
ChampaignWolf5 小时前
在 SAP S/4HANA 内部基于 ICF Handler 从零实现 ABAP MCP Server:架构、代码与踩坑实录
c++·架构·sap·abap·mcp
matlab代码5 小时前
基于matlab数字图像处理的指纹识别系统【源码68期】
开发语言·matlab
matlab代码6 小时前
基于matlab的水果识别系统(苹果香蕉菠萝梨桃子)【源码65期】
开发语言·matlab
wuyk5556 小时前
从零吃透 MQTT 通信|第 8 章 FreeRTOS 多任务架构下 MQTT 工程架构,任务拆分、队列解耦、临界区保护
c语言·开发语言·stm32·学习·架构
weixin199701080166 小时前
[特殊字符]《跨境二手ERP对接Back Market:标准化API + 7~10工作日技术合规审核实录》(附Python源码)
开发语言·python·pandas
尘客-追梦6 小时前
Day 01:插件化之前,先看清 ABI 这堵墙
开发语言·c++·qt
持敬chijing7 小时前
Python-数据类型-列表
开发语言·python·青少年编程