继承 之 动态内存分配

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

AHB不对称半桥反激电路设计(一)变换器拓扑工作原理详解

本文详细分析了AHB(不对称半桥)反激变换器拓扑的工作原理及关键优势。该拓扑通过谐振腔结构实现原边功率管的零电压开通(ZVS)和副边整流管的零电流关断(ZCS),显著提升效率至95%以上。文章阐述了6个工作阶段的时序特征,包括谐振电感电流和电容电压的数学模型推导。AHB拓扑具有漏感能量回收、宽电压输出(适配PD快充等场景)和协同储能等优势,相比传统方案可缩小变压器体积30%,成为100-300W隔离电源的理想选择。

【Simon】的博客 7147

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

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

华数云图小分队的博客 1382

构造地貌研究入门:手把手教你用ArcGIS插件CalHypso分析流域地貌形态

本文详细介绍了如何使用ArcGIS插件CalHypso进行流域地貌形态分析,包括工具安装、数据预处理、HI曲线生成及结果解读等关键步骤。通过实战操作,帮助读者掌握面积高程积分(HI)曲线的应用技巧,为构造地貌研究提供量化工具。

weixin_33704234的博客 105

在国产麒麟系统上,用Postfix和Dovecot手搓一个内部邮件服务器(附Foxmail配置)

本文详细介绍了在国产麒麟系统上使用Postfix和Dovecot搭建内部邮件服务器的完整流程,包括系统准备、核心配置、安全加固及客户端适配。针对国产环境的特殊需求,提供了依赖包适配、配置差异和Foxmail客户端配置的实用解决方案,助力企业实现高效内部协作。

weixin_33722405的博客 371

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

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

chucksun0426的博客 952

CentOS7无网环境实战:MySQL8.0完整离线安装与避坑指南(附依赖包下载)

本文详细介绍了在CentOS7无网环境下MySQL8.0的完整离线安装流程,包括依赖包获取、系统预处理、MySQL二进制安装、服务配置与优化等关键步骤。特别针对离线安装的特殊需求,提供了从依赖包下载到服务调优的全链路解决方案,帮助用户在企业内网或隔离环境中高效部署MySQL数据库。

bush的博客 175

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

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

xiaogangjava的博客 686

2026保姆级:1小时搞定C# OPC UA客户端开发——PLC与上位机全量数据交互零基础教程

本文介绍了使用C#开发OPC UA客户端的核心流程和关键代码实现。文章首先指出工业上位机开发中OPC UA的重要性,并针对新手常见问题提出了1小时掌握核心功能的解决方案。重点内容包括:选择官方.NET Standard库的优势、5分钟搭建开发环境的步骤、OPC UA客户端架构与通信流程的图解说明,以及完整的客户端基础类代码实现,涵盖了连接管理、证书配置、安全认证等关键功能。通过本文提供的代码模板,开发者可快速实现与PLC等工业设备的稳定数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

ParaView :在paraview创建渲染视图

ParaView :在paraview创建渲染视图

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1305

继承与动态内存分配

当继承和动态内存分配的问题交织在一起的时候,我们考虑类实现的时候,就需要考虑更多的东西,先上代码: 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

华为OD机试真题2026双机位C卷 C语言 实现【明日之星选举】

给定一组选票votes。votes[i]代表第 i 张选票的内容,包含一个字符串"zhangsan,hanmei",表示推荐zhangsan为明日之星,反对 hanmei 称为明日之星。赞成或反对使用逗号(,)分割。 给定一个数组n,表示最后将筛选出赞成票最多的n个人,如果赞成票相同,则反对票越少,排序越靠前;如果赞成票和反对票都相同,则按照姓名字典序升序排序。

MISAYAONE的博客 184

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

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

weixin_32441957的博客 169

stata 工具变量法【计量经济系列(七)】

stata 工具变量法【计量经济系列(七)】 1. 内生性 2. 工具变量3. 2SLS (二阶段最小二乘法) 4. 弱工具变量5. 工具变量外生性的过度识别检验 6. 豪斯曼检验6.1 传统豪斯曼 6.2 杜宾-吴-豪斯曼检验(DWH)

侯小啾技术博客 2万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

梦悦foundation 284

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

pix_csdn的博客 246

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、付费专栏及课程。

余额充值