继承 之 动态内存分配

C++类继承与动态内存分配技术精讲 继承是面向对象编程的一个核心概念,它允许新创建的类(称为子类或派生类)获得一个或多个已存在的类(称为基类或父类)的属性和方法。在C++中,继承机制不仅简化了代码的编写,还增强了代码的可复用性,同时支持了程序的多态性。类继承通过关键字class或struct后跟冒号和继承类型(如publicprotected或private)来定义。继承类型决定了基类成员在派生类中的访问权限。继承在C++中的作用体现在以下几个方面:代码复用。 阅读详情

假设基类使用动态内存分配,并重新定义了赋值和复制构造函数
class class_a
{
 private:
    char* a;
    int rating;
 public:
    class_a(const char* l="null",int r=0);
    class_a(const class_a & rs);
    virtual ~class_a();
    class_a & operator=(const class_a & rs);
    ...
};

 

声明中包含了构造函数使用new时需要的特殊方法:析构函数、复制构造函数和重载赋值操作符。详情查看<<关于类隐式成员函数>>

 

当派生类使用new
class class_b:public class_a
{
 private:
    char* b; //use new in constructors
 public:
    ...
};

 

这种情况下,必须为派生类定义显示析构函数、复制构造函数和赋值操作符。

 

1.析构函数
    派生类析构函数自动调用基类的析构函数,故其自身的职责是对派生类构造函数执行工作的进行清理。因此,class_b析构函数必须释放指针 b 管理的内存,并依赖于class_a的析构函数来释放指针 a 管理的内存。
class_a::~class_a(){delete[] a;}
class_b::~class_b(){delete[] b;}

 

2.复制构造函数
基类定义的复制构造函数如下:
class_a(const class_a & rs)
{
  a= new char[std::strlen(re.a)+1];
  std::strcpy(a,rs.a);
  rating = rs.a;
}

 

由于class_b的复制构造函数只能访问class_b的数据,因此它必须调用class_a的复制构造函数来处理共享的class_a数据:
class_b::class_b(const class_b & hs):class_a(hs)
{
  b = new char[std::strlen(hs.b)+1]
  std::strcpy(b,hs.b);
}

 

3.赋值操作符
基类定义的赋值操作符如下:
class_a & class_a::operator= (const class_a & rs)
{
 if(this == &rs)
    return *this;
 delete [] a;
 a = new char[std::strlen(rs.a)+1];
 std::strcpy(a,rs.a);
 rating=rs.rating;
 return *this;
}

 

派生类的显示赋值操作符必须负责所有继承的class_a基类对象的赋值,可以通过显示调用基类赋值操作符来完成:
class_b & class_a::operator= (const class_b & hs)
{
 if(this == &rs)
    return *this;
 class_a::operator=(hs);
 b = new char[std::strlen(hs.b)+1];
 std::strcpy(b,hs.b);
 return *this;
}


class_a::operator=(hs) 使用函数表示法,而不是操作符表示法,可以使用作用域解析操作符,从而使得赋值操作符被正确的调用。

      

       当基类和派生类都采用动态内存分配时,派生类的析构函数、复制析构函数以及赋值操作符都必须使用相应的基类方法来处理基类元素。对于析构函数,这是自动完成的;对于复制构造函数,这是通过在初始化成员列表中调用基类的复制构造函数来完成的;如果不这样做,将自动调用基类的默认构造函数。对于赋值操作符,是通过使用作用域解析操作符显示地调用基类的赋值操作符来完成的。

类继承(动态内存分配) 在类继承中使用动态内存分配需要有一定的技巧,其中包括在基类中使用动态内存分配,在继承类中使用动态内存分配以及在继承类中使用动态内存分配,程序代码演示了这三种情况下的使用方法。 立即下载

相关推荐

C++类继承内存布局详解图(一目了然)

看了这个内存布局图详解之后,对于C++的了解更加深刻了,之前不懂得一头雾水的东西全都清楚了。

继承和动态内存分配

我们来看看拷贝构造函数,父类的拷贝构造函数没什么好说的,主要是子类,子类先用初始化列表将要传进来进行拷贝的子类对象传给父类,这是因为首先父类引用可以指向子类所以可以传,又因为我们对子类进行拷贝,子类中还有一些继承父类的组件得传给父类才能使得全部拷贝进去吧,否则只拷贝了子类自己特有的部分,因为我们必须传!最后我们看看重载赋值运算符,其实很容易想到重载赋值运算符其实和拷贝构造函数的功能是差不多的,因此基类的重载赋值运算符和拷贝构造函数的实现差不多。这里和上面子类的拷贝构造函数一样,也要先将父类拷贝了。

