文章目录
1.面向对象的程序设计
1.1对象
客观世界中任何一个事物都可以看成一个对象(object),任何一个对象都具有属性和行为这两个要素,对象可以根据外界给的信息进行相应的操作,一个对象一般由一组属性和一组行为构成。
- 例如:将本人作为一个对象时有两个要素:一是静态特征,比如我有身高、体重、三围等,这些统称为属性;二是动态特征,比如我会跑步、吃饭、打球等,这些统称为行为。如果我在学习,我妈喊了一句:吃饭了!我便执行吃饭这种行为,其中我妈的这句话被称为消息
消息会要求对象实现某一行为(功能)
在C++中,每个对象都是由数据和函数组成,数据就是属性,函数就是行为,用来实现某种功能。
1.4抽象与类
抽象:将同一类事物的共同部分抽取出来
类就是对象的抽象,对象则是类的具体表现形式
1.3封装与信息隐蔽
对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说外界是看不到的,甚至是不可知的,留下一些外部接口,来访问对象中的内容,外部程序无需明白对象内部是如何实现的,只需要通过留下的接口访问对象即可,这种封装将对象的内部实现和外部行为分开。
- 图中最底层都是对象,第二层是由具体的人抽象出来的类,最高层这是由不同的类再次抽象出来的类
1.4继承与重用
C++提供了继承机制,采用继承的方法可以很方便地利用一个已有的类建立一个新的类,这就可以重用已有软件中的一部分代码,这就是“代码复用”。
- 例如:B类继承A类,B称为子类,A称为父类,A类中的大部分属性和行为都会被B类继承而来,无需在B类中重写再写一遍。
1.5多态
多态性:由继承而产生的的不同类,其对象会对同一消息产生不同的响应。
- 例如:甲乙丙三个同学都是同一年级不同班级的学生,他们都有基本的属性和行为,在同时听到上课铃声时,他们都会走进不同的教室上课,而不是同一个教室。
1.6面向对象程序设计的特点
- 面向对象程序设计的设计思路是:将数据和操作封装成一个个对象,降低程序块与程序块之间的耦合程度。
- 程序设计者的任务有两方面:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起,二是考虑怎样向有关对象发送消息,以完成所需的任务。
1.7类和对象的作用
- 类的作用:类是实现面向对象程序设计的基础,C++对C的改进就是增加了“类”这种类型。类是所有面向对象的语言的共同特征。
- 对象的作用:对象是类的具体例子,为了实现类中的功能必须通过对象来体现,我们在程序设计时也是面向对象的。
- 面向过程的结构化程序设计:程序 = 算法 + 数据结构
- 面向对象的程序设计:程序 = (对象+…+对象)+ 消息
------------------------------对象 = 算法 + 数据结构
1.8面向对象的软件开发
OOA---->OOD---->OOP---->OOT---->OOSM
OOA:面向对象分析
OOD:面向对象设计
OOP:面向对象编程
OOT:面向对象测试
OOSM:面向对象维护
2.类的声明和对象的定义
2.1类和对象的关系
- 类是对象的抽象,对象是类的具体实例
- 类是抽象的,不占用内存;对象是具体的,占用存储空间
2.2声明类的类型
- C语言中常用结构体来表示某一个类
struct Student{ //声明一个名为Student的结构体类型
int num;
char name[20];
char sex;
};
Student stud1,stud2; //定义两个结构体变量stud1和stud2
- C++中面向对象机制这样来表示某一个类
class Student{ //声明一个学生类
private: //声明以下部分为私有权限,只能在本类中访问
int num;
char name[20];
char sex;
public: //声明以下部分为公有权限,可以在本程序其他位置访问
void dispaly(){
cout<<"num = "<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
};
Student stud1,stud2; //定义两个学生类对象
- 结构体和类的区别:结构体的默认权限是public,类的默认权限是private
2.3定义对象的方法
- class 类名 对象名
class Student stud1,stud2;
- 类名 对象名
Student stud1;
Student stud2;
3.类的成员函数
3.1在类内定义成员函数
class Student{
public:
void move(){
cout<<"I'm moving!"<<endl;
}
};
3.2在类外定义成员函数
在类外定义成员函数时,需要使用“::”作用域运算符来声明函数是属于哪一个类的
class Student{
public:
void move();
};
void Student::move(){
cout<<"I'm moving!"<<endl;
}
- Student::move()表示move方法是属于Student类的
- ::move()表示move方法不属于任何一个类,它是一个全局函数
3.3内置成员函数
class Student{
public:
inline void move();
};
inline void Student::move(){
cout<<"I'm moving!"<<endl;
}
3.4成员函数的存储方式
- 系统为每个对象分配单独的空间,每个对象所占用的空间只是该对象的数据成员的存储空间,而不包括函数代码所占用的存储空间
- 同一个类中的不同对象的数据是不同的,但调用的其实是同样内容的代码,即只用一段空间来存放共同函数的代码,在调用对象时,都去调用这个公用的函数代码
4.成员对象的引用
class Student{
public:
int num;
void dispaly{
cout<<"num = "<<num<<endl;
}
};
4.1通过对象名和成员运算符访问对象成员
访问方法:对象名.成员名
Student stu;
stu.num = 10; //访问num属性
stu.display(); //调用成员函数
4.2通过指向对象的指针访问对象成员
Student stu,*p; //定义对象t和指针变量p
p = &t; //指针p指向t对象
(*p).num = 100; //利用指针间接访问属性和函数
(*p).display();
p->num = 100;
p->display();
4.3通过对象的引用访问对象成员
Student stu; //定义对象
Student &referStu = stu; //定义引用
referStu.num = 1001; //通过引用访问属性
referStu.display(); //通过引用调用成员函数
5.公有接口与私有实现
- 私有实现:类中被操作的数据是私有的,类功能的实现细节对用户是隐蔽的。
- 公有接口:类在对数据进行封装之后,会留出一些公有权限的函数,让用户可以合法的对类中私有数据进行操作,这些公有权限函数称为公有接口。
class Student{
private: //以下数据私有实现,只能在类内部的函数进行访问
int num;
int age;
public: //以下公有函数为公有接口,可以在类外进行访问
void setNum(int num);
void setAge(int age);
int getNum();
int getAge();
void displayInfor();
};