C++学习(23)

#学习自用#

union

共用体和结构体相似,但是共用体一次只能占用一个成员的内存,所有成员共用同一地址。

#include<iostream>
using namespace std;
union A
{int int_val;float float_val;
}a;
int main()
{a.float_val = 2.0f;cout << a.float_val << endl;cout << a.int_val << endl;cin.get();	
}

这里a.int_val并不等于2,因为int_val与float_val地址相同,int_val的值其实是float_val在内存中的值。我们可以通过下面这串代码来理解。

#include<iostream>
using namespace std;
int main()
{	float b = 2.0;int a=*(int*) & b;cout << a << endl;a = b;cout << a << endl;cin.get();
}

第一个部分,int a=*(int*) & b ,是取b的地址然后强转为整型指针,再解引用赋值给a,和int_val与float_val的情况类似;而第二个部分,存在隐式转换,实际上是 a=(int )b ;这个部分的结果a=2 。

虚析构函数

虚析构函数并不是在子类中复写基类的析构函数,更像是在基类析构函数的基础上加一个析构函数。

#include<iostream>
using namespace std;
class Base
{
public:Base() { cout << "Base construct\n"; }~Base() { cout << "Base distroy\n"; }
};
class Derive:public Base
{
public:Derive() { cout << "Derive construct\n"; }~Derive() { cout << "Derive distroy\n"; }
};
int main()
{Base* base = new Base();delete base;cout << "------------\n";Derive* derive = new Derive();delete derive;cout << "------------\n";Base* poly = new Derive();delete poly;cin.get();
}

在删除poly时并没有调用Derive的析构函数,这里可能会导致内存泄漏,改进方法就是使用虚析构函数。 在基类的虚构函数名前加上virtual即可。只要一个类拥有子类,那么它的析构函数就必须是虚函数否则无法保证安全的扩展这个类。

类型转换

C++中用于类型转换的有static_cast ,reinterpret_cast,dynamic_cast,以及 const_cast,相比于C风格的类型转换,这些语句增加了一些检查功能,各自的使用也有一些限制,下面进行一些简单的介绍。

#include<iostream>
using namespace std;
int main()
{double a = 5.25;double b = (int)a + 5.3;cout << b << endl;b = static_cast<int>(a) + 5.3;cout << b << endl;cout << "------------------\n";int c = 1;b = *(double*) &c;cout << b << endl;b = *reinterpret_cast<double*>(&c);cout << b << endl;cout << "------------------\n";cin.get();
}

static_cast只能实现一些基本类型的转换比如float,int之类的,无法实现整型地址向double类型指针的转换,可以看到C风格的转换也可以实现这些功能,如果对性能有要求用C风格是最好的。

#include<iostream>
using namespace std;
class Base
{
public:virtual void prt() { cout << "Base type\n"; }virtual ~Base() { cout << "Base distroy\n"; }};
class Derive:public Base
{
public:void prt()override  { cout << "Derive type\n"; }~Derive()  { cout << "Derive distroy\n"; }
};
int main()
{Base* b1 = new Base();//指向父类的父类指针Base* b2 = new Derive();//指向子类的父类指针Derive* derive = dynamic_cast<Derive*>(b1);if (!derive)cout << "transmition fail\n";elsederive->prt();derive = dynamic_cast<Derive*>(b2);if (!derive)cout << "transmition fail\n";elsederive->prt();delete (b1,b2);//错误的,只删除了b2cin.get();
}

dynamic_cast用于有继承关系的转换,转换不成功会返回null,转换不成功的情况:1)两个没有继承关系的类指针之间的转换。2)下行转换(父转子)的情况中,指向父类的父类指针转换为子类指针会失败,而指向子类的父类指针可以转换为子类指针。3)上行转换不会失败。4)delete (b1,b2)涉及逗号表达式,逗号表达式的值是右值,所以只删除了b2。如果是delete b1,b2 那么就只删除b1因为逗号的优先级很低,相当于(delete b1),b2 这里b2不起作用。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浏览器加了token的header导致部分网页打不开

因为测试加了个token&#xff0c;忘记去掉&#xff0c;导致一些系统进不去&#xff0c;只能用无痕浏览器打开&#xff0c;后来发现是因为token的原因

零散的面试题

