版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、类与对象 构造函数 析构函数 静态成员函数 友元函数 让IT教学更简单,让IT学习更有效 第2章 类与对象 学习目标 让IT教学更简单,让IT学习更有效 掌握类对象的构造和 析构过程 1 了解面向对象的 编程思想 4 2 掌握静态成员的定 义及操作方法 掌握 掌握 了解 熟悉 3 熟悉类的定义方 法,掌握类中数 据成员和成员函 数的定义及使用 目录 让IT教学更简单,让IT学习更有效 2.12.1 面向对象程序设计 点击查看本小节知识架构 2.22.2 类与对象 点击查看本小节知识架构 2.52.5 类中特殊的成员函数 点击查看本小节知识架构 2.32.3 构造函数和析构函数 点击查看本小节知
2、识架构 2.42.4 类中特殊的成员变量 点击查看本小节知识架构 2.62.6 友元 点击查看本小节知识架构 2.72.7 小结 案例相关知识点 返回目录 2.1.1面向过程程序设计 让IT教学更简单,让IT学习更有效 面向对象程序设计 2.1.2 面向对象的基本概念 2.1.3 2.1 面向对象程序设计 返回目录 2.2.1 类和对象的关系 让IT教学更简单,让IT学习更有效 类的定义 2.2.2 类的成员 2.2.3 对象的创建与使用 2.2.4 案例相关知识点 this指针 2.2.5 类的成员的访问控制 2.2.6 2.2 类与对象 返回目录 2.3.1 构造函数 让IT教学更简单,让
3、IT学习更有效 包含对象成员的类的构造函数 2.3.2 析构函数 2.3.3 拷贝构造函数 2.3.4 案例相关知识点 深拷贝与浅拷贝 2.3.5 2.3 构造函数和析构函数 返回目录 2.4.1 用static修饰数据成员 让IT教学更简单,让IT学习更有效 用const修饰数据成员 2.4.2 案例相关知识点 2.4 类中特殊的成员变量 案例相关知识点 返回目录 2.5.1静态成员函数 让IT教学更简单,让IT学习更有效 用const修饰的成员函数2.5.2 类中的内联函数2.5.3 2.5 类中特殊的成员函数 返回目录 2.6.1 友元函数 让IT教学更简单,让IT学习更有效 友元类 2
4、.6.2 案例相关知识点 2.6 友元 让IT教学更简单,让IT学习更有效 类与对象 C+相比于C语言最重要的发展, 就是采用面向对象思想进行 程序设计。 对于面向对象程序设 计 而言,最重要的一个特征就 是数据封装。 所谓数据封装,就是通过 类来实现信息的抽象及 隐藏。学习了类的相 关知识,才能真正 走进面向对象程 序设计的世界。 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 面向对象是相对于面向过程而言的, 因此在学习面向对象之前,先要了 解一下什么是面向过程? 面向过程程序设计 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 概 述 面向过程程序设计就是面向
5、过程的程序设计是一种自上而下的设计方 法,以事件为中心,以功能为导向,分析出解决问题的步骤,按模块 划分出程序任务并由函数实现,依次执行各函数,实现功能。其特征 是以函数为中心,用函数来作为划分程序的基本单位,数据在过程式 设计中往往处于从属的位置。面向过程程序设计的基本设计结构如图2- 1所示。 面向过程程序设计 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 概 述 面向过程的程序设计方法易于理解和掌握。这种根据目标划分工作模块,按步 骤解决问题的方法与日常生活中的思路很接近,但往往需要程序设计者对要解决的 问题了解得比较透彻,能够合理地划分出各个模块,这一点对于较为简单的需
6、求通 常能够很好地满足。如果问题比较复杂,在项目开始之初就完成模块的合理划分, 往往比较困难。事实上,开发一个系统的过程通常也是对系统不断了解和学习的过 程,但是面向过程的程序设计往往会忽略这一点。 另外在面向过程的设计语言中,数据有专门的结构进行描述,操作被封装为函 数,数据和操作分离,容易导致对一种数据的操作分布在整个程序的各个角落,而 一个操作也可能会用到很多种数据,在这种情况下,对数据和操作的任何一部分进 行修改都会变得很困难。 相比于面向过程程序设计思想,面向对象技术以更接近于人看待事物的思维描 述应用,将数据和操作看成整体,具有程序结构清晰、能够自动生成程序框架、实 现简单、可有效
7、减少程序的维护工作量、代码重用率高、开发效率高等优点。下面 我们将一起开启面向对象程序设计学习之旅。 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 面向过程程序设计对于较为简单的需求通 常能够很好地满足。如果问题比较复杂, 在项目开始之初就完成模块的合理划分, 往往比较困难。当数据结构改变时,所有 相关的处理过程都要进行相应的修改,程 序的可用性极差。 面向过程程序设计的劣势 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 数 据处理数据的过程 面向对象的编程语言 整合为一个整体 面向对象程序设计 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 面向
8、对象编程语言的出现 面向过程的程序设计把数据和数据处理过程分离为相互独立的实体,当数据结 构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的 新方法都要带来额外的开销,程序的可用性极差。特别是在大型项目中,面向 过程的编程面临着巨大挑战。为了解决这一问题,需要把数据与处理数据的过 程作为一个整体,于是面向对象的编程语言应运而生。 1967年挪威计算中心的Kisten Nygaard和Ole Johan Dahl开发了Simula67语 言,它提供了比函数更高一级的抽象和封装,引入了数据抽象和类的概念,它 被认为是第一个面向对象的语言。20世纪70年代初,Palo Alto研究
9、中心的 Alan Kay所在的研究小组开发出Smalltalk语言,之后又开发出Smalltalk-80。 Smalltalk-80被认为是最纯正的面向对象语言,它对后来出现的面向对象语言, 如Object-C,C+,Self,Eiffl都产生了深远的影响。随着面向对象语言的出 现,面向对象程序设计也就应运而生且得到迅速发展。 面向对象程序设计 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 概 述 面向对象程序设计描述的是客观世界中的事物,以对象代表一个具体的事物, 把数据和数据的操作方法放在一起而形成的一个相互依存又不可分割的整体。 再找出同类型对象的共有属性和行为,形成类,
10、这一过程称为抽象 (abstract)。抽象是面向对象编程思想的本质,而类是其关键。类中的大多 数数据只能用本类的方法进行处理,它与对象的关系是抽象与具体的对应,例 如树是一个类,则杨树、桃树、柳树等就是树类的一个个对象。 类通过外部接口与外界发生关系,避免被外界函数意外改变,对象与对象之间 通过消息进行通信。这样就保证了数据的独立性与安全性。 面向对象程序设计(OOP)方法首先要设计类,它准确的表述了程序要处理的 数据,如造车程序就要定义轿车、汽车、卡车、火车等类,类定义描述了对每 个类可执行的操作,如用轿车载人、卡车载物,然后设计一个程序来使用这些 类的对象。 面向对象程序设计 让IT教学
11、更简单,让IT学习更有效 2.1 面向对象程序设计 概 述 由此可见,面向对象程序设计所强调的基本原则就是直接面对客观存 在的事物,将人们在日常生活中习惯的思维方式和表达方式应用在软 件开发中,使软件开发从过分专业化的方法、规则中回到客观世界, 回到人们通常的思维方式。相对于面向过程的思想,面向对象的思想 更适用于大型系统项目的开发。 面向对象程序设计编程思想是当前计算机软件开发的主流,面向对象 的概念和应用已经超越了程序设计和软件开发,扩展到了更广的范围, 如数据库系统、交互式界面、分布式系统、网络管理结构、人工智能 等领域。 面向对象的基本概念 让IT教学更简单,让IT学习更有效 2.1
12、面向对象程序设计 对象类抽象 对象是现实世界中实际 存在的事物,是构成世 界的一个独立单位,它 由数据(描述事物的属 性)和作用于数据的操 作(体现事物的行为) 构成一个独立整体。 在面向对象的方法中, 类是具有相同属性和行 为的一组对象的集合, 它提供一个抽象的描述, 其内部包括属性和行为 两个主要部分。 抽象是通过特定的实例 抽取共同特征以后形成 概念的过程。抽象化主 要是为了使复杂度降低, 是面向对象编程思想的 本质。 面向对象的基本特征 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 封装继承多态 是面向对象的核心思想, 将对象的属性和行为封 装起来,不需要让外界 知道具
13、体实现细节,这 就是封装思想。 主要描述的是类与类之 间的关系,通过继承, 可以在无需重新编写原 有类的情况下,对原有 类的功能进行扩展。 指在一个类中定义的属 性和方法被其它类继承 后,它们可以具有不同 的数据类型或表现出不 同的行为。 面向对象的基本特征 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 封装继承多态继承多态 封装就是隐藏对象的属性和实 现细节,仅对外提供公开接口。 21 面向对象的基本特征 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 封装继承多态封装多态继承 继承继承描述的不同类型之间 的一种关系,它可以扩展不 同类型的功能 22 面向对象的
14、基本概念 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 封装继承多态封装多态继承 多态多态指的是同一个操作作 用于不同的对象,可以产生 不同的效果。 23 让IT教学更简单,让IT学习更有效 2.1 面向对象程序设计 封装、继承、多态的简单关系 让IT教学更简单,让IT学习更有效 2.2 类与对象 思考 汽车模型和汽车之间的关系? 让IT教学更简单,让IT学习更有效 2.2 类与对象 很多人为了出行便利,都购置了汽车。在我们能够驾驶汽车,惬意穿 行在城市的大街小巷之前,汽车从构思、设计到生产、组装并销售到 用户手中,经历了一系列的过程。从有产品需求开始,汽车厂商首先 会着手进行
15、调研,然后设计出一套工程图样,作为指导汽车制造的蓝 图,设计图样完成了产品属性及功能的描述,比如汽车应该有方向盘、 发动机、加速器等功能部件,也应能执行开车、刹车、加速、倒车等 操作。然后,依照设计图纸生产出一辆辆汽车产品。 让IT教学更简单,让IT学习更有效 2.2 类与对象 将汽车的设计图纸看做一个类,将一辆一辆的汽车看成对象,不同的汽 车都会有一些共性的功能,它们在描述汽车类的图纸中都会有体现。从 汽车图纸和汽车产品的关系可以推导出类和对象的关系。 类是对多个对象共同特征的抽象描述,是对象的模板。对象用于描述现 实中的个体,它是类的实例。从图2-3可以明显看出对象是根据类创建 的,并且通
16、过类可以创建多个对象 让IT教学更简单,让IT学习更有效 面向对象程序设计的核心就是通过对象来反 映现实事物,为了在程序中创建对象,必须 首先定义对象的所属类。类是对象的抽象, 是一种自定义数据类型,它用于描述一组对 象的共同特征和行为。类中可以定义数据成 员和成员函数,数据成员用于描述对象特征, 成员函数用于描述对象行为,其中数据成员 也被称为属性,成员函数也被称为方法。 2.2 类与对象 让IT教学更简单,让IT学习更有效 2.2 类与对象 类的语法格式 class 类名 成员访问限定符: 数据成员; 成员访问限定符: 成员函数; ; 让IT教学更简单,让IT学习更有效 2.2 类与对象
17、类的语法格式 class是定义类的关键字。 class后是表示类名的标识符,为了做到见名知意, 通常类名由若干单词构成,每个单词的首字符大写。 类名和前面的class关键字需要用空格、制表符、 换行符等任意的空白字符进行分隔。 类名后要写一对大括号,类的成员要在其中说明。 在说明成员时,通常使用成员访问限定符说明成员 的访问规则。 右大括号后面的分号“;”表示类定义的结束。 class Car public: void drive(); void stop(); private: int m_nWheels; ; 看一个简单的类: 这是一个类 这是方法 31 31 让IT教学更简单,让IT学习
18、更有效 2.2 类与对象 这是变量 多学一招:通过struct关键字定义类 让IT教学更简单,让IT学习更有效 2.2 类与对象 与C语言中定义结构体类似,C+中也可以通过struct关键字定义类,定 义格式如下所示: struct 类名 成员访问限定符: 成员函数 成员访问限定符: 数据成员 ; 让IT教学更简单,让IT学习更有效 2.2 类与对象 类的成员 类是事物的抽象描述,若想定义类就需要抽象出事物的属性及方法。 例如:汽车类的成员 类外定义成员函数的格式如下所示: 让IT教学更简单,让IT学习更有效 2.2 类与对象 函数返回值类型 类名:成员函数名称(参数表) 函数体 若函数名前没
19、有类名和作用域运算符“:”,则表示函数不是类中的成员 函数,是普通函数。 让IT教学更简单,让IT学习更有效 2.2 类与对象 创建对象并分配空间 类名 对象列表; 创建对象语法格式 每个对象都要为自己的数据成员和成员函数分配空间 类的对象在内存中的分布 让IT教学更简单,让IT学习更有效 2.2 类与对象 创建对象并分配空间 每个对象的数据成员描述的是本对象自身的属性,例如汽车对象,a汽 车是红色,b汽车是白色,因此在创建对象时应该为每个对象分配一块 独立的内存来存储数据成员值,与C语言中的普通局部变量一样,类中 的普通数据成员也被分配在栈中。但是成员函数描述的是对象执行的动 作,每个对象都
20、应相同,为每个对象的成员函数也分配不同空间必然造 成浪费。C+中用同一段空间存放同类对象的成员函数代码,每个对象 调用同一段代码。 让IT教学更简单,让IT学习更有效 2.2 类与对象 访问对象成员 对象名.数据成员名 对象名.成员函数名 访问对象成员的语法格式 例如:Car mycar; mycar.disp_welcomemsg(); 具体查看教材例2-1 类中每个对象的数据成员都占用独立空间,但成员函数 是共享的,可是各个对象调用相同的函数时,显示的是 对象各自的信息,这是怎么做到的? 让IT教学更简单,让IT学习更有效 2.2 类与对象 思考 接下来,通过一个案例来演示。 具体查看教材
21、例2-2 让IT教学更简单,让IT学习更有效 2.2 类与对象 成员函数是如何区分不同对象的? 每个类的成员函数都隐含有一个指向被调用对象的指针,这个 指针被称为“this指针”。程序编译后,成员函数中会包含 this指针,如编译后成员函数set_wheels()的形式如下所示: void Car:set_wheels(int n, Car *this) this-m_nWheels = n; 让IT教学更简单,让IT学习更有效 2.2 类与对象 this指针 this指针是C+实现封装的一种机制,它将对象和该对象调用的成员函数连接在 一起,使得从外部看来,每个对象都拥有自己的成员函数,因此,
22、我们可以在函 数中使用this指针访问成员变量或调用成员函数。 this指针形式 (*this).成员变量或函数 this-成员变量或函数 让IT教学更简单,让IT学习更有效 2.2 类与对象 在函数中把this指针当参数使用 从函数中返回,用作返回值 this指针的作用: reutrn this; return *this; 例如: 让IT教学更简单,让IT学习更有效 2.2 类与对象 访问限定符 类的定义形式中指出,描述成员需要使用相应的访问限定符。 publicprivateproected 被public修饰的成员也 称为公有成员,具有与 类外交互的能力,可以 被该类的其他成员函数 及
23、类外的其他函数使用。 被private修饰的成员称 为私有成员,只能由类 中的函数访问,不可通 过该类的对象进行访 问。 被protected修饰的成员 称为保护成员,其访问 权限介于私有和公有之 间,本类的成员和该类 的派生类可以访问,类 外的其他函数不可以访 问。 让IT教学更简单,让IT学习更有效 2.2 类与对象 三个访问限定符的作用权限 访问限定符属性说明本类派生类其他 public公有成员YesYesYes protected保护成员YesYesNo private私有成员YesNoNo 具体查看教材例2-3 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 让IT教
24、学更简单,让IT学习更有效 2.3 构造函数和析构函数 若想在实例化对象的同时就为对象的数据 成员进行赋值,可以通过调用构造函数的 方法来实现。与之对应的,如果想在操作 完对象之后,回收对象资源,可以通过调 用析构函数来实现。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 什么是构造函数?什么是析构函数? 构造函数和析构函数是类的特殊成员,它们分别在对 象创建和撤销时被自动调用。 构造函数 构造函数是类中特殊的成员函数,用于初始化对象的数据成员。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 构造函数语法格式 class 类名 public: 构造函数名称(
25、参数表) 函数体 private: 数据成员; ; 构造函数 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 构造函数语法格式 构造函数名与类名相同。 构造函数名前没有返回值类型声明。 构造函数中不能通过return语句返回一个值。 通常构造函数具有public属性。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 例如:定义一个包含构造函数的汽车类Car class Car /定义类 public: Car() /构造函数 m_strCarname = “default name”; private: string m_strCarname; /数据成员 ;
26、49 49 构造函数 有三种定义构造函数的形式。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 系统提供默认构造函数 类名:构造函数名() 若程序中没有显式提供类的构造函数,编译器会自动提供一个无参 构造函数,通常这个函数的函数体为空,不具有实际意义。 在例2-1中没有显式定义构造函数,则创建类对象时会使用编译器提 供的默认无参构造函数。 具体查看教材例2-4 构造函数 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 自定义无参构造函数 除了系统提供的默认构造函数外,在程序中可以显式定义无参构造 函数。通常自己定义的无参构造函数将数据成员初始化为固定值。 具体
27、查看教材例2-5 自定义带参构造函数 通常我们希望能在对象创建时为数据成员提供有效初值,通过定义 带参数的构造函数可以实现这样的功能。此外还可定义多个具有不 同参数的构造函数,实现对不同数据成员的初始化。 具体查看教材例2-6 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 C+中可以通过下面两种方式为数据成员提供初值 通过初始化表来实现数据成员的初始化 1 语法格式 类名:构造函数名(参数列表):数据成员1(参数1),数据成员的2(参数 2),数据成员n(参数n) 构造函数体 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 C+中可以通过下面两种方式为数据成员
28、提供初值 默认参数值的构造函数 2 语法格式 类名:构造函数名(类型 参数1 = 默认值, 类型 参数2 = 默认值) 函数体 具体查看教材例2-7 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 1、对于带默认参数值的构造函数来说,需要防止调 用的二义性。 2、构造函数中若第n个参数有默认值,则其后的所有 参数都应该有默认值,若构造函数定义为如下内容, 则编译出错: Car(string con_carname = my car name, int con_seats); 上述代码中,第一个参数有默认值,则后续所有参数 均应该有默认值。 脚下留心:类中定义构造函数后,编译器不
29、再提供默 认构造函数 只要类中定义了一个构造函数,C+将不再提供默认的构造函数。如果在类 中定义的是带参数的构造函数,创建对象时想使用不带参数的构造函数,则 需要再实现一个无参的构造函数,否则编译出错 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 如例2-8所示 具体查看教材例2-8 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 包含对象成员的类的构造函数 C+中允许将一个已定义的类对象作为另一个类的数据成员,即类中的数据成员 可以是其他类的对象,称这种成员是类的子对象或成员对象。 定义新类的格式 class 新类名 类名1 成员1; 类名2 成员2; ;
30、具体查看教材例2-9 析构函数 对象生命期结束前应该完成对象资源的清理,这个工作由析构函数完成。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 析构函数语法格式 类名:析构函数() 函数体 定义析构函 数的要求 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 例如:在类Car中添加析构函数 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 class Car public: Car() m_strCarname = car name; m_nSeats = 4; Car() private: string m_strCarname; int m_
31、nSeats; ; 构造函数 析构函数 具体查看教材例2-10 拷贝构造函数 拷贝构造函数是使用类对象的引用作为参数的构造函数,它能够将参数的属性 值拷贝给新的对象,完成新对象的初始化。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 析构函数语法格式 class 类名 public: 构造函数名称(类名 例如:定义一个带有拷贝构造函数的汽车类Car 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 class Car public: Car(string con_carname, int con_seats) m_strCarname = con_carname
32、; m_nSeats = con_seats; Car(Car m_nSeats = con_refcar.m_nSeats; private: string m_strCarname; int m_nSeats; ; 带参数的构造 函数 拷贝构造函数 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 通常在三种情况下会自动调用拷贝构造函数: 具体查看教材例2-11 具体查看教材例2-12 具体查看教材例2-13 浅拷贝与深拷贝 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 浅拷贝 拷贝构造函数中若只完成数据成员本身的赋值,称 为“浅拷贝” 深拷贝 这种将所有数
33、据都进行复制的拷贝构造函数称之为 “深拷贝”。 具体查看教材例2-14 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 例2-14,调用析构函数进行对象 资源释放后,程序无法正常终止。 思考 两个对象的m_pCarname 指向同一个空间 会因为对已释放的空间进 行二次释放而出错 原因在于,创建对象myseccar时使用的拷贝构造函数中 仅对指针变量本身进行了赋值操作,而没有让对象的 m_pCarname指针指向独立空间。 让IT教学更简单,让IT学习更有效 2.3 构造函数和析构函数 如例2-15所示 具体解决方案: 具体查看教材例2-15 让IT教学更简单,让IT学习更有效
34、 2.3 构造函数和析构函数 不同的对象的pcarname 指向不同的空间 mynewcar对象释放自 己独有空间 示意图: 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 共享 很多时候为了描述较复杂的 情况,类中的数据成员可能 需要在多个对象间共享,也 可能在对象中只进行读取不 被修改,这种情况就会用到 一些特殊的成员变量。 例如:设计学生类时,可以在空间内部定义一个属性用于统计学生的 总人数。在对象以外的空间定义一个表示总人数的变量让所有对象共享 学生总数 学生对象1 学生对象2 姓名 年龄 姓名 年龄 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 静态
35、成员 C+中将使用static修饰的数据成员称为静态成员 定义静态成员语法格式 static 类型标识符 静态数据成员名称; 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 静态成员的访问和初始化 当静态成员被声明具有public属性,则与普通的public数据成员类似,可以通过 对象在类外完成访问 通过对象在类外完成访问1 访问形式 对象.公有静态数据成员 = xx; 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 静态成员的访问和初始化 由于静态数据成员不属于任何对象,访问静态数据成员有其独特的
36、方式,可以通 过类名直接进行访问。 过类名直接进行访问2 访问形式 类名:静态数据成员名 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 静态成员的访问和初始化 若想对静态数据成员进行初始化,需要在类外通过“类名:静态数据成员 = 初值” 的方法提供初值。 静态数据成员初始化 类名:静态数据成员 = 初值; 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 例如:定义Student类,其中包含一个静态成员 class Student public: Student(); Student(); static int s_nTotalnum; private: cha
37、r m_gName20; int m_nID; ; int Student:s_nTotalnum = 0; 静态数据成员 具体查看教材例2-16 常数据成员 希望类中的数据成员在对象使用中不被改变,可以把这样的成员定义为常数据成 员。C+中将使用const修饰的数据成员称为常数据成员。 定义常数据成员语法格式 class 类名 const 数据类型 数据成员; ; 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 常数据成员的初始化 常数据成员必须进行初始化并且不能被更新。若想对常数据成员进行初始化只能 通过初始化
38、表完成,不能在构造函数内部进行赋值。 常数据成员初始化 类名:类名(形参列表):常数据成 员1(值), 常数据成员2(值) 构造函数体 让IT教学更简单,让IT学习更有效 2.4 类中特殊的成员变量 例如:定义一个Circle类,其中描述PI值的是常数据成员 class Circle public: Circle(double con_radius); private: const double PI; double m_fRadius; ; /构造函数定义,常数据成员通过初始化表完成初始化 Circle:Circle(double con_radius):PI(3.1415) 常数据成员PI
39、 具体查看教材例2-17 静态成员函数 C+中用于操作静态数据成员的函数可以定义为静态成员函数,由static关键字 描述。 静态成员函数的语法格式 class 类名 static 函数返回值类型 函数名(形参列表) 函数体 ; 让IT教学更简单,让IT学习更有效 2.5 类中特殊的成员函数 具体查看教材例2-18 让IT教学更简单,让IT学习更有效 2.5 类中特殊的成员函数 l 类的普通成员函数可以访问类中的非静态及静态 数据成员。 l 在类外部可以直接访问类的公有静态数据成员和 公有普通数据成员,访问方式不同:公有普通数 据成员只可通过对象访问,公有静态数据成员既 可以通过对象访问也可通
40、过类访问。 l 在类外部可以直接访问类的公有静态成员函数和 公有普通成员函数,访问方式不同:公有普通成 员函数只可通过对象访问,公有静态成员函数既 可以通过对象访问也可通过类访问。 常成员函数 C+中用const修饰的函数,被称为常成员函数。 常成员函数的语法格式 class 类名 public: 函数返回值类型 函数名(形参列表) const 函数体 ; 让IT教学更简单,让IT学习更有效 2.5 类中特殊的成员函数 具体查看教材例2-19 让IT教学更简单,让IT学习更有效 2.5 类中特殊的成员函数 l 若类中某些数据成员的值允许改变,另外的数据 成员不可改变,则可将不需改变的成员声明为 const修饰的常数据成员,可用非const成员函数 获取常数据成员的值,访问或修改普通数据成员。 l 若类中所有的数据成员均不改变,则可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁岭市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(真题汇编)
- 2026年省直辖行政单位农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(突破训练)
- 珠海市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)带答案详解(完整版)
- 潼南县农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解
- 台州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)及答案详解(历年真题)
- 浙江省农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)有完整答案详解
- 荆门市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)完整参考答案详解
- 2026年嘉峪关市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解
- 2025年高危儿护理常规试题及答案
- 2026年河池市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(轻巧夺冠)
- 2025至2030小型越野汽车行业市场深度分析及竞争格局与投资发展报告
- 云计算应急响应方案
- 2025年肿瘤内科正高试题及答案
- 水务大数据分析与应用-洞察及研究
- 十八项电网重大反事故措施第一课培训课件
- 计生科应急预案(3篇)
- 修理扫帚课件
- 治边稳藏课件
- -T-CAPA-11-2024《女性阴道松弛症诊断与治疗规范》
- 医院消防安全管理架构及人员职责
- 小小园艺师教学课件
评论
0/150
提交评论