C++概览2

本文详细介绍了C++中的动态存储,包括堆空间的使用、new和delete的语法,以及浅拷贝与深拷贝的概念。此外,还探讨了指针的运算规则。文章深入讨论了继承和派生类的特性,解释了为何使用继承,以及派生类的构造函数和析构函数的行为。同时,解析了虚函数和纯虚函数在多态性中的作用,以及抽象类的概念。最后,文章涵盖了多继承的情况,包括多继承构造函数的执行顺序和解决重复继承问题的虚基类。
摘要由CSDN通过智能技术生成

动态存储

堆空间的使用

  • 堆对象是在程序运行时根据需要随时可以被创建或删除的对象
  • 当创建堆对象时,堆中的一个存储单元从未分配状态变为已分配状态
  • 当删除堆对象时,存储单元从分配状态又变为未分配状态,可供其他动态数据使用

new 和 delete 的语法

new  T(初始值);
new T[E];
delete 指针变量;
delete [] 指针变量;
  • 创建和删除堆对象:算符new分配堆内存,如果成功,则返回指向该内存空间的首地址,如果失败,则返回NULL。所以每次使用运算符new动态分配内存时,都应测试new的返回指针值
  • 创建和删除堆对象数组:从堆上分配对象数组,只能调用无参构造函数(包括默认构造函数),不能调用其他任何构造函数
  • 使用堆空间的原因
    (1)直到运行时才能知道需要多少对象空间
    (2)不知道对象的生存期到底有多长
    (3)直到运行时才知道一个对象需要多少内存空间

浅拷贝与深拷贝

  • 默认拷贝构造函数可以用一个已有对象初始化一个新建立的同类对象。当对象的数据成员是简单数据类型时,默认构造函数可以做得很好
  • 当一个对象拥有的资源是由指针指示的堆时,默认拷贝构造函数仅作指针拷贝,而不重新分配内存空间;当对象作用域结束后,析构函数又会重复释放堆,将产生错误:需要使用用户自定义的拷贝构造函数

无名对象

  • 无名对象初始化一个引用
class Student {
   
public:
	Student(string name): name(name) {
   
		cout << "构造函数" << endl;
	}
	Student(const Student &obj) {
   
		cout << "拷贝构造函数" << endl;
	}
	~Student() {
   
		cout << "析构函数" << endl;
	}
	string getName() const {
   
		return name;
	}
private:
	string name;
};
int main(int argc, char *argv[], char *envp[]) {
   
	// 实例化一个无名对象:使用构造函数进行初始化
	// 构造一个对象:使用无名对象进行初始化,即调用拷贝构造函数
	// 再将对象的地址赋值给引用变量
	// 将无名对象进行析构
	Student &rStu = Student("kitty");
	cout << rStu.getName() << endl; // 并没有输出"kitty"
	rStu.~Student();

	system("pause");
	return 0;
}

在这里插入图片描述

class Student {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值