★1.java常见的引用类型 强:普通的变量引用 软:内存够时,GC不会主动删除,内存不够时,GC会删除 弱:一旦执行GC就会被删除 虚:用了感觉没用 ★2.JDK1.8新特性 lambda表达式(极大简化了匿名内部类的创建&#xff0c;促进函数式编程的风格)函数式接口(只能有一个抽象方法的接口 )日…

Nexus安卓木马分析报告

概述 2023年3月21日晚上&#xff0c;链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后&#xff0c;发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时&#xff0c;意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

一款Wordpress网站导航主题,带昼夜切换功能

Wordpress网站导航主题&#xff0c;带昼夜切换功能。 基于wordpress&#xff0c;部署和使用都比较方便。 界面比较简洁大方。后台管理功能也比较全面&#xff0c;值得一试。 这款主题界面、功能都非常简洁。 作者把这款定位为简约导航主题&#xff0c;所以这款wordpress导航…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

MavenPlus插件的基础功能完善

本次更新主要是在初版的searchEverywhere的基础上增加了pom.xml文件编辑器&#xff0c;目前的界面布局如下&#xff0c;进行适当说明&#xff1a; 打开pom文件后&#xff0c;你会得到如上图所示的布局页面&#xff0c;数据会同步显示 如果有冲突信息&#xff0c;则会以红色显示…

【Android面试八股文】你刚刚提到了V2签名使用美团的Walle实现多渠道打包,那么你能讲一讲Android 签名的 v1、v2、v3、v4版本的区别吗?

文章目录 前言一、简介二、APK 签名方案 v1 (JAR签名)2.1. 签名过程2.2 验证过程2.3 详细例子2.4 优缺点2.5 美团基于V1版本的多渠道打包方案三、APK 签名方案 v23.1 为什么要设计APK 签名方案 v2 ?3.2 APK 签名方案 v2 : 签名前和签名后的 APK3.2.1 签名前和签名后的 APK3.2…

qmt量化交易策略小白学习笔记第40期【qmt编程之期货数据--如何获取合约基础信息】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取合约基础信息 …

Faiss:选择合适的索引Index

向量相似性搜索彻底改变了搜索领域。它允许我们高效地检索从GIF到文章等各种媒体&#xff0c;即使在处理十亿级别数据集时&#xff0c;也能在亚秒级时间内提供令人印象深刻的准确性。 然而&#xff0c;这种灵活性也带来了一个问题&#xff1a;如何知道哪种索引大小最适合我们的…

React+TS 从零开始教程(1)

源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 创建项目 直接通过以下命令&#xff0c;我们来创建一个reactts的项目。 npx create-react-app myapp --template typescript这样就创建好了,然后我们导入vscode. npx是npm里面的一个库&#xff0c;可以让你自动使用…

DAB-DETR

论文地址&#xff1a; https://arxiv.org/pdf/2201.12329 文章通过前人的经验得出&#xff0c;导致 DETR 训练速度慢的原因很大可能是因为 decoder 中 cross attention 这个模块&#xff0c;由上面的对比可以看出其与 self attention 的区别主要就在于query的不同。文章猜想两个…

【Maven】项目的Maven插件报错

1. 找到本地maven库 2. 删除本地插件 3. 在IDEA上更新pom.xml

ctfshow web七夕杯

web签到 执行命令没有回显&#xff0c;我们直接写文件就可以了 有字符长度限制 ls />a nl /*>a访问url/api/a下载文件 easy_calc <?phpif(check($code)){eval($result."$code".";");echo($result); }function check(&$code){$num1…

LVS/NAT负载均衡实操

添加规则,并做持久操作 1 添加规则 [rootlvs ~]# ipvsadm -A -t 10.36.178.183:80 -s wrr [rootlvs ~]# ipvsadm -a -t 10.36.178.183:80 -r 192.168.65.201:80 -m -w 3 [rootlvs ~]# ipvsadm -a -t 10.36.178.183:80 -r 192.168.65.202:80 -m -w 1[rootlvs ~]# ipvsadm -Ln …

百度YY设计稿转代码的探索与实践

作者 | KyrieChen 导读 本文阐述了百度&YY互动团队在设计稿转代码方面的实践与沉淀&#xff0c;自研的YYF2C是Figma & AI相结合生成开发代码的一站式解决方案。文章将从遇到的痛点以及对应的方案成果来阐述&#xff0c;并介绍相对应的YYF2C功能点。 全文7217字&#xf…

我的创作纪念日--码农阿豪

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

OpenCV读取图片

import cv2 as cv # 读取图像 image cv.imread(F:\\mytupian\\xihuduanqiao.jpg) # 创建窗口 cv.namedWindow(image, cv.WINDOW_NORMAL) #显示图像后&#xff0c;允许用户随意调整窗口大小 # 显示图像 cv.imshow(image, image) cv.waitKey(0)import cv2 as cv srccv.imread(…

KVB交易平台:国内三大交易所(上海、深圳、北京)的概要与分析

概述&#xff1a; 上海证券交易所&#xff08;上交所&#xff09;、深圳证券交易所&#xff08;深交所&#xff09;和北京证券交易所&#xff08;北交所&#xff09;是中国大陆三大主要证券交易所。以下是对这三个交易所的比较分析&#xff1a; 一、基本概况 1. 上海证券交易所…

Python和OpenCV图像分块之图像边长缩小比率是2

import cv2 import numpy as npimg cv2.imread("F:\\mytupian\\xihuduanqiao.jpg") # 低反光 cv2.imshow(image, img) # # 图像分块 # dst np.zeros(img.shape, img.dtype) ratio 2 #图像边长缩小比率是2&#xff0c;也就是一张图片被分割成四份 height, wi…

RapidLayout:中英文版面分析推理库

引言 继上一篇文章之后&#xff0c;我这里想着将360发布的版面分析模型整合到现有的rapid_layout仓库中&#xff0c;便于大家快速使用。 不曾想到&#xff0c;我这整理工作越做越多了&#xff0c;好在整体都是往更好方向走。 起初&#xff0c;rapid_layout项目是在RapidStru…