阿里一面——struct和class的区别|基类指针与派生类指针的强转

阿里一面——struct和class的区别|基类指针与派生类指针的强转

  • 1.struct和class的区别
    • 1.1. 成员
    • 1.2. 函数
  • 2. 基类指针与派生类指针的强转

1.struct和class的区别

1.1. 成员

  • struct的默认访问权限为public, 而class的默认访问权限为private
  • 成员的权限设置:可以使用访问修饰符来控制成员的访问级别,例如private
struct ExampleStruct {
private:int privateValue;
public:ExampleStruct(int val) : privateValue(val) {}void printValue() const {std::cout << privateValue << std::endl;}
};

1.2. 函数

  • struct和class语义上几乎是相同的,都可以包含构造函数、析构函数、操作符、成员函数等
  • 不能继承

2. 基类指针与派生类指针的强转

  • 即便基类指针指向的是一个派生类的对象,也不能通过基类指针访问基类没有而派生类中有的成员。
  • 基类的指针不能直接赋值给派生类的指针, 需要通过强制类型转换。但是注意,需要保证被转换的基类指针本来就指向一个派生类的对象,这样才是安全的。
    这里参考一篇博文中的例子: C++基类和派生类指针的相互赋值和转换
	 CDerived objDerived(3); //派生类CBase objBase(5); //基类CBase * pBase = &objDerived; // 将基类指针指向派生类对象//CDerived * pDerived = & objBase; //错,不能将基类指针赋值给派生类指针CDerived * pDerived = (CDerived *)(&objBase);...

另一篇博文《基类和派生类互转》中,提供了类指针之间显示转换的安全做法——使用dynamic_cast或static_cast。
1、有继承关系
(1)子类转成父类: dynamic_cast和static_cast都可.
(2)父类转成子类:
没有虚函数:static_cast
有虚函数:
static_cast能转换成功。
父类指针的确指向的是子类实例,dynamic_cast转换成功,否则返回NULL;
(3)读写成员和函数:
如果转换成功(返回的指针不为NULL), 二者都可以用来读写父类和子类成员函数和变量。
如果父类指针不是指向子类实例, static_cast虽然能够通过编译和返回非空指针,但是不能操作子类的成员变量。
2、没有继承关系
(1)只能使用static_cast。但是不能读写成员变量和函数。

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

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

相关文章

俄罗斯副总理暗示欧佩克+或增加原油产量,亚洲早盘油价小幅下跌

在俄罗斯副总理亚历山大诺瓦克暗示欧佩克可能采取行动增加原油产量后&#xff0c;亚洲早盘的油价出现小幅下跌。这一消息引起了市场对原油供给增加的担忧&#xff0c;导致油价走低。 City Index和FOREX.com的市场分析师Fawad Razaqzada表示&#xff0c;虽然原油价格在技术上尚…

IDEA远程连接docker服务,windows版docker desktop

1.windows上安装docker desktop docker desktop下载地址&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 有的windows系统不支持安装docker desktop 安装完之后我们可以直接打开&#xff0c;可以选择不登录使用 我们用IDEA连接到docker …

SystemVerilog/Verilog中的仿真延时建模之模块路径延时