qq_55621259的博客 457

cocos2dx lua + protobuf

vs 2015 cocos2dx 3.10  lua  protobuf1. 下载 protobuf 源码     https://github.com/bnnswyp/protobuf/tree/master/protobuf-2.5.0    解压后的文件列表如下所示         其中 vsprojects 文件夹为 protobuf 的vs 工程2. 打开 protobuf.sln 编译...

u014486706的博客 2163

C++学习笔记——继承和动态内存分配

C++学习笔记——继承和动态内存分配——继承和动态内存分配是C++中两个重要的概念。

华数云图小分队的博客 1382

SAP打印错位问题终极解决指南:LP01设备格式设置全流程

本文详细解析了SAP系统中LP01设备打印错位问题的解决方案,重点介绍了SPAD事务码的配置流程和格式设置技巧。通过精准调整输出设备、设备类型和格式类型的匹配关系,有效解决'未定义格式'错误,确保打印内容准确对齐。文章还提供了高级排查方法和预防措施,帮助SAP管理员提升打印管理效率。

weixin_29311017的博客 390

【Allegro学习笔记】常规标贴封装创建-0402封装创建实例

摘要 本文主要介绍如何使用Allegro制作表面贴装封装。 所使用的软件 使用Allegro制作常规贴片封装主要使用的软件有Pad Designer和Allegro 1 0402类封装制作 1.1 0402类封装焊盘分析 0402封装尺寸图如图1...

Honglong 1万+

C++启蒙笔记(八)---类继承、动态内存分配

