文章目录 一、动态内存管理 二、C语言中的动态内存管理 1、C语言内存申请 2、C语言内存释放 3、代码示例C语言动态内存管理 一、动态内存管理 动态内存管理由 内存的申请 内存的释放 构成,这里的内存指的是堆内存,与之相对的是栈内存; 在程序运行时过程中,经常根据需要进行动态内存管理,从而更加灵活地管理内存资源,包括: 分配堆内存中的内存空间 释放堆内存中的内存空间 C语言和C语言中,都有动态分配/释放堆内存的方法; C语言中,主要是堆内存的分配与释放; C语言中,主要是对象的动态建立和释放; 二、C语言中的动态内存管理 1、C语言...

文章目录 一、构造函数为初始化列表传递参数 1、构造函数参数传递 2、代码示例构造函数参数传递 二、类嵌套情况下的构造函数/析构函数执行顺序 1、构造函数/析构函数执行顺序 2、代码示例构造函数执行顺序 一、构造函数为初始化列表传递参数 1、构造函数参数传递 构造函数初始化列表还可以使用构造函数中的参数; 借助构造函数中的参数列表,可以为初始化列表传递参数; 在下面的代码中,B类的有参构造函数,传入了3个参数,这三个参数都不在函数体中使用,而是在参数列表中使用, //构造函数中的参数可以作为 B(intage,intageOfA,intheig...

文章目录 一、浅拷贝内存分析 1、要分析的代码 2、调用有参构造函数创建Student实例对象 3、调用默认拷贝构造函数为新对象赋值 4、修改拷贝对象成员变量指针指向的数据 5、析构报错 一、浅拷贝内存分析 1、要分析的代码 下面的代码中,没有定义拷贝构造函数,因此C编译器会自动生成一个只进行浅拷贝的默认拷贝构造函数; 调用默认拷贝构造函数,对新对象进行赋值,修改新对象的值,析构两个对象,分析整个执行过程中栈内存/堆内存的运行状态; 代码示例: define_CRT_SECURE_NO_WARNINGS include"iostream" usingn...

文章目录 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 2、默认拷贝构造函数是浅拷贝机制 二、代码示例浅拷贝造成的问题 一、默认拷贝构造函数是浅拷贝 1、默认拷贝构造函数 如果C类中没有定义拷贝构造函数,C编译器会自动为该类提供一个"默认的拷贝构造函数",在函数中对成员变量进行简单的复制操作; "默认拷贝构造函数"用于创建一个新对象作为现有对象的副本,其作用是将现有对象的成员变量复制到新对象中; 创建一个类对象并将其赋值给另一个类对象时,会自动调用默认拷贝构造函数; 2、默认拷贝构造函数是浅拷贝机制 C编译器为类自动生成的默认拷贝构造函数是浅...

文章目录 一、深拷贝与浅拷贝概念简介 1、浅拷贝 2、深拷贝 3、浅拷贝与深拷贝对比 4、浅拷贝与深拷贝的使用场景 一、深拷贝与浅拷贝概念简介 1、浅拷贝 浅拷贝: 浅拷贝赋值表层成员变量:拷贝对象时只拷贝对象的顶层成员,即仅复制对象本身及对象成员变量,不复制成员变量中的子变量; 成员变量是指针或引用的情况:如果对象中的成员变量是指向其他对象的指针或引用,拷贝该对象时,复制的事这些指针或引用本身,指针或引用仍然指向原来的内存; 浅拷贝影响:使用浅拷贝将原对象复制一份后,对复制的对象进行修改可能会影响到原对象;因为两个对象持有相同的指针/引用; 浅拷贝场景...

文章目录 一、基础数据类型数组内存分析 1、malloc分配内存delete释放内存 2、new分配内存free释放内存 二、类对象内存分析 1、malloc分配内存delete释放内存 2、new分配内存free释放内存 博客总结: C语言中使用malloc分配的内存,使用free进行释放; C语言中推荐使用new分配的内存,使用delete进行释放; 对于类对象来说: 使用new操作符,可以自动调用类构造函数进行初始化操作; 使用delete操作符,可以自动调用类析构函数进行析构操作; 因此这里建议使用new创建类对象,使用delete释放对象; 对于普...

  K1I6GvxBEuyy   2023年11月02日   102   0   0 deletec++mallocnewfree

文章目录 一、类对象作为成员变量时的构造函数问题 1、问题描述 2、错误代码示例 二、构造函数初始化列表 1、构造函数初始化列表语法规则 2、代码示例构造函数初始化列表语法规则 一、类对象作为成员变量时的构造函数问题 1、问题描述 如果一个类A的对象作为另外一个类B的成员变量时, 在以下场景会报错: 为类A定义有参的构造函数,那么A的无参默认构造函数就失效了; 此时使用默认无参构造函数初始化B,就会报错; 在一个类中,其成员变量是带有参构造函数的类型,这种情况下没有调用有参构造函数的机会,此时就会出现编译报错情况; 在下面的代码中,A只有通过...

