目录
面试题:
前言
- 这里会再谈到构造函数、static的用法,学习友员的用法。
- 再次理解封装、面和对象
一、再谈构造函数
之前谈过构造函数就是用来初始化的函数,分为带参和不带参,和系统自动实现的。
之前构造函数是赋初值,一个声明的过程,但在很多时候,不能只有声明,而且要定义,所以引入初始化列表。
- 冒号开始:成员变量 后跟一个初始值或表达式() 接着以隔开
- 注意每个成员变量在初始化列表种最多初始化一次
- 引用 、const 修饰、嵌套的没有默认构造函数的类,第三类必须放在初始化列表中
- 初始化的顺序与声明顺序有关
思考这道题目:
A、程序奔溃 B、10 10 C、随机值 10 D、10 随机值
答案:C 在初始化的时候,按声明的顺序,也就是先初始化a1,此时a2是随机值,所以a1初始化后就是随机值,a2初始化成10 所以是C
explicit关键字
首先介绍隐式类型转换
将对象先拷贝,在赋值给不同类型的变量
在类中
比如 第二行就是隐式类型转换
如果不想出现隐式类型转换,可以在构造函数前加explicit
二、静态成员变量
对于C语言有全局变量,而在C++中,经常用static关键字修饰,使其成为全局变量
特点:
- 修饰成员变量,一定要在类外进行初始化
- static修饰的成员变量,属于整个类,不属于某个对象,故static修饰的变量没有this指针
- 属于静态区
- 静态成员可以用 类名::静态成员名 来访问
面试题:写一个类,计算程序中创建多少个类对象
解:类对象的创建来自构造函数和拷贝构造,所以在类中写静态成员变量n,每次调用构造或拷贝就让n++;
注意:由于C++讲究封装性,所以将n声明在私有中 ,避免被修改
- 基于C++ 11
非静态成员变量,可以在声明时给缺省
三、友元
类具有封装性,在外部访问不了私有和保护的成员,但是调用友元关键字,就可以在类外部调用这些成员,但是破坏了类的封装性,所以不建议常使用
1.友元函数:
- 友元函数调用和一般函数一样
- 一个类可以有多个友元
- 友元函数不能加const
- 友元函数可以在类的任何地方声明
2.友元类
在类中能够调用其它类的隐私或者保护
- 可以声明在类中的任意地方
- 友元类的关系是单向的
- 关系不能传递
如B是A的友元,C是A的友元,不能得出B和C是友元关系
四、再次理解封装
C++面向对象,面向对象有三大特点:封装、多态、继承
封装:1.将方法与对象放在一起 2.公开、隐私和保护
举个简单的例子:
就像景区,如果不保护,那很容易遭到破坏,所以就需要人为去保护
保护也不是不让人去参观,设置合法的途径,买完票才能进入,而景区内部的人就能够在景区内自由访问
五、再次理解面向对象
面向对象就是计算机对现实世界的抽象
假设你想做一个外卖系统
面向过程关注的是底层的地点、餐品、客户的住址、客户的电话等等
而面向对象 重点关注 卖家 客户 骑手三者的关系,就是对现实世界的抽象
总结:
到这里,类和对象就算完结了
这里将了许多零零碎碎的知识点:像重载、缺省、class的声明、this指针
默认成员函数、又深入学习了面向对象
————编程没有捷径。