波奇学C++:类型转换和IO流

隐式类型转换

int i=0;
double p=i;

强制类型转换

int* p=nullptr;
int a=(int)p;

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

class A
{
public:
	A(string a)
		:_a(a)
	{}
private:
	string _a;
};
A a("xxxx"); //"xxx" const char* 隐式转换为string

多参数也可以通过{}来实现隐式类型转换。

强制类型转换存在安全问题

const int n = 10;
int* p = (int*)&n;
(*p)++;
cout << n << endl; // 10 
cout << *p << endl; // 11

两个值不一样的原因是,*p是直接在内存中取值,而n没有去内存中取(没有确认改变),直接在寄存器中取。

解决方式:volatile 强制从内存中检查出关键字

volatile const int n = 10;

C++引入四种强制类型转换

static_cast 类型相关

//类型相关
int a = 10;
double b = static_cast<int>(a);

reinterpret_cast 类型不相关

// 类型不相关
int* p = &a;
int c = reinterpret_cast<int>(p);

const_cast 删除const属性,<type> 必须是指针或者引用

const int& d = 10;
int&e = const_cast<int&>(d);

dynamic_cast 父类对象的引用或者指针转换为子类对象

一般情况下C++允许向上转换,不允许向下转换

class A
{
public :
virtual void f(){}
};
class B : public A
{};
void fun (A* pa)
{
// pa 指向子类对象转换成功,转为父类对象返回Null
B* pb2 = dynamic_cast<B*>(pa); 
cout<<"pb2:" <<pb2<< endl;
}
int main ()
{
  B b;
  fun(&b);
  return 0;
}
1. dynamic_cast只能用于父类含有虚函数的类
2. dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0

 I/O流

I/O流

能更好的打印自定义类型

自动识别类型

运算符重载

 cin对象类型转换

int main()
{
	string str;
	while (cin >> str)
	{
		cout << str << endl;
	}
	return 0;
}

 cin>>str 返回值是cin, cin作为while的判断对象。

下面的的类型重载可以让cin隐式转为bool 值

class A
{
public:
	A(int a=0)
		:_a(a)
	{}
	operator int()//允许转换成int型
	{ 
		return _a;
	}
	operator bool()//允许转换成bool类型
	{
		return _a;
	}
	int _a;
};
A a=10;
int i=a;
bool ii =a;

operator bool()将cin转换成bool值,来作为判断while是否结束。

C++文件IO流

class Date
{
	friend ostream& operator << (ostream& out, const Date& d);
	friend istream& operator >> (istream& in, Date& d);
public:
	Date(int year = 1, int month = 1, int day = 1)
		:_year(year)
		, _month(month)
		, _day(day)
	{}
	operator bool()
	{
		// 这里是随意写的,假设输入_year为0,则结束
		if (_year == 0)
			return false;
		else
			return true;
	}
private:
	int _year;
	int _month;
	int _day;
};
istream& operator >> (istream& in, Date& d)
{
	in >> d._year >> d._month >> d._day;
	return in;
}
ostream& operator << (ostream& out, const Date& d)
{
	out << d._year << " " << d._month << " " << d._day;
	return out;
}

二进制写入文件

int main()
{
	Date d(2013, 10, 14);
	FILE* fin = fopen("file.txt", "w");
	fwrite(&d, sizeof(Date), 1, fin);
	fclose(fin);
	return 0;
}

 文件是字节流,二进值的无法正常显示

C++:二进制写入

Date d(2013, 10, 14);
ofstream ofs("file.txt",ios_base::out|ios_base::binary);
ofs.write((const char*)&d, sizeof(d));

按文本的方式写

Date d(2013, 10, 14);
ofstream ofs("file.txt",ios_base::out|ios_base::binary);
ofs << d;

调用流插入重载函数。ofs继承out

 二进制读写不能用string,vector这样的对象存数据,否则写出去就是个指针,进程结束就是野指针

流插入时注意空格分隔,cin读取时会默认用空格进行分割 

读取文件