文章目录 一、类的封装:将数据和方法封装到一个类中 1、封装最基本的表层概念 2、代码分析基本封装 3、代码分析类对象作为参数传递的几种情况(指针/引用/直接) 4、完整代码示例 一、类的封装:将数据和方法封装到一个类中 1、封装最基本的表层概念 将数据和方法封装到一个类中,是封装最基础的概念; 类的封装最基本的功能就是将若干数据和若干方法,封装到一个类中,这些数据在内存中以一个整体的形式进行运作; 封装Encapsulation:将数据和操作封装在类中,可以将类内部的实现细节隐藏,只暴露有限的接口与外部进行交互,从而达到保护类对象的内部状态不被外部随意修...

  K1I6GvxBEuyy   2023年11月02日   62   0   0 类的封装封装c++原力计划

文章目录 一、类的封装:访问控制权限 1、访问控制权限 2、类的内部和类的外部概念 3、默认访问控制权限 二、代码示例访问控制权限 1、错误代码示例类的访问控制权限 一、类的封装:访问控制权限 1、访问控制权限 在C语言中,类的成员的"访问控制权限"是通过"访问修饰符"指定的; 类的成员属性和成员方法都可以设置访问控制权限,都可以被访问修饰符所修饰; C语言提供了3种访问修饰符: public:修饰的成员变量和成员函数,是公开的,可以在任何地方访问,在类的内部和类的外部都可以访问; protected:修饰的成员变量和成员函数,是受保护的,只能...

文章目录 一、函数指针定义方法 1、直接定义函数指针 2、通过函数类型定义函数指针 3、通过函数指针类型定义函数指针 4、代码示例不同方式定义函数指针 博客总结: 重载函数:使用相同的函数名,定义不同的函数参数列表; 判定标准:只有函数参数的个数/类型/顺序的不同是"函数重载"的判断标准,函数的返回值不是"函数重载"的判断标准; 二义性:如果函数重载与默认参数结合使用,出现了二义性,编译直接失败; 函数指针赋值重载函数:根据函数指针类型中的参数列表类型,自动匹配重载函数; 一、函数指针定义方法 先定义一个函数,在本章节中使用不同的方法,定义该函数对应的函数指针...

文章目录 一、函数重载 1、重载函数调用分析 2、函数重载特点 二、函数重载与默认参数 1、函数重载与默认参数出现的二义性分析 2、代码示例定义上述两个函数 3、代码示例没有二义性的函数调用 4、代码示例出现二义性编译失败 博客总结: 重载函数:使用相同的函数名,定义不同的函数参数列表; 判定标准:只有函数参数的个数/类型/顺序的不同是"函数重载"的判断标准,函数的返回值不是"函数重载"的判断标准; 二义性:如果函数重载与默认参数结合使用,出现了二义性,编译直接失败; 一、函数重载 1、重载函数调用分析 重载函数调用查询分析:调用一个重载函数,如...

文章目录 一、内联函数总结 二、内联函数代码示例 1、代码示例普通函数执行分析 2、代码示例内联函数执行分析 3、代码示例宏代码片段执行分析 一、内联函数总结 回顾下之前的博客中介绍的内联函数: 内联函数编译:C编译器编译内联函数时,会直接将内联函数函数体指令插入到调用内联函数的位置; 内联请求会被拒绝:使用inline关键字修饰普通函数,将其转化为内联函数,编译器不一定同意该内联请求,如果有循环语句/有很多条件判定语句/函数体庞大/对函数取地址操作/单独声明内联函数,即使写了inline内联函数,编译器也不会同意内联请求; 内联函数优势:内联函数与普通函数对比,...

