类和对象的属性

注意:本文为书籍摘要版,适合有一定程序基础的人阅读。

2.1 面向对象程序设计方法概述

2.1.1 什么是面向对象的程序设计

1.对象

客观世界中的任何一个事物都可以看成一个对象。

如果我们把一个班级作为一个对象时有两个要素:一个是班级的静态特征,如班级学生的身高体重(可认为不变)等不变的特征,我们称为“属性”(即数据);二是班级的动态特征,如学生吃饭,上课,睡觉等,我们称为“行为”。如果想要在外部控制班级学生的动作的话,可以从外界给班级发一个信号,比如打铃就是告诉学生该上课了,这个消息我们称它为“消息”(即调用函数,发消息)。

任何一个对象都应当具有属性和行为这两个要素。对象应能根据外界给的消息进行相应的操作。一个对象一般是由一组属性和一组行为构成的。

在C++中,每个对象都是由数据和函数(即操作代码)这两部分组成的。数据体现了前面提到的“属性”,如一个三角形对象,它的3个边长就是它的属性。函数是用来对数据进行操作的,以便实现某些功能,例如通过边长计算三角形的函数。

2.封装与信息隐蔽

可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的,甚至是不可知的。比如我们只需要知道DVD机的几个使用按钮(接口)的作用,然后直接使用即可,而无需知道它的内层构造。在设计一个对象时,要把对象的内部实现和外部行为分隔开来。

面向对象程序设计方法的一个重要特点就是“封装性”,所谓“封装”,指两个方面的含义:一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰;二是将对象中的某些部分对外隐蔽,即隐蔽其内部细节,只留下少数接口以便与外部联系,接收外部的消息。

3.抽象

抽象的作用是表示同一类事物的本质。

类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。我们可以理解为,猫有很多种,有白猫黑猫小花猫,它们同属于猫类,“猫”就是类,而白猫黑猫等就是猫类的对象,的具体化。或者我们可以说,白猫就是一个白猫类,它们共同具有毛色为白色,会喵喵叫等属性;而假如有一只白猫叫做小白,那么小白就是白猫类的实例化对象,它继承自白猫类;而白猫类则继承自猫类,小白和白猫类都是猫类的子类或派生类。

4.继承与重用

继承可以阅读如上所述的猫类描述。

白猫具有喵喵叫,会抓老鼠,皮毛为白色,同理,黑猫则具有喵喵叫,会抓老鼠,皮毛为黑色的特征;这时我们为了简便,可以将具有喵喵叫,会抓老鼠等特征提取出来,并把它描述为猫类。而白猫类继承自猫类 即 直接用猫类实例化一个对象为白猫类,再加上自己所具有的白色皮毛;将黑猫类继承自猫类,再加上自己所具有的黑色皮毛;这样将某部分共性特征提取出来定义为一个类,再采用继承的方式创建新的一个类,就可以大大节省变成工作量了,这就是常说的软件重用。

5.多态性

在C++中,所谓多态性是指:由继承而产生的相关的不同的类,其对象对同一消息会做出不同的响应。多态性是面向对象程序设计的一个重要特征,能增加程序的灵活性。

2.1.2 面向对象程序设计的特点

程序设计者的任务包括两个部分:一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。

2.1.3 类和对象的作用

类是所有面向对象的语言的共同特征。

C++支持面向过程的程序设计,也支持基于对象和面向过程的程序设计。基于对象就是基于类。

在实际中,一组数据与一组操作相对应的。因此人们设想把相关的数据和操作放在一起,形成一个整体,与外界相对分隔。这就是面向对象的程序设计中的对象。

面向过程:程序 = 算法 + 数据结构

面向对象:程序 = 对象s + 消息 或 {对象 = 算法+数据结构,程序 = (对象+对象+...)+消息}

对象s表示多个对象;消息的作用就是对对象的控制。程序设计的关键是设计好每一个对象,以及确定向这些对象发出的命令,使各对象完成相应的操作。

2.1.4 面向对象的软件开发

全是概念化的东西,故简述。

1.面向对象分析(object oriented analysis, OOA)

2.面向对象设计(object oriented design, OOD)

3.面向对象编程(object oriented programming, OOP)

4.面向对象测试(object oriented test, OOT)

5.面向对象维护(object oriented soft maintenance, OOSM)

2.2 类的声明和对象的定义

2.2.1 类和对象的关系

在C++中,对象的类型称为类,类代表某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例。

2.2.2 声明类的类型

在C++中声明一个类的类型的方法和声明一个结构体类型是相似的。

声明一个结构体类型的方法:

struct Student            //声明了一个名为Student的结构体类型
{
int num;
char name[];
char sex;
};
Student stud1,stud2; //定义了两个结构体变量stud1 和 stud2

上面声明了一个名为Student的结构体类型并义了两个结构体变量stud1 和 stud2。可以看到它只包括数据(变量),没有包括操作。

声明一个类:

