阿里一面——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://xiahunao.cn/news/3019865.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】《iTOP-3588开发板快速烧写手册》-第4章 烧写器RKDevTool常用功能

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

scikit-learn多因子线性回归预测房价

1.首先是单因子线性回归预测房价 import numpy as np import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score# 1.读取csa房屋数据 path D:/pythonDATA/us…

自动化测试:Selenium入门指南!

Selenium是一个强大的自动化测试工具&#xff0c;特别适用于Web应用测试。本指南将介绍Selenium的安装、常用功能以及一些常见方法&#xff0c;帮助入门并能够更灵活地进行自动化测试。Selenium是一个用于自动化浏览器操作的工具&#xff0c;它广泛应用于Web应用程序的测试和网…

NETBIOS和DNS

Netbios NETBIOS只能工作在局域网。 NetBIOS&#xff08;Network Basic Input/Output System, 网络基本输入输出系统&#xff09;是一种接入服务网络的接口标准。主机系统通过WINS服务、广播及lmhosts文件多种模式&#xff0c;把NetBIOS名解析对应的IP地址&#xff0c;实现信…

SQL 基础 | JOIN 操作介绍

在SQL中&#xff0c;JOIN是一种强大的功能&#xff0c;用于将两个或多个表中的行结合起来&#xff0c;基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中&#xff0c;以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法&#xff1a; INNER JOIN&#xff1…

工业镜头助力锂电制造业精准检测

在电动汽车、电动轻型车、电动工具、消费电子和新型储能等行业大发展的背景下&#xff0c;锂电池综合优势与下游领域对电池大容量、高功率、使用寿命和环境保护日益提升的需求相契合&#xff0c;存在广阔的市场应用前景。受益于动力、消费和储能三大细分领域的快速发展&#xf…

使用ROW_NUMBER()分组遇到的坑

1、再一次清洗数据时&#xff0c;需要过滤重复数据&#xff0c;使用了ROW_NUMBER() 来分组给每组数据排序号 在获取每组的第一行数据 with records as(select cc.F_Id as Id,REPLACE(cc.F_CNKITitle,char(10),1) as F_CNKITitle,REPLACE(REPLACE(cc.F_Special,专题&#xff1…

web安全day03

MYSQL注入&#xff1a; SQL 注入的原理、危害及防御措施 SQL 注入的原理&#xff1a;原本的 SQL 语句在与用户可控的参数经过了如拼接、替换等字符串操作后&#xff0c;得到一个新的 SQL 语句并被数据库解析执行&#xff0c;从而达到非预期的效果。 SQL 注入的危害&#xff…

大数据时代,如何准确查询并解读大数据信用报告?

在互联网时代&#xff0c;个人信息的安全和隐私保护愈发受到人们的关注。随着大数据技术的不断发展&#xff0c;越来越多的人开始关心自己的大数据报告。那么&#xff0c;如何找一个靠谱的地方查询个人大数据报告呢?本文将为您详细解答。 一、先了解大数据报告的含义 首先&…

时钟模块RX8025SA 内置32.768 kHz石英晶体振荡器

实时时钟模块RX8025SA&#xff0c;料号Q41802552000100&#xff0c;是一款低功耗&#xff0c;高精度时钟芯片。时钟芯片RX8025SA选型过程中应该注意哪些&#xff1f;RX8025SA又应用在哪些领域呢&#xff1f;爱普生RTC实时时钟RX8025SA&#xff0c;内置32.768 kHz石英晶体振荡器…

2024年5月12日(星期天)骑行海囗

2024年5月12日 (星期天&#xff09;骑行海口&#xff0c;早8:30到9:00大观公园门口集合&#xff0c;9:30准时出发【因迟到者&#xff0c;骑行速度快者&#xff0c;可自行追赶偶遇。】 偶遇地点:大观公园门口集合 &#xff0c;家住东&#xff0c;西&#xff0c;南&#xff0c;北…

嵌入式Linux开发如何查看应用所链接的动态库

在开发中我们常常需要查看一个应用究竟链接了哪些对应的动态库 桌面linux的使用方法不赘述&#xff0c;网上资料有很多&#xff0c;对于嵌入式linux开发中&#xff0c;我们在ubuntu中使用ldd 是不行的 应该使用

MT3031 AK IOI

思路&#xff1a;把每个节点存到堆&#xff08;大根堆&#xff09;里。 如果节点放入后总时间没有超过m则放入堆中&#xff1b;如果总时间超过了&#xff0c;就看堆头元素是否比新元素大。如果大&#xff0c;则删除堆头&#xff08;反悔贪心&#xff09;。 注意别忘记开long l…

分布式事务Seata使用

我们要学习seata&#xff0c;首先需要具备如下技术储备&#xff1a; 数据库事务的基本知识&#xff1b;maven工具的使用&#xff1b;熟悉SpringCloudAlibaba技术栈&#xff1b;掌握SpringDataJPA简单使用&#xff1b; 一. Seata基本概念 1.seata是什么 Seata是阿里巴巴中间…

解决“您的连接不是私密连接”

目录 那么为什么会出现这样提示呢 https访问有什么不同 将http访问更改为https访问 当您在浏览网页时&#xff0c;遇到“您的连接不是私密连接”的提示&#xff0c;这通常表示浏览器认为您的连接不够安全。这是因为浏览器无法信任网站使用的SSL证书&#xff0c;或者网站没有…

Linux下的SPI通信

SPI通信 一. 1.SPI简介: SPI 是一种高速,全双工,同步串行总线。 SPI 有主从俩种模式通常由一个主设备和一个或者多个从设备组从。SPI不支持多主机。 SPI通信至少需要四根线,分别是 MISO(主设备数据输入,从设备输出),MOSI (主设数据输出从设备输入),SCLK(时钟信号),CS/SS…

【声明ACL权限】

声明ACL权限 当应用在申请权限来访问必要的资源时&#xff0c;发现部分权限的等级比应用APL等级高&#xff0c;开发者可以选择通过ACL方式来解决等级不匹配的问题。 举例说明&#xff0c;如果应用需要使用全局悬浮窗&#xff0c;需要申请 ohos.permission.SYSTEM_FLOAT_WINDO…

这么受欢迎的Transform到底解决了什么问题?

文章目录 这么受欢迎的Transform到底解决了什么问题&#xff1f;背景基于卷积神经网络&#xff08;CNN&#xff09;基于注意力机制的神经网络大语言模型ChatGPT总结参考 这么受欢迎的Transform到底解决了什么问题&#xff1f; 背景 在过去的十几年中&#xff0c;深度卷积神经…

MT3032 环形喂猪

思路&#xff1a; 1.输出Error的情况&#xff1a;m>n/2 2.首先将饥饿值放到大根堆中&#xff0c;先喂最饿的猪i&#xff0c;则把i的饥饿值加到sum中&#xff1b;但也又可能喂i-1和i1&#xff0c;所以此时需要反悔&#xff1a;把i取出来的同时&#xff0c;将a[i-1]a[i1]-a…

vue3 element-plus表单form验证规则设置的require:true无效

必填项为空校验&#xff0c;valid第一次为true&#xff0c;再点值为false 引入FormInstance &#xff0c;校验代码改为以下&#xff1a; import { ElMessage, FormInstance } from element-plus const ruleFormRef ref<FormInstance>()const submitForm async (formEl:…