C++的封装
1、封装的作用- 尽量使代码或者功能独立(保证代码和功能独立性)
- 封装,可以达到,对外提供接口,屏蔽数据,对内开放数据
- C++的封装: class封装的本质,在于将数据和行为,绑定在一起然后通过对象来完成操作。
复制代码2、构造函数- 特点:1、没有返回值;
- 2、函数名与类名相同;
- 3、可以重载;
- 4、当实例对象时,会自动调用;
- 5、系统会默认生成构造函数;
- 规则:1、当用户给类定义任何构造函数时,系统会默认生成一个无参构造函数;
- 如果定义了其他构造函数,系统不会生成默认的构造函数;
- C++11引入关键字: default delete
- Student ()= default;(使用系统默认生成的无参构造函数)
- Student () = delete ;(系统不要生成默认的无参构造函数)
复制代码2.1构造函数的分类:- 1、默认无参构造函数;自定义的有参构造函数。
- 2、类型转换构造函数,构造函数只有一个参数;防止隐式类型转换必须加 explicit
- 3、拷贝构造函数;
- 4、移动拷贝构造函数;
复制代码2.1.1 将类名转换成其他类型
2.2 析构函数- 析构函数:释放属性所占用的空间
- 特点:函数名是:~ 类名; 无形参; 不能重载; 函数没有返回值;
- 当对象释放空间时会调用自身的析构函数;
复制代码3、this 指针- 保存的是当前对象的地址; 对应的对象的方法形参都会多一个相应类型的this指针,传参时,将
- 对象的地址传递给this。
复制代码4、初始化列表- 1、处理一些特殊的成员属性;这些属性语义:都必须定义并初始化
- eg: 引用:定义必须初始化;
- const : 定义必须初始化;
- 成员对象(无默认构造函数∶无参的构造函数):实例对象时会自动调用构造函数(定义并初始化)>
- 注:初始化列表的效率要高于在构造函数内部初始化;建议大家优先使用初始化列表!|
复制代码5、拷贝构造函数- 作用及调用时机:用已有的对象初始化新的对象;
- 默认生成规则:当类里未定义拷贝构造函数,系统会默认生成拷贝构造函数;
- 函数类型: Student (const Student& stu); 实现将stu里的成员赋值给当前对象;
- !!!!默认生成一个 = 运算符重载函数; 拷贝赋值运算符重载;
复制代码何时调用:
1、一个对象需要通过另一个对象进行初始化的时候;
2、一个对象以值传递的方式传入函数体(作为参数);
3、一个对象以值传递的方式从函数返回(作为返回值);
6、浅拷贝- 用一个对象给另一个对象做初始化,会调用拷贝构造函数(只是做简单的指针赋值),会造成“野指针”;
- “让新旧两个对象中的指针指向了同一块存储空间”
复制代码7、深拷贝8、static- 在C语言中:
- 修饰局部变量:延长生命周期;
- 修饰函数或者文件:限制作用域,解决命名空间;
- 在C++中:
复制代码8.1 修饰静态成员
类成员必须在类外初始化:static所修饰的变量
类成员(静态成员) : 属于类,不属于某个具体的对象;
访问形式:对象名.类成员名 / 类名::类成员名
8.2 也可以修饰函数- 静态成员函数(类成员函数): 属于类
- 要求:不能访问非静态成员变量;(静态成员函数属于类。所以没有默认的this指针生成)
- 访问方法:不需要去实例化对象
复制代码
8.3 总结- C/C++ static关键字的作用?
- 修饰局部变量、局部对象。延长该变量或者对象的生命周期;(函数调用完释放,一次析构)
- 修饰全部变量或者全局对象,只能在本文件访问不能在其他文件访问;
- 修饰类成员变量时:该变量为静态变量,属于类,被该类所以实例化对象共享访问,不占用对象的空间。
- 修饰普通函数:该函数只能在本文件访问,不能在其他文件访问;
- 修饰成员函数:该函数为静态成员函数,属于类,不属于对象,被该类所以实例化对象共享访问;没有this指针,不能访问类的非静态成员。
- 什么样情况下需要用static修饰一个类的成员或者成员函数?
- C/C++混合编程时,C的接口需要一个函数地址作为参数时,只能将类的非静态成员函数变为静态成员函数;
复制代码调用C接口处理一些网络编程或者数据库的代码,其中pause()函数作用是挂起,然后按下任意键继续输出调用函数的内容;
9、const- C/C++ const关键字的作用:
- const 修饰普通变量 C是只读变量 C++是常量
- C++:const修饰成员函数,该成员函数只能访问成员变量,不能修改,需要修改成员变量时,需要加mutable修饰成员; //eg1
- C++:const修饰一个对象,称之为常对象,只能调用const修饰的成员函数;//eg2
复制代码eg1:
eg2:
10、空类默认生成的成员
11、指向类成员的指针
eg1:
11.1 用指向类员函数的指针,实现更加隐蔽的接口。
C语言:
C++:
12、友元机制- 提高程序运行效率,减缓调用函数返回的时间开销;(适用于频繁调用的函数或类)
- 友元是一种允许非类成员函数访问类的非公有成员的一种机制。
- 可以把一个函数指定为类的友元,也可以把整个类指定为另一个类的友元。
复制代码
注意事项:
13、运算符重载
不能重载的运算符:
|