class Student            //以class开头,类名为Student
{
int num;
char name[];
char sex; //以上三行是数据成员
void display() //这是成员函数
{
cout<<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl; //以上三行是函数中的操作语句
}
};
Student stud1,stud2; //定义了两个Student类的对象stud1 和 stud2

第一行(class Student)是类头,由关键字class与类名Student组成,class是声明类时必须使用的关键字。第二行的右花括号是类体,类体是用一对花括号包起来的。类的声明以分号结束。

2.3 类的成员函数

2.4 对象成员的引用

2.5 类和对象的简单应用举例

2.6 类的封装性和信息隐蔽

C++面向对象程序设计之类和对象的特性的更多相关文章

  1. javascript 面向对象程序设计--深刻理解对象

    javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...

  2. C++之类和对象的特性

    简介:C++并不是一个纯粹的面向对象的语言,而是一种基于过程和面向对象的混合型的语言. 凡是以类对象为基本构成单位的程序称为基于对象的程序,再加上抽象.封装.继承和多态就成为面向对象程序. 1.掌握类 ...

  3. OOP_面向对象程序设计概述

    李际军老师"面向对象程序设计"课程第一课笔记整理 面向对象程序设计概述 20世纪90年代以来面向对象程序设计(Object Oriented Programming, 简称OOP) ...

  4. C++面向对象程序设计学习笔记(1)

    基本概念 对象: 面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,每个对象都是由数据和操作代码两部分构成的. 类: 面向对象程序设计中,类是具有相同的数据 ...

  5. 你好,C++(31)我终于找到对象啦!6.1 从结构化设计到面向对象程序设计

    第6章 当C++爱上面向对象 很多第一次进入C++世界的人都会问:C++中的那两个加号到底是什么意思啊? C++是由C语言发展而来的,它比C语言多出的两个加号,实际上是C语言的自增操作符,表示C++语 ...

  6. Python 面向对象(创建类和对象,面向对象的三大特性是指:封装、继承和多态,多态性)

    概念:                                                                                                 ...

  7. php开发面试题---php面向对象详解(对象的主要三个特性)

    php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...

  8. Java第7次作业:造人类(用private封装,用static关键字自己造重载输出方法)什么是面向对象程序设计?什么是类和对象?什么是无参有参构造方法 ?什么是封装?

    什么是面向对象程序设计? 我们称为OOP(Object  Oriented  Programming) 就是非结构化的程序设计 要使用类和对象的方法来进行编程 什么是类,什么是对象 类就是封装了属性和 ...

  9. sdut 面向对象程序设计上机练习九(对象指针)

    面向对象程序设计上机练习九(对象指针) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 建立对象数组,内放5个学生数据(学号是字符串类型.成绩是整型).设 ...

随机推荐

  1. Zabbix4.0.3解决中文乱码

    字体下载地址:https://github.com/hejianlai/Zabbix/raw/master/font/msyh.ttf放到以下目录,可能你的路径和我的不一样用find查出来cd /us ...

  2. Jenkins 无法捕获构建脚本错误问题

    Jenkins 版本 2.121.1 编写构建脚本执行,发现脚本执行出错,不会中断构建过程,导致最后展现的构建结果是错误的. 原因:构建脚本头部加入 #!/bin/bash ,jenkins会将脚本放 ...

  3. javascript深入理解js闭包(转载)

    此篇文章来源于http://www.jb51.net/article/24101.htm 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全 ...

  4. 15分钟在笔记本上搭建 Kubernetes + Istio开发环境

    11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...

  5. 适配器模式 adapter 结构型 设计模式(九)

    现实世界中的适配器模型   先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座   上图为插座适配器卖家的描述图   上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电 ...

  6. 痞子衡嵌入式:ARM Cortex-M调试那些事(1)- 4线协议标准(JTAG)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式调试里的接口标准JTAG. 在结束<ARM Cortex-M文件那些事>系列文章之后,痞子衡休整了一小段时间,但是讲课的 ...

  7. [前端]AngularJS 簡易物件修改入門

    各位好,今天要來介紹如何簡單的修改網站上AngularJS相關Application的內容 進而做到某些效果.(警告!所有的Web Application都應該在後端加上相關驗證) 透過本篇你可以簡單 ...

  8. .NET读取json数据并绑定到对象

    需要引用的命名空间: 读取的具体应用: this代表本实体(对象),通过PopulateObject,直接将读取到的json数据与对象进行绑定 Json保存的具体应用: 将对象保存为Json JObj ...

  9. WEB项目挂载到IIS session过期

    莫名丢失问题: 1.可能是因为系统内部连续的抛出了5次以上的异常 导致进程重启(当前所有在线用户) 2.IIS6 以上默认配置进程,session存在进程内其实是在W3wp.exe中这个进程不稳定,在 ...

  10. Android项目刮刮奖详解(四)

    Android项目刮刮奖详解(三) 前言 上一期我们已经是完成了刮刮卡的基本功能,本期就是给我们的项目增加个功能以及美化一番 目标 增加功能 用户刮卡刮到一定程度的时候,清除遮盖层 在遮盖层放张图片, ...