文章目录 一、内联函数不能单独声明 1、普通函数声明 2、内联函数声明 3、错误代码示例内联函数声明 二、C编译器编译内联函数分析 1、内联编译与内联函数 2、内联函数指令直接插入到调用位置 3、内联函数没有额外调用开销 4、代码示例内联函数进行内联编译过程 一、内联函数不能单独声明 "inline"关键字,必须与函数名声和函数实现,写在一起,不能单独声明; 1、普通函数声明 我们定义一个普通函数 intfun(inta,intb) { returna<b?a:b; } 可以在头文件或其它位置声明普通函数: intfun(inta,int...

文章目录 一、默认构造函数 1、默认无参构造函数 2、默认拷贝构造函数 二、构造函数调用规则 1、构造函数规则说明 2、代码示例只定义拷贝构造函数 3、代码示例只定义有参构造函数 一、默认构造函数 C类中2种特殊的构造函数,分别是: 默认无参构造函数:如果C类中没有定义构造函数,C编译器会自动为该类提供一个"默认的无参构造函数",函数体为空,不做任何操作; 默认拷贝构造函数:如果C类中没有定义拷贝构造函数,C编译器会自动为该类提供一个"默认的拷贝构造函数",在函数中对成员变量进行简单的复制操作; 1、默认无参构造函数 如果C类中没有定义构造函数,C...

文章目录 一、拷贝构造函数概念 二、对象值作为函数参数 1、拷贝构造函数调用情况说明 2、代码示例对象值作为函数参数 三、对象值作为函数返回值 1、拷贝构造函数调用情况说明 2、代码示例对象值作为函数返回值 博客总结: "拷贝构造函数"又称为"赋值构造函数",该类型构造函数有4种调用时机; ①使用一个对象初始化另外一个对象:使用一个类实例对象初始化另外一个类实例对象; //使用一个对象初始化另外一个对象 //直接手动调用拷贝构造函数 Students2=Student(s1); ②将一个对象赋值给另外一个对象:将一个类实例对象赋值给另外一个类实例对象; ...

文章目录 一、构造函数意义 1、类的构造函数 2、构造函数显式调用与隐式调用 3、构造函数替代方案初始化函数 4、初始化函数缺陷 5、默认构造函数 6、代码示例初始化函数无法及时调用 一、构造函数意义 1、类的构造函数 C提供的构造函数和析构函数作为类实例对象的初始化和销毁方案; 定义一个类的若干实例对象,每个对象都有独立的成员属性; 当定义类的实例对象时,C编译器会自动调用开发者定义的构造函数; 2、构造函数显式调用与隐式调用 类的构造函数可以自动调用,也可以手动调用; 一般默认的无参构造函数是自动地隐式调用; 有参构造函数是由开发者手动显式调用;...

文章目录 一、在不同的内存中创建类的实例对象 1、括号法调用构造函数 2、等号法调用构造函数 二、完整代码示例 一、在不同的内存中创建类的实例对象 在上一篇博客【C】构造函数分类②(在不同的内存中创建类的实例对象|栈内存中创建实例对象|new关键字创建对象)中,分析了在栈内存和堆内存中创建对象的两种情况; 本篇博客中,继续分析,栈内存中调用有参构造函数的两种方法: 括号法 等号法 C类成员变量为: public: intm_age; charm_name; 之后都是以该成员变量为参考,为这两个成员变量赋值; 1、括号法调用构造函数 首先,在...

文章目录 一、构造函数分类 1、构造函数分类简介 2、构造函数分类代码分析 无参构造函数 有参构造函数 拷贝构造函数 二、代码示例三种类型构造函数定义与调用 一、构造函数分类 1、构造函数分类简介 C构造函数可以分为以下几类: 无参构造函数:最简单也是默认的构造函数,函数没有参数,调用的就是该类型的构造函数; 有参构造函数:带参数的构造函数,创建实例对象时,为成员变量提供初始值; 拷贝构造函数:拷贝现有实例对象,并以此拷贝的副本为数据创建一个新的实例对象,相当于创建了一个现有实例对象的副本,参数中包含一个相同类型实例对象引用; 2、构造函数分类代...

文章目录 一、构造函数和析构函数引入 二、构造函数简介 1、构造函数定义 2、构造函数调用 3、代码示例构造函数定义与调用 三、析构函数简介 1、析构函数定义 2、析构函数调用 3、代码示例析构函数定义与调用 一、构造函数和析构函数引入 在C语言中,创建对象时,需要进行对象创建的初始化工作,如:创建集合数组,为成员变量设置初始值; 在C头文件中,声明类的时候,不能对类的成员变量设置初始值,因此就需要设计一个可以设置初始值的场景; 为了解决上述C类对象初始化的问题,C编译器提供了"构造函数",在构造函数中进行类的实例对象初始化操作; "构造函数"是C类中的...

文章目录 一、构造函数与析构函数 二、代码示例构造函数与析构函数用途 一、构造函数与析构函数 在C语言中,"构造函数"和"析构函数"都是C类中的特殊函数,分别用于 初始化对象 销毁对象; C类在创建实例对象时自动调用构造函数这个特殊函数,其主要作用是初始化对象的成员变量,如果需要可以执行其他必要的操作; 构造函数的名称与类的名称相同; 构造函数没有返回类型; 构造函数可以带有参数,也可以不带参数; C类在销毁实例对象时自动调用析构函数这个特殊函数,其主要作用是销毁释放对象的成员变量,如果需要可以执行其他必要的操作; 析构函数的名称是加上类的名称; 析构函数...

关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~