面向对象
面向过程:把问题分解成若干步骤,把每个步骤封装成函数,然后依次调用各个函数
- 面向对象:把问题看作对象之间的相互作用
- 如何把一头大象放进冰箱
- 创建大象和冰箱
- 冰箱自动打开
- 大象能进入冰箱
- 冰箱自动关门
- 面型对象编程中,一切都是类和对象
类和对象
类——类型 一类事物的统称,泛化的抽象概念
- 如:我想买一台电脑 ——电脑 -> 类
对象——变量 ;类实例化的结果,特指一个原本存在的事物
- 如:我正使用的电脑坏了 ——电脑->对象
用类定义对象的过程,称为实例化
-
C++中定义类可以使用struct 也可以是class
class 类名{ //访问控制属性: //属性 //方法 }; //实例 class Complex{ public: //属性 特征 double r;//实部 double v;//虚部 public: //方法 void show(void){ cout << r << "+" << v << "i" <<endl; } }; int main() { //实例化 Complex *ss = new Complex; }
面向对象的三大特征
-
封装
把一类事物都拥有的特征抽象为属性,把一类事物都具有的行为抽象为方法, 并加以访问可控制的属性限制,我们称之为封装
-
访问控制属性
-
public 公开的
-
protected 受保护的
-
private 私有的
-
一般情况下,属性会设置为受保护的或私有 的,方法会设置公开的,也会为私有属性提供公开的set和get
-
访问控制属性 类中 类外 子类 public 可以访问 可以访问 可以访问 pretected 可以访问 不能访问 可以访问 private 可以访问 不能访问 不能访问
-
-
继承
-
多态
class 类型名{
//属性
//方法 可以直接访问成员属性
};
实例化对象
-
用类型定义变量
-
类名 对象名 实例化的对象若不经过初始化,则是垃圾值,需要额外的赋值语句
-
如果需要在构造对象时,给对象进行初始化,需要在定义类时,添加构造函数
-
实例化对象一定要调用构造函数,如果一个类没有构造函数,则编译器会自动安排一个无参数的构造函数
-
//无参构造实例化对象 在栈内存实例化对象 ObjType obj; //调用无参构造实例化对象 ObjType obj(); //函数声明 声明一个函数名为obj 返回值类型为ObjType,且没有任何参数 ***!!! ObjType obj(arg,..); //调用有参构造函数
//C++11
ObjType obj{}; //调用无参构造
ObjType Obj{arg,…}; //调用有参构造
//在堆内存中实例化对象
ObjType *po = new ObjType; //调用无参构造
ObjType *po = new ObjType(); //调用无参构造
ObjType *po = new ObjType{}; //调用无参构造
ObjType *po = new ObjType(arg,...);
ObjType *po = new ObjType{arg,...};
//匿名对象 没有变量(对象)名的对象
ObjType(); //调用无参构造函数实例化一个匿名对象
ObjType(arg,...);
```
构造函数
在实例化对象时调用的函数,称为构造函数
class 类{
public:
//构造函数
类名(形参列表){
}
};
-
构造函数没有返回值,也不能声名为void
<