构造函数规则:对虚基类,除默认构造函数,否则必须显式调用虚基类的某个构造函数。定义:能够使用两个或多个基类派生出新的类,组合功能。相同)派生出的对象只继承一个基类对象,防止。多态调用指向(见2.3.1代码)虚基类:使得从多个类(他们。

chucksun0426的博客 952

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

C++ 继承与动态内存分配

C++ 继承与动态内存分配 一、问题导入 (1)继承是怎样与动态内存分配(即使用new与delete)进行互动的呢? (2)假如基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?取决于派生类的属 性。 根据上述两个问题,我们接下来看看如下两种情况下,继承与动态内存分配的关系: 二、第一种情况:派生类不使用new 2.1 基类使用动态内存分配 假如基类使用了动态内存分配,如下代码所示: // 基类 // 声明中包含了构造函数使用new时需要的特殊方法:析构函数、复制构造函数和重载

xiaogangjava的博客 686

【虚幻引擎】UE4初学者系列教程基础篇-全中文新手入门教程(UE5系列继续更新)

菜单栏菜单栏当中有文件、编辑、窗口帮助。文件当中可以进行一个关卡的新建、关卡的打开、关卡的保存还有就是打包项目,(项目大于关卡,项目里面可能有几百个关卡),这是比较常用的几个,这里可以看到打包当中有安卓端HTML5端,IOS端linux,还有就是TVOS(苹果电视)、windows的一些端口的一些设置。还可以打开最近打开的项目。关卡编辑器:工具栏3.3 “模式”面板保存所有:ctrl+shift+s(有的软件截屏也是这个按键需要注意)3.4 “内容浏览器”面板缩放:ctr+鼠标滚轮3.5.视口面板。

qq_45206556的博客 2万+

AGX Orin 部署PyTorch与Torchvision 2026避坑指南

本文提供了2026年在AGX Orin开发板上部署PyTorch与Torchvision的详细避坑指南。针对ARM64架构和JetPack 6.2系统,重点解决了Python 3.10环境配置、官方wheel包安装、torchvision源码编译等关键步骤,并分享了常见问题解决方案和性能优化技巧,确保深度学习环境稳定运行。

sky77的博客 752

继承与动态内存分配

当继承和动态内存分配的问题交织在一起的时候,我们考虑类实现的时候,就需要考虑更多的东西,先上代码: 1 #ifndef DMA_H 2 #define DMA_H 3 # include"iostream" 4 using namespace std; 5 class BaseDMA 6 { 7 //protected: //将父类私有成员变量private声...

weixin_30664539的博客 64

9篇6章7节:SEER 数据库的2025年数据变量多条件组合选择(2026年版)

软件中的病例筛选功能通过CaseSelection界面实现精准研究队列构建。该界面允许用户通过变量选择(Variable)、运算符定义(Operator)和取值设定(Values)三步操作创建筛选条件,支持种族、分期等关键变量的多条件组合。

MD Code 1455

php继承时的内存分配,C++ 中继承与动态内存分配的详解

C++ 中继承与动态内存分配的详解继承是怎样与动态内存分配进行互动的呢?例如,如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?这个问题的答案取决于派生类的属性。如果派生类也使用动态内存分配,那么就需要学习几个新的小技巧。下面来看看这两种情况:一.派生类不使用new派生类是否需要为显示定义析构函数,复制构造函数和赋值操作符呢?不需要!首先,来看是否需要析构函数,如...

weixin_32441957的博客 169

基于3D相机的人体穴位识别与标注系统——完整Python实现方案

摘要 本文提出了一种基于3D相机的人体穴位识别与标注系统完整实现方案。系统采用Intel RealSense D435相机实时采集RGB-D数据,结合MediaPipe Pose模型进行人体33个关键骨骼点的三维姿态估计。通过建立穴位与骨骼关键点的映射关系,利用相机内参和深度信息将二维图像坐标转换为三维空间坐标。系统采用模块化设计,包含数据采集层、算法处理层、坐标转换层和可视化层,实现了穴位定位、三维坐标转换和点云可视化功能。关键技术包括:基于骨度折量法的穴位映射算法、深度图像到三维点云的转换方法,以及Op

AI的内部世界的博客 270

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

P30-c++类继承-07继承和动态内存分配

文章目录1.继承和动态内存分配1.第一种情況:派生类不使用new2.第二种情况:派生类使用new2.使用动态内存分配和友元的继承示例 1.继承和动态内存分配 继承是怎样与动态内存分配(使用new和 delete)进行互动的呢? 例如,如果基类使用动态内存分配并重新定义赋值和复制构造函数,这将怎样影响派生类的实现呢?这个问题的答案取决于派生类的属性 如果派生类也使用动态内存分配,那么就需要学习几个新的小技巧。下面来看看这两种情况 1.第一种情況:派生类不使用new 假设基类使用了动态内存分配: // Base

梦悦foundation 284

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++继承、动态内存分配(C++ primer)

c++ primer plus P516,继承与动态内存分配 继承与动态内存分配 继承时派生类不使用new,则无需重新定义构造函数、析构函数、复制构造函数、重载赋值运算符; 继承时派生类使用new进行动态内存分配: 需要显式的定义 析构函数 复制构造函数 赋值运算符重载(需要先判断是不是this指针,再delete原动态内存分配,最后分配内存) 何时调用复制构造函数 将新对象初始化为一个同类...

pix_csdn的博客 246

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++学习笔记10-继承和动态内存分配,易错点总结

动态内存分配: ①派生类不使用new Q:是否需要为派生类重新定义复制构造函数,复制运算符,析构函数? A:不需要,子类中默认的复制构造函数,复制赋值运算符,析构函数就能完成所有的工作,虽然是浅层 复制,但是由于子类中没有申请动态内存,子类默认的复制构造函数,复制赋值运算符,析构函数都将 自动调用父类的复制构造函数,复制赋值运算符,析构函数,而父类的这些成员都是深复制的即可 ②派生类使用new Q:是否需要为派生类重新定义复制构造函数,复制运算符,析构函数? A:需要!! (Ⅰ)如何定义派生类复制构造函数

weixin_46028606的博客 236

C++PrimerPlus:第十三章类和继承:使用动态内存分配和友元的继承示例02

使用动态内存分配和友元的继承示例提示:以下是本篇文章正文内容,下面案例可供参考无。

zhyjhacker的博客 829

C++的继承和动态内存分配

C++的继承和动态内存分配

little_startoo的博客 369

C++之继承和动态内存分配

C++之继承和动态内存分配

sunfei2的专栏 1058

C++ day25 继承(五)继承和动态内存分配

文章目录当继承和动态内存分配搅和在一起,会有什么火花当基类没用new和delete(动态内存分配)当基类用了new和delete(动态内存分配)派生类不用动态内存分配派生类是否需要显示定义析构函数: no派生类是否需要显示定义复制构造函数: no派生类是否需要显示定义赋值运算符函数: no派生类也用动态内存分配派生类是否需要显示定义析构函数: yes派生类是否需要显示定义复制构造函数: yes派生...

wulimmya的博客 373
上一篇: 抽象基类 及 纯虚函数
下一篇: 继承 之 友元函数
TypeCool
博客等级 码龄22年 58粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值