【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作用域是在类内部,系统默认传递给函数(非静态函数)的隐含参数
相关文章
|
19小时前
|
C语言 C++ 容器
C++ string类
C++ string类
8 0
|
1天前
|
C++ Linux
|
1天前
|
编译器 C++
【C++】继续学习 string类 吧
首先不得不说的是由于历史原因,string的接口多达130多个,简直冗杂… 所以学习过程中,我们只需要选取常用的,好用的来进行使用即可(有种垃圾堆里翻美食的感觉)
7 1
|
1天前
|
算法 安全 程序员
【C++】STL学习之旅——初识STL,认识string类
现在我正式开始学习STL,这让我期待好久了,一想到不用手撕链表,手搓堆栈,心里非常爽
16 0
|
1天前
|
设计模式 安全 算法
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
【C++入门到精通】特殊类的设计 | 单例模式 [ C++入门 ]
17 0
|
1天前
|
C语言 C++
【C++】string类(常用接口)
【C++】string类(常用接口)
21 1
|
1天前
|
存储 安全 测试技术
【C++】string学习 — 手搓string类项目
C++ 的 string 类是 C++ 标准库中提供的一个用于处理字符串的类。它在 C++ 的历史中扮演了重要的角色,为字符串处理提供了更加方便、高效的方法。
16 0
【C++】string学习 — 手搓string类项目
|
1天前
|
Java C++ Python
【C++从练气到飞升】06---重识类和对象(二)
【C++从练气到飞升】06---重识类和对象(二)
|
1天前
|
编译器 C++
【C++从练气到飞升】06---重识类和对象(一)
【C++从练气到飞升】06---重识类和对象(一)