【C++类】深拷贝、内联函数、数据成员

简介: 【C++类】深拷贝、内联函数、数据成员

本节课主要讲的是C++类中:深拷贝、内联函数、数据成员

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、深拷贝

在拷贝构造中,我们的指针不能直接赋值,所以我们就要使用深拷贝

指针内存拷贝

//使用memcpy/strcpyd内存拷贝

怎么使用:

class Students
{
public:
  int* p;
  int a;
  Students()
  {
    a = 10;
    p = &a;
    cout << "Student 构造函数" << endl;
  }
  Students(Students&stu)
  {
    p = new int;//在使用现在的指针p时,需要先申请空间
    memcpy(p, stu.p, sizeof(stu.p));//参数1:存储的变量,参数2:给参数1的地址,参数3:拷贝构造的指针大小
  }
};
Students stu;
Students stu2(stu);

解决拷贝构造所引发的指针成员二次释放崩溃的问题的方式

深拷贝

传地址

传引用

二、内联函数

内联函数与普通函数的区别

常规函数调用过程

调用时根据函数地址

跳到函数代码空间,执行指令

执行完,再跳转到调用的位置

综合:来回跳跃+记录跳跃的位置==一定的系统开销(资源+时间)

内联函数:用相应的代码替换调用

比常规函数稍快

代价是占用更多内存

内联函数的声明与使用

关键字:inline

inline void fun()
{
  cout<<"inline fun"<<endl;
}


函数声明要加inline

函数定义要加inline

注意:只在声明位置写inline不管用

常规函数和内联函数如何选择

特点

时间和空间

1.看实际需要

空间换时间

时间换空间

2.看性价比


实际

函数代码少,流程直接,调用频繁

循环里的


编译器智能

程序员请求将函数作为内联函数时,编译器不一定会答应

函数体过大

递归不能是内联函数

效果:写了等于没写,按常规函数进行编译

这个特性是编译器特性,即不是所有编译器都实现了这一功能

内联函数与宏的区别

内联函数比宏功能更强

类与内联函数

类内定义都是内联函数

显式定义

隐式定义

类外定义

有inline 是内联

没有inline不是内联

三、数据成员

相对特殊

引用成员
  初始化列表
const成员
  初始化列表
静态成员
  类外初始化
  无this指针
静态常量成员
  可在类内直接初始化
  也可在类外初始化
指针成员
  注意拷贝构造产生的问题

this

作用
  区分同名的
  是指向当前对象的指针
    所以可以通过指针访问成员
对象创建的时候才有
类型
  对应对象的类的指针类型
this指针不是成员
this作用域是在类内部,系统默认传递给函数(非静态函数)的隐含参数
目录
打赏
0
0
0
0
61
分享
相关文章
|
1月前
|
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
111 6
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
39 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
77 12
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
72 5
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
184 5
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
65 3
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
92 1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解2
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
87 3
|
6月前
|
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解1
【C++篇】C++类与对象深度解析(四):初始化列表、类型转换与static成员详解
98 3
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
【C++篇】C++类与对象深度解析(三):类的默认成员函数详解
52 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等