当前位置:   article > 正文

C++ 封装_把c++ 封装成类,只暴露类指针和虚接口

把c++ 封装成类,只暴露类指针和虚接口

C++的封装

1、封装的作用

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

2、构造函数

特点:1、没有返回值;
      2、函数名与类名相同;
      3、可以重载;
      4、当实例对象时,会自动调用;
      5、系统会默认生成构造函数;
规则:1、当用户给类定义任何构造函数时,系统会默认生成一个无参构造函数;
         如果定义了其他构造函数,系统不会生成默认的构造函数;


C++11引入关键字: default    delete  
  Student ()= default;(使用系统默认生成的无参构造函数)
  Student () =  delete ;(系统不要生成默认的无参构造函数)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.1构造函数的分类:

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

2.1.1 将类名转换成其他类型

 重载运算符 :operator 类型()
  • 1


2.2 析构函数

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

3、this 指针

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

4、初始化列表

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

5、拷贝构造函数

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

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

6、浅拷贝

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

7、深拷贝

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

8、static

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

在C++中:
  • 1
  • 2
  • 3
  • 4
  • 5

8.1 修饰静态成员

类成员必须在类外初始化:static所修饰的变量
在这里插入图片描述

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

在这里插入图片描述

8.2 也可以修饰函数

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

在这里插入图片描述
在这里插入图片描述

8.3 总结

C/C++ static关键字的作用?
修饰局部变量、局部对象。延长该变量或者对象的生命周期;(函数调用完释放,一次析构)
修饰全部变量或者全局对象,只能在本文件访问不能在其他文件访问;
修饰类成员变量时:该变量为静态变量,属于类,被该类所以实例化对象共享访问,不占用对象的空间。
修饰普通函数:该函数只能在本文件访问,不能在其他文件访问;
修饰成员函数:该函数为静态成员函数,属于类,不属于对象,被该类所以实例化对象共享访问;没有this指针,不能访问类的非静态成员。


什么样情况下需要用static修饰一个类的成员或者成员函数?
C/C++混合编程时,C的接口需要一个函数地址作为参数时,只能将类的非静态成员函数变为静态成员函数;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

9、const

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

eg1:

eg2:

10、空类默认生成的成员

在这里插入图片描述

在这里插入图片描述

11、指向类成员的指针


eg1:
在这里插入图片描述

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

C语言:

C++:

12、友元机制

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

注意事项:

13、运算符重载

不能重载的运算符:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/392631
推荐阅读
相关标签
  

闽ICP备14008679号