Visual c 第3章面向对象程序设计与C++语言 Windows编程采用的是面向对象的方法( Objec Oriented Programming,简称OOP)。面向对象软 件开发的方法是吸收了软件工程领域中有益概念和有效的方法,而发展起来的一种软件开发方法。它 集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发岀模块化、数据抽象程度高的、体现 信息隐蔽、可复用、易修改、易扩大等特性的程序。 Visual c++是 Windows环境下最主要的C++开发环境,它支持面向对象编程,并提供可视化编程 环境。要使用 Visual c++进行程序开发,有必要了解面向对象的基本概念和掌握C++语言。本章首先 简要介绍面向对象的基本概念,而后对C++语言的基础及要点作简单的介绍。 3.1面向对象程序设计概述 面向对象的程序的最根本的目的就是使程序员更好地理解和管理庞大而复杂的程序,它在结构化程序 设计的基础上完成进一步的抽象。这种在设计方法上更高层次的抽象正是为了适应目前软件开发的特点。3 3.1.1面向对象的基本概念 实际上,面向对象的技术不只是一种程序设计方法,而是建立客观事务模型,分析复杂事务的思 想方法。本节将简要介绍一下与面向对象相关的基本概念 1.对象、类、实体 面向对象的程序是由若干“对象”有机结合而成。对象是面向对象的程序设计中最基本的概念 般意义上的对象指的是一个实体的实例,确切地说,面向对象的方法中的对象就是现实世界中某个 具体的物理实体在计算机逻辑中的映射和体现 而现实世界的实体(如自行车),在计算机世界表达为 计算机世界 现实世界 客观世界 个计算机可理解、可操纵、具有一定属性和行为的对象 而类则可以理解为对同种对象的集合与抽象。类和对象 的关系,就如同整数与1、2、3的关系一样,即对象是类的 实例化。可以理解为类是一个抽象的框架,类中的变量赋了 实 值就是对象。类、对象与实体的关系可表示为如图3.1所示 主观世界 面向对象的程序是由若干“对象”有机结合而成。这些 对象可以互相通讯、协调和配合,从而共同完成整个程序的 抽象 任务和功能 2.对象的属性 3.1类、对象与实体的关系 面向对象的方法中,一个对象具有状态、行为和标识三方面特性 对象的状态也称为对象的静态属性,包括对象内部包含的各种信息—一变量,这些变量的值标明 励志照亮人生编程改变命运
46 励志照亮人生 编程改变命运 零基础学 Visual C++ 第3 章 面向对象程序设计与C++语言 Windows编程采用的是面向对象的方法(Objec Oriented Programming,简称OOP)。面向对象软 件开发的方法是吸收了软件工程领域中有益概念和有效的方法,而发展起来的一种软件开发方法。它 集抽象性、封装性、继承性和多态性于一体,可以帮助人们开发出模块化、数据抽象程度高的、体现 信息隐蔽、可复用、易修改、易扩大等特性的程序。 Visual C++是Windows环境下最主要的C++开发环境,它支持面向对象编程,并提供可视化编程 环境。要使用Visual C++进行程序开发,有必要了解面向对象的基本概念和掌握C++语言。本章首先 简要介绍面向对象的基本概念,而后对C++语言的基础及要点作简单的介绍。 3.1 面向对象程序设计概述 面向对象的程序的最根本的目的就是使程序员更好地理解和管理庞大而复杂的程序,它在结构化程序 设计的基础上完成进一步的抽象。这种在设计方法上更高层次的抽象正是为了适应目前软件开发的特点。3 3.1.1 面向对象的基本概念 实际上,面向对象的技术不只是一种程序设计方法,而是建立客观事务模型,分析复杂事务的思 想方法。本节将简要介绍一下与面向对象相关的基本概念。 1. 对象、类、实体 面向对象的程序是由若干“对象”有机结合而成。对象是面向对象的程序设计中最基本的概念, 一般意义上的对象指的是一个实体的实例,确切地说,面向对象的方法中的对象就是现实世界中某个 具体的物理实体在计算机逻辑中的映射和体现。 而现实世界的实体(如自行车),在计算机世界表达为一 个计算机可理解、可操纵、具有一定属性和行为的对象。 而类则可以理解为对同种对象的集合与抽象。类和对象 的关系,就如同整数与1、2、3的关系一样,即对象是类的 实例化。可以理解为类是一个抽象的框架,类中的变量赋了 值就是对象。类、对象与实体的关系可表示为如图3.1所示。 面向对象的程序是由若干“对象”有机结合而成。这些 对象可以互相通讯、协调和配合,从而共同完成整个程序的 任务和功能。 2. 对象的属性 面向对象的方法中,一个对象具有状态、行为和标识三方面特性。 对象的状态也称为对象的静态属性,包括对象内部包含的各种信息—变量,这些变量的值标明 图3.1 类、对象与实体的关系 计算机世界 现实世界 客观世界 主观 世界 抽象 对象 实体 类 抽象 类别 抽 象 实 例 化 映射 映射
第4章面向对象程序设计与C++ 了对象所处的状态。当对象通过某种操作改变了状态,也就体现在它的属性变量的值的改变。对象的 行为也称对象的操作方法一对象的动态属性,其作用是设置或改变对象的状态。对象的标识则用于 区分不同的对象 简单地说,对象包含了数据和方法(在C++中,方法叫作类的成员函数),每个对象就是一个微小 的程序。由于其他对象不能直接操纵该对象的私有数据,只有对象本身的方法才能得到它,因而对象 具有很强的独立性,可把对象当作软件的基本组件,就像电器中的电子元件一样。对象的这种软件组 件作用使它具有很强的可重用性。而且增强了程序的可靠性和可维护性。 3.消息 面向对象的程序设计中,通过“消息”来请求对象进行动作,对象间的联系也是通过消息 ( Message)来完成的。消息中只包括了消息发送者的要求,不指示接收者具体该如何处理这些消息 个对象可以接收不同形式、不同内容的消息:相同的消息可以传送给不同的对象:不同的对象 对同样的消息可以作出不同的反映。有关 Windows的消息机制在第3章已经详细介绍了 4.类的组织结构 类是对具有公共的方法和一般特性的一组基本相同对象的描述,在面向对象的方法中,对象是构 成程序的基本单位,每个对象都应该属于某一类,就象传统程序设计中的变量,每个变量都应有一定 的类型。 在程序执行过程中,由类动态生成相应地对象,一个类可以生成多个不同的对象,这些对象具有 相同的属性。因此,对象也称为类的实例( Instance)。一个类可以由其他的类派生出来,类与类之间 根据具体情况以层次结构组织起来。处于上层的类称为父类,处于下层的类称为子类或派生类。 采用面向对象的方法来进行 Windows程序设计还可以简化对资源的管理。将资源映射成一个C++ 对象时,对资源的使用可以翻译成以下C++顺序 口创建一个对象:如定义一个画笔对象。 口使用对象:用画笔绘图 口撤销该对象 个对象的创建是对一个对象的定义过程,可以由对象的构造函数处理对资源的请求过程。当某 个对象退出活动范围时,它的撤销可以由编译器来自动管理 3.1.2面向对象技术的基本特征 到目前为止,对面向对象的概念的定义仍有不同的认识,但它的几个基本特征,如封装性、继承 性、多态性等,基本上得到认可。 1.封装性 封装就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。封装 使对象形成两个部分:接口和实现。对于用户来说,接口是可见的,实现是不可见的。同样形式的接 口,其实现可能不同。好比取款机都有相同的取钱接口,但是不同的取款机实现这种取钱的接口方法 封装提供了两种保护:其一是保护对象,防止用户误用对象内部的属性和方法:其二是保护客户 端,即实现过程的改变不影响到接口,从而减小对客户端的不利影响。 励志照亮人生编程改变命
了对象所处的状态。当对象通过某种操作改变了状态,也就体现在它的属性变量的值的改变。对象的 行为也称对象的操作方法—对象的动态属性,其作用是设置或改变对象的状态。对象的标识则用于 区分不同的对象。 简单地说,对象包含了数据和方法(在C++中,方法叫作类的成员函数),每个对象就是一个微小 的程序。由于其他对象不能直接操纵该对象的私有数据,只有对象本身的方法才能得到它,因而对象 具有很强的独立性,可把对象当作软件的基本组件,就像电器中的电子元件一样。对象的这种软件组 件作用使它具有很强的可重用性。而且增强了程序的可靠性和可维护性。 3. 消息 面向对象的程序设计中,通过“消息”来请求对象进行动作,对象间的联系也是通过消息 (Message)来完成的。消息中只包括了消息发送者的要求,不指示接收者具体该如何处理这些消息。 一个对象可以接收不同形式、不同内容的消息;相同的消息可以传送给不同的对象;不同的对象 对同样的消息可以作出不同的反映。有关Windows的消息机制在第3章已经详细介绍了。 4. 类的组织结构 类是对具有公共的方法和一般特性的一组基本相同对象的描述,在面向对象的方法中,对象是构 成程序的基本单位,每个对象都应该属于某一类,就象传统程序设计中的变量,每个变量都应有一定 的类型。 在程序执行过程中,由类动态生成相应地对象,一个类可以生成多个不同的对象,这些对象具有 相同的属性。因此,对象也称为类的实例(Instance)。一个类可以由其他的类派生出来,类与类之间 根据具体情况以层次结构组织起来。处于上层的类称为父类,处于下层的类称为子类或派生类。 采用面向对象的方法来进行Windows程序设计还可以简化对资源的管理。将资源映射成一个C++ 对象时,对资源的使用可以翻译成以下C++顺序。 ❑ 创建一个对象:如定义一个画笔对象。 ❑ 使用对象:用画笔绘图。 ❑ 撤销该对象。 一个对象的创建是对一个对象的定义过程,可以由对象的构造函数处理对资源的请求过程。当某 一个对象退出活动范围时,它的撤销可以由编译器来自动管理。 3.1.2 面向对象技术的基本特征 到目前为止,对面向对象的概念的定义仍有不同的认识,但它的几个基本特征,如封装性、继承 性、多态性等,基本上得到认可。 1. 封装性 封装就是把对象的属性和方法结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。封装 使对象形成两个部分:接口和实现。对于用户来说,接口是可见的,实现是不可见的。同样形式的接 口,其实现可能不同。好比取款机都有相同的取钱接口,但是不同的取款机实现这种取钱的接口方法 不一样。 封装提供了两种保护:其一是保护对象,防止用户误用对象内部的属性和方法;其二是保护客户 端,即实现过程的改变不影响到接口,从而减小对客户端的不利影响。 47 励志照亮人生 编程改变命运 第 4 章 面向对象程序设计与C++语言
Visual c++ 2.继承性 真实的对象不是孤立存在的,每个对象都与其他一个或多个对象相关。事实上,当描述一个新对 象时,往往指出该新对象的特征与已存在的对象的特征有何不同。对于面向对象来说,继承性是指 个新类可以从现有的类中派生出来,新类具有父类中的所有特性,直接继承了父类的方法和数据,新 类的对象可以调用该类及父类的成员变量和成员函数。 如MFC中的 CEdit类,它封装了 Windows中的编辑框控件,它的继承结构如图3.2所示。 类 CObject是所有的MFC类的根类。类 CCmdTarget从类 CObject直 接派生,它是 Microsoft基础类库的消息映射结构的基类。类Cwnd提 供了MFC中所有窗口类的基本功能性,它封装了 Windows中的窗口句 CCmd Target 柄hWnd。类 CEdit从Cwnd直接派生,它提供了对 Windows编辑控件的 特定支持。由于CEd类继承了其基类的数据和方法,因此,可以通过 CEdit类调用Cwnd类中提供的方法来实现对标准 Windows窗口的操作 继承保证了类之间的一致性,父类可以为所有子类定制规则。利 CEdit 用继承可以开发更加贴近现实的模型,增加软件重用的机会,从而降 低开发和维护费用。子类可以继承父类的属性,也可以增加和重新定图32CEdt类的继承结构 义继承的属性。同样,子类可以继承父类的操作,也可以增加或者重新定义继承的操作,这种重新定 义被称为覆盖( Override)。 继承可分为单继承和多继承。单继承指的是子类只从一个父类继承,而多继承则允许子类可以继 承多个父类。例如,交通工具是父类,它有三个子类,分别为空中交通工具、水上交通工具和陆上交 通工具。而一个两栖交通工具则可以同时继承水上交通工具和陆上交通工具。很多面向对象的语言都 不支持多重继承,但C++支持 3.多态性 多态性是指在一般类中定义的属性或方法被特殊类继承后,可以具有不同的数据类型或表现出不 的行为功能。例如,人都有取名字的操作,但是不同的民族取名字的方式不一样,对于一个不知是 民族的人,可以让他执行“人”这个类共有的操作“取名字”时,他实际执行的是以他所属民族的 取名字操作。 在C++中,多态性定义为不同函数的同一接口。从这个定义出发,函数和操作符的重载也属于多态。 说明多态和继承中的重载( Override)是有区别的。多态是运行时问题,而重载( override)是编译 时问题 封装性、继承性和多态性是面向对象编程的三大特征,开始的时候,读者也许对它们还没有非常 清晰的概念,但这没有什么关系,当使用了一段时间C++语言,然后再回过头来看这些概念时,就会 发现对它们有了更深入的认识和了解 3.2C++语言基础 在本节,将简单介绍一下C++语言的基础,包括程序的基本控制结构、基本数据类型、运算符和 表达式、函数和指针的应用等。通过本节的讲解,读者对C++语言的基本程序结构会有所了解 励志照亮人生编程改变命运
2. 继承性 真实的对象不是孤立存在的,每个对象都与其他一个或多个对象相关。事实上,当描述一个新对 象时,往往指出该新对象的特征与已存在的对象的特征有何不同。对于面向对象来说,继承性是指一 个新类可以从现有的类中派生出来,新类具有父类中的所有特性,直接继承了父类的方法和数据,新 类的对象可以调用该类及父类的成员变量和成员函数。 如MFC中的CEdit类,它封装了Windows中的编辑框控件,它的继承结构如图3.2所示。 类CObject是所有的MFC类的根类。类CCmdTarget从类CObject直 接派生,它是Microsoft基础类库的消息映射结构的基类。类CWnd提 供了MFC中所有窗口类的基本功能性,它封装了Windows中的窗口句 柄hWnd。类CEdit从CWnd直接派生,它提供了对Windows编辑控件的 特定支持。由于CEdit类继承了其基类的数据和方法,因此,可以通过 CEdit类调用CWnd类中提供的方法来实现对标准Windows窗口的操作。 继承保证了类之间的一致性,父类可以为所有子类定制规则。利 用继承可以开发更加贴近现实的模型,增加软件重用的机会,从而降 低开发和维护费用。子类可以继承父类的属性,也可以增加和重新定 义继承的属性。同样,子类可以继承父类的操作,也可以增加或者重新定义继承的操作,这种重新定 义被称为覆盖(Override)。 继承可分为单继承和多继承。单继承指的是子类只从一个父类继承,而多继承则允许子类可以继 承多个父类。例如,交通工具是父类,它有三个子类,分别为空中交通工具、水上交通工具和陆上交 通工具。而一个两栖交通工具则可以同时继承水上交通工具和陆上交通工具。很多面向对象的语言都 不支持多重继承,但C++支持。 3. 多态性 多态性是指在一般类中定义的属性或方法被特殊类继承后,可以具有不同的数据类型或表现出不 同的行为功能。例如,人都有取名字的操作,但是不同的民族取名字的方式不一样,对于一个不知是 何民族的人,可以让他执行“人”这个类共有的操作“取名字”时,他实际执行的是以他所属民族的 取名字操作。 在C++中,多态性定义为不同函数的同一接口。从这个定义出发,函数和操作符的重载也属于多态。 说明 多态和继承中的重载(Override)是有区别的。多态是运行时问题,而重载(override)是编译 时问题。 封装性、继承性和多态性是面向对象编程的三大特征,开始的时候,读者也许对它们还没有非常 清晰的概念,但这没有什么关系,当使用了一段时间C++语言,然后再回过头来看这些概念时,就会 发现对它们有了更深入的认识和了解。 3.2 C++语言基础 在本节,将简单介绍一下C++语言的基础,包括程序的基本控制结构、基本数据类型、运算符和 表达式、函数和指针的应用等。通过本节的讲解,读者对C++语言的基本程序结构会有所了解。 48 励志照亮人生 编程改变命运 零基础学 Visual C++ 图3.2 CEdit类的继承结构 CObject CCmdTarget CWnd CEdit
第4章面向对象程序设计与C++ 32.1C++基本控制结构 按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合。 口顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执行 口选择结构:程序是按设定的条件实现程序执行流的多路分支。 口循环结构:程序是按给定的条件重复地执行指定的程序段或模块 这三种结构的直观表示如图3.3所示 模块 模块1 模块2 块 循环体 顺序结构 选择结构 循环结构 图3.3三种基本程序结构 在C艹+中,顺序结构的语句包括说明语句、赋值语句、I/O语句、子函数调用语句和返回语句等, 这里不作详细介绍,重点介绍一下C++中的选择结构和循环结构。 1.选择结构 C++中的选择结构分为一路选择分支、两路选择分支和多路选择分支。 (1)一路选择分支 路选择语句格式如下: if( 语句序列可以是一个语句,也可以是复合语句结构,其直观表示如图34所示 (2)两路选择分支 两路选择语句格式如下: 逻辑表达式>) <语句序列2 其直观表示如图3.5所示。 生不成立 成立 不成立 语句序列1 语句序列2 语句序列 图34一路选择分支结构 图3.5两路选择分支结构 励志照亮人生编程改变命
3.2.1 C++基本控制结构 按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合。 ❑ 顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执行。 ❑ 选择结构:程序是按设定的条件实现程序执行流的多路分支。 ❑ 循环结构:程序是按给定的条件重复地执行指定的程序段或模块。 这三种结构的直观表示如图3.3所示。 图3.3 三种基本程序结构 在C++中,顺序结构的语句包括说明语句、赋值语句、I/O语句、子函数调用语句和返回语句等, 这里不作详细介绍,重点介绍一下C++中的选择结构和循环结构。 1. 选择结构 C++中的选择结构分为一路选择分支、两路选择分支和多路选择分支。 (1)一路选择分支 一路选择语句格式如下: if () 语句序列可以是一个语句,也可以是复合语句结构,其直观表示如图3.4所示。 (2)两路选择分支 两路选择语句格式如下: if () else 其直观表示如图3.5所示。 49 励志照亮人生 编程改变命运 第 4 章 面向对象程序设计与C++语言 模块1 模块1 顺序结构 选择结构 循环结构 条件 条件 模块2 模块2 循环体 Y N N Y 图3.4 一路选择分支结构 图3.5 两路选择分支结构 条件? 不成立 条件? 成立 不成立 成立 语句序列 语句序列1 语句序列2
Visual c++ (3)多路选择分支 也可以使用if语句实现多路选择分支,语句格式如下: ) 语句序列2> else应和最近的if嵌套,其直观表示如图3.6所示。 switch语句也可以实现多路(开关)选择结构,其语句格式如下: switch() 值 case数值 其直观表示如图3.7所示。 不成立 不成立 语句序列 3.6ⅱ语句实现多路选择分支 图3.7 switch语句实现多路选择分支 2.循环结构 C艹中有三种循环语句构建方式: while循环、 do while循环和for循环。 (1) while循环 while循环语句格式可表示如下 whi1e() } 其直观表示如图3.8所示。 (2) do while循环 do while循环语句格式可表示如下: 励志照亮人生编程改变命运
(3)多路选择分支 也可以使用if语句实现多路选择分支,语句格式如下: if () else if () else else应和最近的if嵌套,其直观表示如图3.6所示。 switch语句也可以实现多路(开关)选择结构,其语句格式如下: switch() { case 数值1: ; break; ...... case 数值n: ; break; [default : ;] } 其直观表示如图3.7所示。 2. 循环结构 C++中有三种循环语句构建方式:while循环、do_while循环和for循环。 (1)while循环 while循环语句格式可表示如下: while() { } 其直观表示如图3.8所示。 (2)do_while循环 do_while循环语句格式可表示如下: 50 励志照亮人生 编程改变命运 零基础学 Visual C++ 图3.6 if语句实现多路选择分支 图3.7 switch语句实现多路选择分支 语句序列1 语句序列2 语句序列3 语句序列2 …… 语句序列n 值=? 计算整型表达式 语句序列1 成立 成立 不成立 不成立 条件? 条件?
第4章面向对象程序设计与C+ } whi1e() 其直观表示如图3.9所示。 不成立 循环体 我立条 不成立 图3.8 while循环结构 图3.9 do while循环结构 (3)for循环 for循环语句格式可表示如下 for(;;) 3.C++基本控制实例 下面通过一个简单实例讲解C++基本控制结构。该实例实现将百分制转换为五分制,即用户输入 组百分成绩,将它们转换成5分制成绩。实例程序的模块结构与逻辑功能框图如图3.10所示 否 主函数main0 输入成绩X 魏园区 回、输出 图3.10实例程序的模块结构与逻辑功能框图 实例循环结构釆用for循环语句,而选择结构则采用多路选择语句 switch。子函数 Grade tran(实现 代码如下 int GradeTran (int old grade) int new grade 励志照亮人生编程改变命
do { } while() 其直观表示如图3.9所示。 (3)for循环 for循环语句格式可表示如下: for(;;) {} 3. C++基本控制实例 下面通过一个简单实例讲解C++基本控制结构。该实例实现将百分制转换为五分制,即用户输入 一组百分成绩,将它们转换成5分制成绩。实例程序的模块结构与逻辑功能框图如图3.10所示。 图3.10 实例程序的模块结构与逻辑功能框图 实例循环结构采用for循环语句,而选择结构则采用多路选择语句switch。子函数GradeTran()实现 代码如下: int GradeTran (int old_grade) { int new_grade; 51 励志照亮人生 编程改变命运 第 4 章 面向对象程序设计与C++语言 Œ¢ A` ˇp x A` ˇp x Œ¢ x A` ˇp x Œ¢ 图3.8 while循环结构 图3.9 do_while循环结构 条件? 条件? 循环体 循环体 成立 不成立 不成立 成立 主函数main() 返回、输出X 输入成绩X X=1 X=2 X=3 X=4 X=5 X/10=? 继续? 否 是 10、9 8 7 6 <=5 子函数GradeTran() 实现分数转换
Visual c++ switch(old grade/10) // switch多路选择 case 10 ase 9: new grade =1 break case 7: new grade =3 break default: new grade =5 return new grade; 主函数main(O)的实现代码如下 #include oid main() nt grade[10]={100,85,72,69,94,74,66,51,89,45}; //要转换的10个百分制分数 ⊥nti //调用子函数进行分数转换,并输出 cout<<"百分制分数:"<< grade[i]<<”,五分制分数:"<< Orangeade( grade[i])<<end1 22C++的数据与基本数据类型 C+的数据有两种:常量和变量,且每个数据均需指明其类型。在本节,简单介绍C++的数据和 基本数据类型 基本数据类型 数据在计算机中采用二进制存放,一个字节包括8个二进制位。C++语言的基本数据类型,及其长 度和表示的数据范围如表3.1所示 表3.1C++语言的基本数据类型 数据类型 类型说明符 占用字节 数据范围 符型 128~127 整数 short 32768~32767 整型 近似34-3~343精度7位 精度型 double 近似1.7-3~1.730,精度15位 另外,在基本数据类型前加类型修饰符,可以改变数据表示的范围。常用的有: 口 unsigned:无符号。 口long:长型。 口 short:短型。 如, unsigned char,表示范围变为0~255; unsigned int,表示范围变为0~65535 2.常量 变化的量称变量,不变化的量称常量,常量和变量是计算机语言中数据的两种基本形式。在C++ 励志照亮人生编程改变命运
switch(old_grade/10) //switch多路选择 { case 10: case 9: new_grade = 1; break; case 8: new_grade = 2; break; case 7: new_grade = 3; break; case 6: new_grade = 4; break; default: new_grade = 5; } return new_grade; } 主函数main()的实现代码如下: #include void main() { int grade[10] ={100,85,72,69,94,74,66,51,89,45}; //要转换的10个百分制分数 int i; for(i=0; i<10; i++) //调用子函数进行分数转换,并输出 cout<<"百分制分数: "<<grade[i]<<", 五分制分数:"<<TranGrade(grade[i])<<endl; } 3.2.2 C++的数据与基本数据类型 C++的数据有两种:常量和变量,且每个数据均需指明其类型。在本节,简单介绍C++的数据和 基本数据类型。 1. 基本数据类型 数据在计算机中采用二进制存放,一个字节包括8个二进制位。C++语言的基本数据类型,及其长 度和表示的数据范围如表3.1所示。 表3.1 C++语言的基本数据类型 数据类型 类型说明符 占用字节 数据范围 字符型 char 1 -128~127 短整数 short 2 -32768~32767 整型 Int 4 -231~231 浮点型 float 4 近似3.4-38~3.438精度7位 双精度型 double 8 近似1.7-308~1.7308,精度15位 另外,在基本数据类型前加类型修饰符,可以改变数据表示的范围。常用的有: ❑ unsigned:无符号。 ❑ long:长型。 ❑ short:短型。 如,unsigned char,表示范围变为0~255;unsigned int,表示范围变为0~65535。 2. 常量 变化的量称变量,不变化的量称常量,常量和变量是计算机语言中数据的两种基本形式。在C++ 52 励志照亮人生 编程改变命运 零基础学 Visual C++
第4章面向对象程序设计与C++ 中,常量主要有下面几种形式。 (1)整型常量 在C++中,整型常量可以表示为2进制、8进制、10进制和16进制。 口2进制常量:如10011101B、10B等,即在数后加字符“B”。 口8进制常量:如04400、0777、0100等,即在数前加字符“0 口10进制常量:如2304、432等 口16进制常量:如0x900、0xABC、0xfmr,即在数前加字符“0x”。 (2)实型常量 实数也称为浮点数,用于表示小数,有两种表示方式 口十进制形式,如-2.68、3.141593、637.312、-32767.0 口指数形式,如0.0E0、1.267E20、-6.226E-4等 (3)字符型常量 C++中的字符型常量包括符号常量、字符常量和转义常量。 口符号常量:用# define定义的常数,类似变量,但不是变量 #define PI 3.1415926 #define MAXNUM 2000 它可以出现在表达式中,如: S=r 但是符号常量不能作左值,如下列用法是错误的。 //错误的用法 口字符常量:用来表示一个字符,如'a','A',"I,',"+"等,即将字符符号用单引号括起来。 口转义常量:常用的转义常量包括"n'(表示换行)、"r'(表示回车)、"t"(表示横向跳格)、" 表示单引号)等。 (4)字符串常量 C艹+中,用双引号定义字符串常量,如" Visual c++6.0"、"12.34"、" This is a string.n"等。在C++ 中,'A和"A"是有区别的,前者是字符常数,后者是字符串常数。 口字符是用单引号括起来的单个字符,它在存储器中占1个字节 口字符串是用双引号括起来的一串字符,它在存储器中占n+1个字节,即字符串的结束符0也占 1个字节的位置。 (5) const常量 C++要求在声明 const常量时对其进行初始化,如 const double pi=3.1415926 ++中 const常量的另一个特征是, const整数在任何常量表达式中都可作下标使用。如 const buflen=512 char buffer [buflen] 3.变量 C++的数据变量声明语句的格式为: 励志照亮人生编程改变命
中,常量主要有下面几种形式。 (1)整型常量 在C++中,整型常量可以表示为2进制、8进制、10进制和16进制。 ❑ 2进制常量:如10011101B、10B等,即在数后加字符“B”。 ❑ 8进制常量:如04400、0777、0100等,即在数前加字符“0”。 ❑ 10进制常量:如2304、432等。 ❑ 16进制常量:如0x900、0xABC、0xffff等,即在数前加字符“0x”。 (2)实型常量 实数也称为浮点数,用于表示小数,有两种表示方式: ❑ 十进制形式,如-2.68、3.141593、637.312、-32767.0等。 ❑ 指数形式,如0.0E0、1.267E20、-6.226E-4等。 (3)字符型常量 C++中的字符型常量包括符号常量、字符常量和转义常量。 ❑ 符号常量:用#define定义的常数,类似变量,但不是变量。 例如: #define PI 3.1415926 #define MAXNUM 2000 它可以出现在表达式中,如: S= r * r * PI; 但是符号常量不能作左值,如下列用法是错误的。 PI = PI*2; //错误的用法 ❑ 字符常量:用来表示一个字符,如'a','A','1',' ','+'等,即将字符符号用单引号括起来。 ❑ 转义常量:常用的转义常量包括'\n'(表示换行)、'\r'(表示回车)、'\t'(表示横向跳格)、'\'' (表示单引号)等。 (4)字符串常量 C++中,用双引号定义字符串常量,如"Visual C++6.0"、"12.34"、"This is a string.\n"等。在C++ 中,'A'和"A"是有区别的,前者是字符常数,后者是字符串常数。 ❑ 字符是用单引号括起来的单个字符,它在存储器中占1个字节。 ❑ 字符串是用双引号括起来的一串字符,它在存储器中占n+1个字节,即字符串的结束符'\0'也占 1个字节的位置。 (5)const常量 C++要求在声明const常量时对其进行初始化,如: const double pi=3.1415926; C++中const常量的另一个特征是,const整数在任何常量表达式中都可作下标使用。如: const buflen=512; char buffer[buflen]; 3. 变量 C++的数据变量声明语句的格式为: 53 励志照亮人生 编程改变命运 第 4 章 面向对象程序设计与C++语言
Visual c++ ; 声明了3个整型 long l //声明了1个长整型变量 harc0,c1,c2[1001; //声明了2个字符型变量和一个字符型数组变量 ouble array [10][10] //声明了一个双精度型的二维数据变量 C++中变量具有一定的命名规则,如下 口变量名只能由字母、数字或下划线组成 口变量名的第一个字符必须是字母或下划线: 口变量名长度不超过32个字符 口不要用C++的保留字定义变量名 声明变量时,一般需要对变量进行初始化。变量初始化就是给变量赋初值,有两种形式: 口先定义,再赋初值。例如 fac: fac=1 口定义时赋值。例如, char C=A 323C++的运算符和表达式 C+中的表达式包括算术运算、逻辑运算、关系运算、赋值运算、逗号运算和自增(自减)运算 等,本节将简单介绍这些运算的基本概念以及运算符的优先级、左结合和右结合规则。 1.算术运算符和算术表达式 由算术运算符组成的表达式称为算术表达式。C++中的算术运算符包括“+”(加)、“-”(减) “*”(乘)、“/”(除)和“%”(取余)。其运算优先级顺序为先乘、除、取余,后加、减。其具体使 用相信读者都已经很熟习了 2.关系运算符和关系表达式 由关系运算符组成的表达式称为关系表达式。C++中可用的关系运算符有“>”(大于)、“=”(大于等于)、 (小于等于)、“!=”(不等于)。关系运算符的优先级顺 序为{>、>=、“&&”>“‖”,逻辑表达式最终的 运算结果为逻辑值(true或 false) 励志照亮人生编程改变命运
; 如, int i, j, k; //声明了3个整型变量 long len; //声明了1个长整型变量 char c0,c1,c2[100]; //声明了2个字符型变量和一个字符型数组变量 double array[10][10]; //声明了一个双精度型的二维数据变量 C++中变量具有一定的命名规则,如下: ❑ 变量名只能由字母、数字或下划线组成; ❑ 变量名的第一个字符必须是字母或下划线; ❑ 变量名长度不超过32个字符; ❑ 不要用C++的保留字定义变量名。 声明变量时,一般需要对变量进行初始化。变量初始化就是给变量赋初值,有两种形式: ❑ 先定义,再赋初值。例如, int sum, fac; sum=0; fac=1; ❑ 定义时赋值。例如, char c='A'; int count = 0; 3.2.3 C++的运算符和表达式 C++中的表达式包括算术运算、逻辑运算、关系运算、赋值运算、逗号运算和自增(自减)运算 等,本节将简单介绍这些运算的基本概念以及运算符的优先级、左结合和右结合规则。 1. 算术运算符和算术表达式 由算术运算符组成的表达式称为算术表达式。C++中的算术运算符包括“+”(加)、“-”(减)、 “*”(乘)、“/”(除)和“%”(取余)。其运算优先级顺序为先乘、除、取余,后加、减。其具体使 用相信读者都已经很熟习了。 2. 关系运算符和关系表达式 由关系运算符组成的表达式称为关系表达式。C++中可用的关系运算符有“>”(大于)、“=”(大于等于)、“、>=、 “&&” >“||”,逻辑表达式最终的 运算结果为逻辑值(true或false)。 54 励志照亮人生 编程改变命运 零基础学 Visual C++
第4章面向对象程序设计与C++ 说明 逻辑运算符与其他运算符组合的运算的优先级顺序为:赋值运算k&j>k) 4.赋值运算符和赋值表达式 由赋值运算符“=”组成的表达式称为赋值表达式。其格式如V=e,即将表达式e的值赋值给变量 V。另外,在C++中还提供了很多复合赋值运算符,包括“+=”、“-=”、“*=”、“/=”、“%=”等10个。 例如,a+=5,等价于a=a+5。 下面给出几种常用的赋值表达式格式 表示计算表达式m*n的值,将其结果存入变量j中,然后再将结果存入变量i中。 a=bb=tem 表示交换a和b的值 str[i] ch+'A 表示将字符变量ch转换为大写字母,结果存入数组表32自增运算符和自减运算符的使用 rij中。 表达式表达式的值1的值 5.自增运算符和自减运算符 i的值增大1 C++提供了自增运算符“++”和自减运算符“--” i的值增大 其含义如表3.2所示。 i的值减小1 i的值减小1 6.问号表达式 C++中还可以使用问号表达式,其格式为: e1?e2:e3 运算规则为,当表达式el的值为“真”时,结果取e2的值;否则,结果取e3的值 如,求双精度数的绝对值的函数可表示为 double abs(double x) eturn x>0?x:-x 至此,C++各运算符介绍完毕,各运算符的优先级别及运算形式如表3.3所示。 励志照亮人生编程改变命
说明 逻辑运算符与其他运算符组合的运算的优先级顺序为:赋值运算 k && j > k ) 4. 赋值运算符和赋值表达式 由赋值运算符“=”组成的表达式称为赋值表达式。其格式如V=e,即将表达式e的值赋值给变量 V。另外,在C++中还提供了很多复合赋值运算符,包括“+=”、“-=”、“*=”、“/=”、“%=”等10个。 例如,a += 5,等价于a = a + 5。 下面给出几种常用的赋值表达式格式。 i=j=m*n; 表示计算表达式m*n的值,将其结果存入变量j中,然后再将结果存入变量i中。 temp=a; a=b; b=temp; 表示交换a和b的值。 str[i] = ch+'A'- 'a'; 表示将字符变量c h转换为大写字母,结果存入数组 str[i]中。 5. 自增运算符和自减运算符 C++提供了自增运算符“++”和自减运算符“--”, 其含义如表3.2所示。 6. 问号表达式 C++中还可以使用问号表达式,其格式为: e1?e2:e3 运算规则为,当表达式e1的值为“真”时,结果取e2的值;否则,结果取e3的值。 如,求双精度数的绝对值的函数可表示为: double abs(double x) { return x>0?x:-x; } 至此,C++各运算符介绍完毕,各运算符的优先级别及运算形式如表3.3所示。 55 励志照亮人生 编程改变命运 第 4 章 面向对象程序设计与C++语言 表3.2 自增运算符和自减运算符的使用 表达式 表达式的值 i的值 i++ i i的值增大1 ++i i+1 i的值增大1 i- - i i的值减小1 - -i i-1 i的值减小1