ifstream ifs("源.cpp");
char ch;
while (ifs.get(ch))
{
	cout << ch;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解强化学习——马尔可夫决策过程:占用度量-[基础知识]

分类目录&#xff1a;《深入理解强化学习》总目录 文章《深入理解强化学习——马尔可夫决策过程&#xff1a;贝尔曼期望方程-[基础知识]》中提到&#xff0c;不同策略的价值函数是不一样的。这是因为对于同一个马尔可夫决策过程&#xff0c;不同策略会访问到的状态的概率分布是…

园区规划技术要点

&#xff08;一&#xff09;技术点介绍 1.WLAN&#xff1a;无线局域网WLAN&#xff08;Wireless Local Area Network&#xff09;是一种无线计算机网络&#xff0c;使用无线信道代替有线传输介质连接两个或多个设备形成一个局域网LAN&#xff08;Local Area Network&#xff09…

【亲测有效,超详细】收到微信小程序限期完成微信认证通知怎么处理?微信小程序年审认证都需要哪些资料?

背景&#xff1a;近期部分微信小程序管理员最近收到了年审认证通知如下图 微信官方通知 微信小程序认证流程 第一步&#xff1a;登录微信公众平台 网址&#xff1a;微信公众平台 第二步&#xff1a;登录进入后会看到年审通知弹窗&#xff0c;点击去年审 第二步&#xff1a;登…

java中Random随机数使用和生成随机数的多个示例

在 Java 中&#xff0c;我们可以使用 java.util.Random 类生成伪随机数。伪随机数的特性是&#xff0c;虽然它们看起来是随机的&#xff0c;但实际上它们是由一个固定的算法生成的。只要我们提供相同的种子&#xff0c;这个算法就会生成相同的数字序列。 首先&#xff0c;我们…

HarmonyOS开发基础(一)

HarmonyOS开发基础&#xff08;一&#xff09; // &#xff1a;装饰器&#xff1a;用来装饰类结构、方法、变量 Entry // Entry&#xff1a;标记当前组件为入口组件 Component // Component&#xff1a;标记为自定义组件 // struct&#xff1a;自定义组件&#xff0c;可复用的…

winform使用串口通信读取压力传感装置(CFM)的数据

一、简介 目的&#xff1a;获取CFM的 “hi” 报文&#xff0c;解析出如下数据并绘制波形图。 实现&#xff1a;使用c#打开CFM串口&#xff0c;发送 02 00 02 4C 49 0D 请求到串口&#xff0c;CFM就会不断返回不同类型的报文&#xff0c;我解析的是 “hi” 报文&#xff08;至…

2477. 到达首都的最少油耗 : 逐步讲解最低油耗求解思路

题目描述 这是 LeetCode 上的 「2477. 到达首都的最少油耗」 &#xff0c;难度为 「中等」。 Tag : 「DFS」 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n - 1&#xff0c;且恰好有 n - 1 …

全网最新最牛的Appium自动化:Appium常用操作之TouchAction操作

TouchAction操作 Appium的辅助类&#xff0c;主要针对手势操作&#xff0c;比如滑动、长按、拖动等。其原理是将一系列的动作放在一个链条中&#xff0c;然后将该链条传递给服务器。服务器接受到该链条后&#xff0c;解析各个动作&#xff0c;逐个执行。 TouchAction类支持的动…

解决:docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’

解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’ 文章目录 解决&#xff1a;docx.opc.exceptions.PackageNotFoundError: Package not found at ‘xxx’背景报错问题报错翻译报错位置代码报错原因解决方法今天的分享就到此结束了 背景…

深度学习TensorFlow2基础知识学习前半部分

目录 测试TensorFlow是否支持GPU&#xff1a; 自动求导&#xff1a; 数据预处理 之 统一数组维度 定义变量和常量 训练模型的时候设备变量的设置 生成随机数据 交叉熵损失CE和均方误差函数MSE 全连接Dense层 维度变换reshape 增加或减小维度 数组合并 广播机制&#…

MYSQL8用户权限配置详解

单位的系统性能问题需要把Mysql5升级到Mysql8&#xff0c;需要用到Mysql8的一些特性来提升系统的性能。 配置用户权限过程中发现一些问题&#xff0c;学习并记录一下。 目录 一、环境 二、MySQL8 用户权限 2.1 账号管理权限 2.1.1 连接数据库 2.1.2 账号权限配置 2.2 密码…

从开发到测试,你需要掌握哪些必备测试技能?

一、为什么从开发转测试 我从2019年5月开始从一名java开发女程序猿正式转为测试开发工程师&#xff0c;原因除了机缘凑巧之外&#xff0c;当然是因为这个行业对测试工程师的要求已经越来越高&#xff0c;简单做些UI脚本录制和回放的自动化&#xff0c;参考度娘写出框架demo却不…

二叉树求叶子节点

以这个图展示叶子节点的求取 项目结构 项目代码截图&#xff1a;使用递归的方式求取二叉树的叶子节点&#xff08;递归指的是函数自己调用自己的过程&#xff09; 具体代码展示 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #includ…

全网最新最全的Appium自动化:Appium常用操作之等待操作

等待机制&#xff1a; 为了保证脚本的稳定性&#xff0c;有时候需要引入等待时间&#xff0c;等待页面加载元素后再进行操作&#xff0c;主要有三种等待时间设置方式。 方式一&#xff1a; sleep()&#xff1a;固定等待时间设置&#xff0c;python的time包里提供了休眠方法sle…

Clion自定义管理和配置软件构建过程的工具(代替CMake)构建程序

在公司由于需要x86环境和其他arm环境&#xff0c;同时需要使用公司自定义的mine_x86或者mine_orin对代码进行编译。 编译命令如下mine_x86 build -Dlocal1 -j8,为使用Clion对程序进行调试&#xff0c;需要对程序进行设置。方便调试代码时能够断点查看变量。尝试了很多次&#…

什么是网络爬虫?有什么用?怎么爬?

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 【导读】 网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。 在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低…

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …

temu最近数据:拼多多旗下跨境电商平台的业绩持续增长

据最近的报道和数据显示&#xff0c;拼多多旗下的跨境电商平台Temu在2023年第三季度取得了显著的业绩增长。销售额突破50亿美元&#xff0c;市场份额不断扩大&#xff0c;用户数量迅速增长。本文将深入探讨Temu的业绩增长、市场份额、用户增长以及其营销策略。 先给大家推荐一款…

批量给文件名加相同后缀的两个方法

如何批量给文件名加相同后缀&#xff1f;文件处理是每个上班族需要面对的工作&#xff0c;并且文件处理能力的高低也体现了我们工作能力的高低&#xff0c;文件处理中就包含文件名称的修改&#xff0c;修改文件名是非常简单的&#xff0c;通过点击软件重命名就可以进行操作&…

应用案例 | 基于三维视觉的汽车零件自动化拧紧解决方案

​Part.1 引言 随着人们生活水平的提高&#xff0c;汽车作为理想的代步工具&#xff0c;逐渐成为人们生活中不可或缺的一部分。汽车的广泛应用&#xff0c;大大增加了汽车制造业的负荷。因此&#xff0c;如何提高生产效率和汽车性能&#xff0c;成为汽车制造业的首要关注话题。…