C++ 封装

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 将类名转换成其他类型

 重载运算符 :operator 类型()


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、运算符重载

不能重载的运算符:

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geminikzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值