Past1
面向对象
面向对象=类+对象,类是一类事物的抽象化,对象是类的实例化
面向对象的三大思想:
- 封装:用一个{ }把变量和函数包起来
- 继承:为了实现代码复用
- 多态:接口的多种不同的实现方式
- 实现多态的前提:继承,同名虚函数的重写,父类指针或引用指向子类对象
类
类:一类事物的抽象的描述
class 类名 { 成员变量:事物属性, 成员方法:事物行为 }
第一个c++程序:
#include <iostream> unsing namespace std; int main() { int num = 0; cin >> num; //输入 cout << "num = " << num << endl; //输出 return 0; }
访问权限:public(公有),private(私有),protected(保护)
对比c++中struct和class:
- struct和class都可以写入成员变量和成员方法
- struct模式public共有,class默认private私有(建议成员方法公有,成员变量私有或保护)
- c语言不支持结构体写函数,c++可以
c++思想:
- 对外封装:成员变量不建议在类外修改
- 对内开放:成员函数可以使用任意一个成员变量
函数重载
同一个作用域内,多个函数,函数名相同,传递参数不同构成函数重载(同名不同参)
函数重载在编译是会进行命名倾轧。例:int init(int, int); --> init_int_int
在函数调用时,会做参数的默认匹配:(1)匹配成功,直接调用(2)匹配不成功,类型转换(3)以上皆无,编译失败
函数参数的默认值
在函数声明的时候,可以进行赋值
- 如果函数有声明也有定义,默认值要写在函数声明的时候。如果函数只有定义,没有声明,默认值写在函数定义的时候。
- 函数默认值只可以从右向左写入,不可以在中间存在
- 函数参数默认值与函数重载不可以构成二异性
构造函数
- 构造函数也叫构造器,在创建对象的时候,自动调用,用于初始化对象的成员变量,不可主动调用
- 构造函数名与类名相同,可以被重载,存在默认值
- 如果自己不去定义构造函数,系统会提供一个无参无返回值的构造函数
- 权限:public,如果改为其他的权限在类外无法去创建对象
初始化参数列表:
构造函数(参数列表)
:成员变量1(值1),成员变量2(值2)
{
构造函数的函数体
}
- 一般在构造函数和拷贝函数中可以使用参数的初始化列表对成员赋值
- 只适用与构造函数,程序运行时,先初始化成员变量,再去调用构造函数
- 初始化参数列表中的初始化顺序与声明顺序有关
- 如果类中有const常量成员,必须使用初始化参数列表进行初始化
- 如果有其它类的对象作为当前类的成员变量,必须使用初始化参数列表进行初始化
- 如果有继承,并且需要给父类的构造函数传参,必须使用初始化参数列表进行初始化
析构函数
- 在销毁对象时候自动调用,用来释放内存
- 析构函数名与类名相同前面加~,无参无返回值,不可以被重载,不可以被主动调用
- 一般在构造函数时有malloc/new申请内存,需要自己定义一个析构函数free/delete来释放内存
- 如果自己不定义析构函数,编译器会提供一个无参无返回值的析构函数,一旦自己定义了析构函数,默认的将不复存在
new/delete运算符的使用
对比一下malloc和free
- malloc/free是函数,使用前需要添加头文件stdlib.h,new/delete是运算符,在使用前不需要头文件
- malloc返回值void*,在使用前需要类型强转,new的返回值是类的对象,在使用前不需要类型转换
- malloc传的参数表示申请的字节数,new的参数是元素个数。
- malloc/free的功能是申请和释放空间,new/delete可以申请释放空间,还可以调用构造函数和析构函数。
- new/delete向前兼容,malloc和free能做的事,new/delete都能做。

浙公网安备 33010602011771号