一 概要 模块路径延迟,描述的是模块中信号从源端到目的端传输的延迟。 路径以及对应的延迟是在模块中的specify块中指定的,其中信号源端一般为input或者inout,而目的端则只能为output或者inout.在specify中指定的模块路径,常见的形式主要三种,分别是: 简单路径(Simple Path…

Pikachu 靶场 CSRF 通关解析

前言 Pikachu靶场是一种常见的网络安全训练平台&#xff0c;用于模拟真实世界中的网络攻击和防御场景。它提供了一系列的实验室环境&#xff0c;供安全专业人士、学生和爱好者练习和测试他们的技能。 Pikachu靶场的目的是帮助用户了解和掌握网络攻击的原理和技术&#xff0c;…

Day64|代码随想录二刷总结

大体感受 去年暑假跟着&#xff0c;回想起来半年多的时间内经历了不少变故&#xff0c; 更多的是心态上的变化。之前的一刷更多的是缓解没啥事做的焦虑&#xff0c;而二刷是在实习期间抽时间刷的&#xff0c;能做出来的题更多了&#xff0c;刷题的效果也更好。 刷题变化 最明…

如何通过二手机店ERP软件实现店铺经营效率最大化?

2024年&#xff0c;在科技高速发展的今天&#xff0c;手机批发和零售行业正在经历前所未有的改革。为了抓住这次机遇&#xff0c;提高竞争力&#xff0c;二手手机店需要找到一种全面、高效、智能的管理工具。鉴于此&#xff0c;超机商城为众多二手手机店的商家量身定制了一款专…

嵌入式C语言高级教程:实现基于STM32的面部识别系统

面部识别技术在安全和自动化领域越来越受到重视。本教程将指导您如何在STM32微控制器上使用OpenMV实现基本的面部识别功能。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32H743II&#xff0c;具备高性能处理能力和充足的存储资源。开发板&#xff1a;STM32H7 Discov…

恢复数据,电脑数据恢复详细操作指南(4个方法)

“我经常会把很多重要的文件都保存在电脑上&#xff0c;但今天在清理电脑时好像误删了一些数据&#xff0c;有没有比较好用的数据恢复方法可以分享一下呢&#xff1f;请大家给我推荐几个吧&#xff01;” 随着电脑的普及&#xff0c;我们越来越多地将重要数据存储在电脑中。然而…

Window安装OpenSSH客户端及服务

文章目录 引言I 给windows安装一个ssh服务1.1 下载对应的OpenSSH1.2 安装sshd服务1.3 开放22端口1.4 配置sshd服务自动启动1.5 验证ssh是否可用II 服务部署III 公钥登录 Windows OpenSSH Server3.1 生成公钥-私钥对,把公钥复制到目标机器的3.2 授予对AuthorizedKeysFile权限3.…

pdf2htmlEX:pdf 转 html,医学指南精细化处理

pdf2htmlEX&#xff1a;pdf 转 html&#xff0c;医学指南精细化处理 单文件转换多文件转换 代码&#xff1a;https://github.com/coolwanglu/pdf2htmlEX 拉取pdf2htmlEX 的 Docker&#xff1a; docker pull bwits/pdf2htmlex # 拉取 bwits/pdf2htmlex不用进入容器&#xff0c…

富格林:学习辨别虚假预防欺诈亏空

富格林悉知&#xff0c;对于市场发布的虚假欺诈案例&#xff0c;投资者可注意了解其中受骗原因&#xff0c;总结因对的策略应对避免受害亏损。市场是多变复杂的&#xff0c;如果只是学习刻板的套路方法&#xff0c;只能应对正常交易&#xff0c;对于一些诱导虚假便可能无法避免…

认识设计模式SOLID原则

SOLID 是一个缩写词&#xff0c;代表面向对象编程 (OOP) 的五个设计原则&#xff0c;旨在促进更简单、更健壮和可更新的代码。 SOLID 缩写中的每个字母都代表了开发易于维护和随时间扩展的软件的原则。 SOLID原则是面向对象编程和设计的五项基本指导原则&#xff0c;由罗伯特C…

VIM命令常用

一、启动vim 以:和/开头的命令都有历史纪录&#xff0c;可以首先键入:或/然后按上下箭头来选择某个历史命令。 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim并创建名为filename的文件 二、文件命令 打开单个文件vim file同时打开多个文件vim file1 …

用HAL库改写江科大的stm32入门例子_9-1 串口发送

设置串口&#xff1a; 选项说明&#xff1a; 写一个串口发送函数&#xff1a; // serial send string function void serial_send_string(char *str) {HAL_UART_Transmit(&huart1, (uint8_t *)str, strlen(str), 1000); } main函数中调用发送信息&#xff1a; uint8_t dat…

React 第二十五章 React.memo

React.memo 是 React 提供的一个高阶组件&#xff0c;用于对函数组件进行性能优化。 React.memo 的源码实际上就是返回一个 PureComponent 组件&#xff1a; function memo(FuncComp){return class Memo extends PureComponent{render(){return <>{FuncComp(this.props…

极致设计!详解专业网页设计的全套步骤和流程

在当今的数字时代&#xff0c;拥有一个专业、易于使用和有吸引力的网页对任何企业或个人都至关重要。专业的网页设计是实现这一目标的关键步骤之一。本文将详细介绍专业的网页设计步骤和过程&#xff0c;以帮助您了解如何设计一个优秀的网页。 在介绍专业网页设计步骤和流程之…

力扣:268. 丢失的数字(Java)

目录 题目描述&#xff1a;示例 1&#xff1a;示例 2&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给定一个包含 [0, n] 中 n 个数的数组 nums &#xff0c;找出 [0, n] 这个范围内没有出现在数组中的那个数。 示例 1&#xff1a; 输入&#xff1a;nums [3,0,1]…

GPU术语

SP(Streaming Processor)流处理器 流处理器是GPU最基本的处理单元&#xff0c;在fermi架构开始被叫做CUDA core。 SM(Streaming MultiProcessor) 一个SM由多个CUDA core组成。SM还包括特殊运算单元(SFU)&#xff0c;共享内存(shared memory)&#xff0c;寄存器文件(Register …

GIS入门,不使用任何第三方库,纯JavaScript实现自定义多边形平滑曲线算法

前言 本章介绍一下不使用任何第三方库,纯JavaScript实现自定义多边形平滑曲线算法。 在此之前我们先了解一下几种多边形平滑算法。 在上一章中《常用的多边形平滑曲线算法介绍和JavaScript的多边形平滑曲线算法库chaikin-smooth的实现原理》,我们通过第三方库chaikin-smoo…

LeetCode热题100|动态规划Part.1|70.爬楼梯、118.杨辉三角、198.打家劫舍

70.爬楼梯 代码随想录原题&#xff0c;看这篇文章&#xff1a;C动态规划Part.1|动态规划理论基础、509.斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯 118.杨辉三角 题目链接&#xff1a;118.杨辉三角 一刷代码 时间复杂度和空间复杂度都造到 O ( n u m R o w s 2 ) O(num…