面向对象程序设计
就拿五子棋来举例子
把构成问题食物分解为各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述各个实物在解决整个解决问题的步骤中的行为
五子棋
-
黑白双方:两方行为是一模一样的
-
棋盘系统:负责绘制画面
-
规则系统:负责判定诸如犯规`输赢等
把题目改为写一个围棋就只用改规则系统,而不用重写,可以提高代码编译效率
去食堂打饭
实现封装和信息隐藏
-
特点:
-
有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相互独立,互不干扰
-
将对象隐藏,只留下接口,让团队合作成为可能
-
把对象的属性和操作结合成一个独立对的系统单位。并尽可能隐藏对象的内部细节
比如报刊亭会隐藏刊物的价格,刊物的具体信息,内部信息
减少修改引起的波动效应
抽象
特点:将有关事物的共性归纳,集中的过程,将同一类事物的本质提取出来,C/C++中的数据类型就是对一批具体的数的抽象
比如结构体定义新的数据类型
同一个事物在不同的场合抽象出来的特征不同
比如在理发店关注的是你的发型,而课上关注的是你的学习情况
对象是类的一个实例
继承与重用
好处:
-
实现类的重用,简化程序设计的步骤
为了偷懒难点在于怎么去分析问题
多态性
几个相似而不完全相同的对象,让我们发出同一个消息,他们反应各不相同。这种情况就是多态现象
来增加程序的灵活性
polymorphism(多态性)
比如你考了60分,你和你妈的反应是不同的,你想哭,而你妈可能想发飙
对象=算法+数据结构
程序=(对象+对象+…)s
面向对象基础 ——类和对象
类是对象的抽象,对象是类的具体实例
//定义对象
class Student{ //注意:成员函数可以访问本类中任何成员,包括私有和公有的,可以引用在本作用域的有效的数据
public: //共有的,外部接口
void display()
{
cout<<"num"<<num<<endl;
cout<<"name"<<name<<endl;
cout<<"sex"<<sex<<endl;
}
private: //内部接口,外部只能通过访问public来间接访问到
int num;
int name;
char sex;
protected:
}stu1,stu2;//最好不这样写的,因为限制了class的对象范围
//-------------------
//定义函数还可以在类外定义 但要加入类名限定符:: 和类名
void Student::display(){
cout<<"num"<<num<<endl;
cout<<"name"<<name<<endl;
cout<<"sex"<<sex<<endl;
}
成员函数的存储
分配空间 :类的代码要不占空间,各个对象代码共占一个空间,只为数据分配空间,大大节省了存储空间
对象成员的访问方式
- 直接对象名访问
- 指针访问 ->
- 引用取别名访问
封装
用头文件
#include "student.h"
一个标准的程序工程应该包括
-
标准函数头文件
-
标准类库头文件
-
自定义类库头文件
-
自定义函数
-
main主函数
#include <iostream> #include <cmath> #include "student.h" #include "SomeFunction.h" //------------------ int main{ return 0; } //--- .h头文件格式 #ifndef _STUDENT_ #define _STUDERNT_ class{ }; #endif //结束