20210426C++
C++三大特性
C++面向对象编程,认为万事万物皆对象(对象上有行为和属性)
类:所有特性相同的对象的集合
对象:有属性和行为的一个整体(万事万物皆对象)
属性:对象的一个属性(类成员变量)
行为:对象的行为(类成员的实现函数)
一. 第一部分—C++的三大特性之封装
1. 封装:表示将一个对象的属性和行为加以权限控制,封装成一个类
定义:将属性和行为加以权限控制表示一个对象(将对象的属性和行为封装起来)
结构:
Class 类名
{
访问权限:
属性://变量、属性
行为://函数、行为
}
2. 访问权限
Public : 类内可以访问,类外也可以访问
Protected: 类内可以访问,类外不可以访问(继承使用)
Private: 类内可以访问,类外不可以访问
二. 第二部分—构造函数与析构函数
1. 构造函数与析构函数介绍
a) 作用:对象的初始化和清理(对象使用完之后不清理容易造成内存泄漏)
b) 构造函数与析构函数都是编译器自动调用来完成对象的初始化和清理作用的
c) 在我们不提供构造函数与析构函数时,系统对自动创建构造函数与析构函数的空实现
2. 构造函数:主要用于创建对象时,为对象和成员属性进行赋值
语法:类名(){}
注意:
a) 无返回值,无void
b) 可以重载,可以含参
c) 程序调用对象时会自动调用构造函数
3. 析构函数:在对象销毁前系统会自动调用,执行一些清理工作
语法:~类名(){}
a) 无返回值,无void
b) 不可重载,不能有参
c) 程序在对象销毁时自动调用
4. 构造函数重载分类、调用
4.1 按参数进行分类:
a) 有参构造:类名(参数列表){}
b) 无参构造:类名(){}
4.2 按类型进行分类:
a) 普通构造:类名(){} 类名(参数){}
b) 拷贝构造:类名(对象引用){}
4.3 调用方法(三选一记住即可)
a) 括号法:类名 对象名(参数); 类名 对象名;
b) 显示法:类名 对象名 = 类名(参数);
c) 隐式转换法:类名 对象名 = (参数);
4.4 拷贝构造函数调用时机
- 使用一个已经创建完毕的对象来初始化一个新对象
- 值传递的方式给函数参数传值
4.5 拷贝构造函数的调用规则 - 创建一个类,C++编译器会自动添加3个函数(构造,析构,拷贝构造)
- 当定义了有参构造,C++不提供无参构造了,但是会提供默认拷贝构造
当定义了拷贝构造,C++不会提高其余构造函数
三、第三部分—C++的初始化列表
初始化列表:用来初始化属性的
语法:构造函数(),属性1(值1),属性2(值2),…
在需要大量对属性进行赋值时,采用初始化列表进行赋值操作
四、第四部分—C++的类对象做类成员
对象成员:C++类中的属性可以是另一个类的对象(即在一个类中,另一个类对象作为该类的属性)
五、第五部分—静态成员(static)
1.静态成员:包含静态成员函数和静态成员变量(在函数或变量之前添加static就表示静态成员)
2.静态成员变量:(属于全局变量区)
特点:
所有对象共享一份数据
在编译阶段进行内存分配
类内声明,类外初始化
Static int num ; //类内部声明
Int 类名::num = 10;//类外部初始化::表示添加num的作用域(即num是那个类里面定义的变量需要说明,否则容易出现二义性)
3.静态成员函数:
a)所有对象共享一个函数
b)静态成员函数只能访问静态成员变量
调用方式:
1.通过类名直接进行调用
2.通过对象进行调用
六、第六部分—C++对象模型与this指针
C++中类成员变量与类成员函数是分开存储的,只有非静态成员变量才属于类对象上的(可通过sizeof去验证)
This指针:指向被调用的成员函数所属的对象(指向的是对象)
用途:
- 解决名称冲突问题(当形参与类成员变量同名时,可以通过this->指向类成员变量,来区分)在编写程序时,形参与变量名最好不一致,减少错误。
- 在类的非静态成员函数中返回对象本身(return *this)
七、第七部分—友元类(关键字friend)
作用:让一个函数或者类可以访问另一个类中的私有成员或者保护成员
实现方法:
1.全局函数做友元
2.类做友元
3.成员函数做友元
八、第八部分—运算符重载(关键字operator)
作用:对已有的运算符进行重新定义,赋予另一种功能,为了适应不同的数据
方式:
1.通过成员函数重载
2.通过全局函数重载
以上内容通过学习黑马程序员视频总结