[C.C++] C++ 封装

742 0
Honkers 2025-8-26 20:39:06 来自手机 | 显示全部楼层 |阅读模式

C++的封装

1、封装的作用

  1. 尽量使代码或者功能独立(保证代码和功能独立性)
  2. 封装,可以达到,对外提供接口,屏蔽数据,对内开放数据
  3. C++的封装: class封装的本质,在于将数据和行为,绑定在一起然后通过对象来完成操作。
复制代码

2、构造函数

  1. 特点:1、没有返回值;
  2. 2、函数名与类名相同;
  3. 3、可以重载;
  4. 4、当实例对象时,会自动调用;
  5. 5、系统会默认生成构造函数;
  6. 规则:1、当用户给类定义任何构造函数时,系统会默认生成一个无参构造函数;
  7. 如果定义了其他构造函数,系统不会生成默认的构造函数;
  8. C++11引入关键字: default delete
  9. Student ()= default;(使用系统默认生成的无参构造函数)
  10. Student () = delete ;(系统不要生成默认的无参构造函数)
复制代码

2.1构造函数的分类:

  1. 1、默认无参构造函数;自定义的有参构造函数。
  2. 2、类型转换构造函数,构造函数只有一个参数;防止隐式类型转换必须加 explicit
  3. 3、拷贝构造函数;
  4. 4、移动拷贝构造函数;
复制代码

2.1.1 将类名转换成其他类型

  1. 重载运算符 :operator 类型()
复制代码


2.2 析构函数

  1. 析构函数:释放属性所占用的空间
  2. 特点:函数名是:~ 类名; 无形参; 不能重载; 函数没有返回值;
  3. 当对象释放空间时会调用自身的析构函数;
复制代码

3、this 指针

  1. 保存的是当前对象的地址; 对应的对象的方法形参都会多一个相应类型的this指针,传参时,将
  2. 对象的地址传递给this。
复制代码

4、初始化列表

  1. 1、处理一些特殊的成员属性;这些属性语义:都必须定义并初始化
  2. eg: 引用:定义必须初始化;
  3. const : 定义必须初始化;
  4. 成员对象(无默认构造函数∶无参的构造函数):实例对象时会自动调用构造函数(定义并初始化)>
  5. 注:初始化列表的效率要高于在构造函数内部初始化;建议大家优先使用初始化列表!|
复制代码

5、拷贝构造函数

  1. 作用及调用时机:用已有的对象初始化新的对象;
  2. 默认生成规则:当类里未定义拷贝构造函数,系统会默认生成拷贝构造函数;
  3. 函数类型: Student (const Student& stu); 实现将stu里的成员赋值给当前对象;
  4. !!!!默认生成一个 = 运算符重载函数; 拷贝赋值运算符重载;
复制代码

何时调用:
1、一个对象需要通过另一个对象进行初始化的时候;
2、一个对象以值传递的方式传入函数体(作为参数);
3、一个对象以值传递的方式从函数返回(作为返回值);

6、浅拷贝

  1. 用一个对象给另一个对象做初始化,会调用拷贝构造函数(只是做简单的指针赋值),会造成“野指针”;
  2. “让新旧两个对象中的指针指向了同一块存储空间”
复制代码

7、深拷贝

  1. 手动写拷贝构造函数,程序员自己给指针分配空间;
复制代码

8、static

  1. 在C语言中:
  2. 修饰局部变量:延长生命周期;
  3. 修饰函数或者文件:限制作用域,解决命名空间;
  4. 在C++中:
复制代码

8.1 修饰静态成员

类成员必须在类外初始化:static所修饰的变量

类成员(静态成员) : 属于类,不属于某个具体的对象;
访问形式:对象名.类成员名 / 类名::类成员名

8.2 也可以修饰函数

  1. 静态成员函数(类成员函数): 属于类
  2. 要求:不能访问非静态成员变量;(静态成员函数属于类。所以没有默认的this指针生成)
  3. 访问方法:不需要去实例化对象
复制代码


8.3 总结

  1. C/C++ static关键字的作用?
  2. 修饰局部变量、局部对象。延长该变量或者对象的生命周期;(函数调用完释放,一次析构)
  3. 修饰全部变量或者全局对象,只能在本文件访问不能在其他文件访问;
  4. 修饰类成员变量时:该变量为静态变量,属于类,被该类所以实例化对象共享访问,不占用对象的空间。
  5. 修饰普通函数:该函数只能在本文件访问,不能在其他文件访问;
  6. 修饰成员函数:该函数为静态成员函数,属于类,不属于对象,被该类所以实例化对象共享访问;没有this指针,不能访问类的非静态成员。
  7. 什么样情况下需要用static修饰一个类的成员或者成员函数?
  8. C/C++混合编程时,C的接口需要一个函数地址作为参数时,只能将类的非静态成员函数变为静态成员函数;
复制代码

调用C接口处理一些网络编程或者数据库的代码,其中pause()函数作用是挂起,然后按下任意键继续输出调用函数的内容;


9、const

  1. C/C++ const关键字的作用:
  2. const 修饰普通变量 C是只读变量 C++是常量
  3. C++:const修饰成员函数,该成员函数只能访问成员变量,不能修改,需要修改成员变量时,需要加mutable修饰成员; //eg1
  4. C++:const修饰一个对象,称之为常对象,只能调用const修饰的成员函数;//eg2
复制代码

eg1:

eg2:


10、空类默认生成的成员

11、指向类成员的指针


eg1:

11.1 用指向类员函数的指针,实现更加隐蔽的接口。

C语言:


C++:


12、友元机制

  1. 提高程序运行效率,减缓调用函数返回的时间开销;(适用于频繁调用的函数或类)
  2. 友元是一种允许非类成员函数访问类的非公有成员的一种机制。
  3. 可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。
复制代码

注意事项:


13、运算符重载

不能重载的运算符:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行