面向对象程序设计的4个主要特点是什么?

抽象

封装

继承

多态

类和对象体现了抽象和封装

基于以上四点的程序称为面向对象的程序设计。

什么是类?

前边我们学习过c++中的结构体,struct的使用是先声明,然后定义一个该结构体的变量,最后再初始化(赋值)

其实结构体的声明当中有很多不同数据类型的成员,在一个结构体当中,这就是对属性的封装,但是结构体与类相比较,还缺少了一个重要的环节,结构体当中只有属性,只封装了属性,但没有封装相应的操作,也就是没有封装操作成员属性的函数。

类当中有两个方面,一是封装属性,二是封装函数。在自己声明的类当中要既有属性又有函数,这就是类。

什么是对象?

在结构体中声明一个结构体就相当于我们设计了一个类,定义一个结构体就相当于我们定义了一个对象

比如 声明一个结构体相当于封装了一个类(但缺少相应的操作)

struct Student{

private int num;

string name;

float score;

string address;

这里如果再有函数就是一个类了

};

定义给两个结构体,相当于我们定义了两个对象

Student student1,student2;

初始化结构体,相当于对象的初始化


 

客观世界中任何一个事物都可以看成一个对象(Object),对象可以是自然物体(如汽车、狗熊)也可以是一种逻辑(如班级、连队)。

任何一个对象都有两个要素:一个是静态特征,如班级专业,班级人数,所在教室,这种静态特征称为属性。

                                             一个是动态特征,如班级学习、班级开会、班级体育比赛,这种动态特征称为行为(或功能)。

封装的意义?

把一部分或全部属性和部分功能(函数)对外界屏蔽,就是从外界(类的大括号之外)看不到,不可知,这就是封装的意义。

实际上就是用了一个后边会介绍的关键字 private 私有化关键字来完成,就是隐蔽,比如账号的密码,你如果玩网络游戏,你的账号密码别人都可以看到,访问,所以要把它封装。

封装两个方面的含义:一是将有关数据和操作代码封装在对象当中,形成一个基本单位,各个对象之间相对独立互不干扰。

                                   二是将对象中某些属性和操作私有化,已达到数据和操作信息隐蔽,有利于数据安全,防止无关人员修改。


 

类与对象之间的关系是什么?

程序设计当中,常用到抽象这个词,这个词就是解释类与对象之间关系的词。

类与对象之间的关系就是抽象的关系。

一句话来说明:类是对象的抽象,而对象则是类得特例,即类的具体表现形式。

举例说明上面的那句话:

我们都是人类,人类是不是有自己的属性,属性有年龄、名字、ID、性别,人类是不是有功能,即操作能力,能说话、能吃饭、能睡觉,能思考解决问题。

我们大家都是人类,我们彼此却又不相同,我们每一个人具有自己的属性的能力,每一个人就是人类的某一个对象。

把我们共同的属性和功能向上抽取,这就是抽象,抽象程一个人类。


 

继承

面向对象的继承是为了软件重用,简单理解就是代码复用,把重复使用的代码精简掉的一种手段。

如何精简,当一个类中已经有了相应的属性和操作的代码,而另一个类当中也需要写重复的代码,那么就用继承方法,把前面的类当成父类,后面的类当成子类,子类继承父类,理所当然。就用一个关键字extends就完成了代码的复用。


 

多态

没有继承就没有多态,继承是多态的前提。

举例来说明多态

猫、狗、鸟都是动物

动物不同于植物,猫、狗、鸟都可以叫、都可以吃

这些功能可以同时继承自动物类,猫类、狗类、鸟类都是动物类的子类

但是猫的叫声是“喵喵喵” ,狗的叫声是“汪汪汪”,鸟的叫声是“吱吱支”

猫爱吃鱼,狗爱吃骨头,鸟爱吃虫子

这就是虽然继承自同一父类,但是相应的操作却各不相同,这叫多态。

由继承而产生的不同的派生类,其对象对同一消息会做出不同的响应。


 

知道了以上概念就可以进行面向对象编程(Object Oriented Programming,简称OOP)

现在开始声名一个学生类:

class  Student{

int num;

string name;

char sex;

void display(){

cout<<"num:"<<num<<endl;

cout<<"name:"<<name<<endl;

cout<<"sex:"<<sex<<endl;

}

};

封装一个类,然后用这个类定义两个对象

Student student1,student2;

如果是重要或是私有的信息,不让外界知道,可以进行私有化处理:

class {

private:

int num;

string name;

char sex;

public:

void display(){

cout<<"num:"<<num<<endl;

cout<<"name:"<<name<<endl;

cout<<"sex:"<<sex<<endl;

}

}student1,student2;

在C++中如果不定义private和public,则系统默认为是私有。

还可以用无名类来定义对象,必须要求封装类之后同时定义对象。


 

对象成员的引用或初始化

私有化的不可以这样写

不能 student1.num=100001;student1.name=”张三";针对于public:

对象调用函数 student1.display();

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程