C++教程第07章 类与对象-5 类的静态成员及常量

合集下载

《C++类和对象》课件

《C++类和对象》课件

成员变量和成员函数
成员变量
讲解成员变量的定义和使用,以及不同访问修饰符 对成员及成员函数对类 的封装性的重要性。
访问控制和封装
• 深入理解C++中的访问控制修饰符:private、protected和public。 • 了解封装的概念,并学习如何使用类的接口和实现来隐藏实现细节。
构造函数和析构函数
1 构造函数
介绍构造函数的作用和使用方式,以及构造 函数的重载和默认参数。
2 析构函数
学习何时使用析构函数以及如何确保资源的 正确释放。
对象的初始化和复制
对象初始化
深入了解使用不同的构造函数来初始化对象的方法 和效果。
对象复制
学习如何进行浅复制和深复制,并理解它们对对象 行为的影响。
C++类和对象
C++类和对象的概述和基本定义,讲解类的成员变量和成员函数,以及访问控 制和封装的重要性。
类和对象的定义和声明
类定义
了解如何使用C++关键字来定义一个类,包括类名、成员变量和成员函数。
对象声明
介绍如何声明一个对象并理解对象在内存中的布局。
构造函数
学习如何使用构造函数来初始化对象的数据成员。
多态性
深入了解多态性的概念和使用方式,以及如何通过虚函数和纯虚函数实现多态性。
动态绑定
介绍动态绑定的概念和使用方式,以及它对多态性的重要性。
静态成员和常量成员
1
静态成员
了解静态成员的概念和使用方式,以及静态成员对类的数据共享的影响。
2
常量成员
学习如何定义和使用常量成员,并理解常量成员在编程中的作用。
3
友元类和函数

C#中静态方法与非静态方法(static),公有与私有(public,private)

C#中静态方法与非静态方法(static),公有与私有(public,private)

C#中静态⽅法与⾮静态⽅法(static),公有与私有(public,private)梳理公有与私有,静态与⾮静态的应⽤1)公有与私有public(公有的):声明的⽅法和属性,可以被外部调⽤.private(私有的):声明的⽅法和属性,只能在本类中被调⽤,外部看不到.2)静态与⾮静态static(静态的):声明的⽅法和属性,不需要实例化就能被调⽤(公有/私有).C#静态⽅法与⾮静态⽅法⽐较⼀、C#静态成员:1、静态成员属于类所有,⾮静态成员属于类的实例所有。

2、每创建⼀个类的实例,都会在内存中为⾮静态成员新分配⼀块存储;⼆、C#静态⽅法1、C#静态⽅法属于类所有,类实例化前即可使⽤。

2、⾮静态⽅法可以访问类中的任何成员,静态⽅法只能访问类中的静态成员。

3、因为静态⽅法在类实例化前就可以使⽤,⽽类中的⾮静态变量必须在实例化之后才能分配内存,C#静态⽅法调⽤时⽆法判断⾮静态变量使⽤的内存地址。

所以⽆法使⽤。

⽽静态变量的地址对类来说是固定的,故可以使⽤。

三、C#静态⽅法是⼀种特殊的成员⽅法它不属于类的某⼀个具体的实例,⽽是属于类本⾝。

所以对静态⽅法不需要⾸先创建⼀个类的实例,⽽是采⽤类名.静态⽅法的格式。

1.static⽅法是类中的⼀个成员⽅法,属于整个类,即不⽤创建任何对象也可以直接调⽤!static内部只能出现static变量和其他static⽅法!⽽且static⽅法中还不能使⽤this…等关键字…因为它是属于整个类!2.静态⽅法效率上要⽐实例化⾼,静态⽅法的缺点是不⾃动进⾏销毁,⽽实例化的则可以做销毁。

3.静态⽅法和静态变量创建后始终使⽤同⼀块内存,⽽使⽤实例的⽅式会创建多个内存.4.C#中的⽅法有两种:实例⽅法,静态⽅法.静态⽅法销毁:主进程销毁时,内存中分配的静态⽅法销毁.四、获取类的名称C#静态⽅法中获取类的名称静态⽅法中⽤:string className = System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName;⾮静态⽅法中还可以⽤:string className = this.GetType().FullName;。

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法

C中类与类定义及具体使用方法在C语言中,没有像C++那样的类的概念。

然而,我们可以通过一些技巧和约定来模拟类的行为。

在本文中,我将向您介绍如何在C语言中定义和使用类。

首先,让我们来看看如何定义一个类。

1.结构体定义:在C语言中,可以使用结构体来表示一个类的成员变量。

结构体是一种将不同类型的数据组合在一起的数据类型。

可以通过为该结构体添加成员来定义类的属性。

```ctypedef structint member_variable;//添加其他成员变量} MyClass;```在上面的例子中,我们定义了一个名为MyClass的结构体,并给它添加了一个名为member_variable的成员变量。

您可以根据需要添加其他成员变量。

2.方法定义:在C语言中,方法通常是作为函数来实现的。

我们可以为每个类定义一组特定的函数,这些函数将操作类的实例。

```cvoid init(MyClass *object)object->member_variable = 0;//初始化其他成员变量void set_member_variable(MyClass *object, int value)object->member_variable = value;int get_member_variable(MyClass *object)return object->member_variable;```在上述例子中,我们定义了三个函数:init、set_member_variable 和get_member_variable。

init函数用于初始化类的实例,set_member_variable函数用于设置成员变量的值,get_member_variable函数用于获取成员变量的值。

接下来,让我们看看如何使用定义的类。

1.实例化对象:要创建类的实例,我们需要声明一个结构体变量,并使用init函数对其进行初始化。

C++类静态成员与类静态成员函数详解

C++类静态成员与类静态成员函数详解

C++类静态成员与类静态成员函数详解当将类的某个数据成员声明为static时,该静态数据成员只能被定义⼀次,⽽且要被同类的所有对象共享。

各个对象都拥有类中每⼀个普通数据成员的副本,但静态数据成员只有⼀个实例存在,与定义了多少类对象⽆关。

静态⽅法就是与该类相关的,是类的⼀种⾏为,⽽不是与该类的实例对象相关。

静态数据成员的⽤途之⼀是统计有多少个对象实际存在。

静态数据成员不能在类中初始化,实际上类定义只是在描述对象的蓝图,在其中指定初值是不允许的。

也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建⼀个类的对象则静态数据成员都要被重新初始化。

静态成员不可在类体内进⾏赋值,因为它是被所有该类的对象所共享的。

你在⼀个对象⾥给它赋值,其他对象⾥的该成员也会发⽣变化。

为了避免混乱,所以不可在类体内进⾏赋值。

数据类型类名::静态数据成员名=初值不能⽤参数初始化表对静态成员初始化。

⼀般系统缺省初始为0。

静态成员是类所有的对象的共享的成员,⽽不是某个对象的成员。

它在对象中不占⽤存储空间,这个属性为整个类所共有,不属于任何⼀个具体对象。

所以静态成员不能在类的内部初始化,⽐如声明⼀个学⽣类,其中⼀个成员为学⽣总数,则这个变量就应当声明为静态变量,应该根据实际需求来设置成员变量。

复制代码代码如下:#include "iostream"using namespace std;class test{private:int x;int y;public:static int num;static int Getnum(){x+=5; // 这⾏代码是错误的,静态成员函数不能调⽤⾮静态数据成员,要通过类的对象来调⽤。

num+=15;return num;}};int test::num = 10;int main(void){test a;cout<<test::num<<endl; //10test::num = 20;cout<<test::num<<endl; //20cout<<test::Getnum()<<endl; //35cout<<a.Getnum()<<endl; //50system("pause");return 0;}通过上例可知: x+=5; // 这⾏代码是错误的静态函数成员必须通过对象名来访问⾮静态数据成员。

C++类中的静态成员变量和静态成员函数的作用

C++类中的静态成员变量和静态成员函数的作用

数据成员可以分静态变量、非静态变量两种.静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..一个类中也可以包含静态成员和非静态成员,类中也包括静态构造函数和非静态构造函数..分两个方面来总结,第一方面主要是相对于面向过程而言,即在这方面不涉及到类,第二方面相对于面向对象而言,主要说明static在类中的作用。

一、在面向过程设计中的static关键字1、静态全局变量定义:在全局变量前,加上关键字static 该变量就被定义成为了一个静态全局变量。

特点:A、该变量在全局数据区分配内存。

B、初始化:如果不显式初始化,那么将被隐式初始化为0(自动变量是随机的,除非显式地初始化)。

C、访变量只在本源文件可见,严格的讲应该为定义之处开始到本文件结束。

例〔摘于C++程序设计教程---钱能主编P103〕://file1.cpp//Example 1#include <iostream.h>void fn();static int n; //定义静态全局变量void main(){n=20;cout < <n < <endl;fn();}void fn(){n++;cout < <n < <endl;}D、文件作用域下声明的const的常量默认为static存储类型。

静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。

对于一个完整的程序,在内存中的分布情况如以下图:代码区全局数据区堆区栈区一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。

C程序设计 常量和变量(讲义)

C程序设计 常量和变量(讲义)

2.常量和变量一、常量1.概念:在程序运行过程中它的值不发生变化的量。

2.分类:数值常量、字符常量和字符串常量,另外还有符号常量。

(1)数值常量:包括整型常量和浮点数常量两种。

a.整型常量:①十进制:用0-9十个数字表示,逢十进一。

如123,254,758。

②八进制:用0-7八个数字表示,逢八进一。

在八进制数前加标识符“0”表示八进制,如0123,0145。

③十六进制:用0-9十个数字和A~F共十六个字符表示,逢十六进一,在十六进制数前加标识符“0X”表示十六进制,如0X123,0X14D5。

b.浮点数常量:又称为实型数。

有一般形式和指数形式两种。

①一般形式:是由整数部分和小数部分组成。

如:4.37,56.23,-21.365。

②指数形式:用科学记数法来表示。

如:24.15E4,2.13E-3。

(2)字符常量:包括字符常量、字符串常量和反斜杠字符常量三种。

a.字符常量:一个单个字符加上单引号。

如’a’,’b’。

b.字符串常量:多个字符加上双引号。

如”123”,”adf”。

c.反斜杠字符常量:又称为转义字符,是C语言中使用字符的一种特殊形式。

(3)符号常量:用符号来代替常量。

定义格式如下:#define <符号常量名> <常量>例如:#define N 2#define M 23其中N和M是符号常量,它们分别代替2和23。

采用符号常量有很多优点。

二、变量1.概念:在程序运行过程中其值发生变化的量。

2.变量的三要素:变量名,数据类型和变量的值。

(1)变量名的命名规则:(只能使用字母、数字和下划线)①变量名一般都用小写字母表示,也可用大写字母或大小写字母混用。

②在取名时,尽量做到“见名知义”,以便提高程序的可读性。

③变量名不能使用C语言中的系统保留字和关键字。

④变时名首字符必须是英文字母或下划线,中间不能有空格。

(2)变量的类型:可分为基本数据类型和构造数据类型。

(3)变量的值:变量可以通过赋值语句进行赋值,如a=2,将2赋给变量a,则变量a中存放的变量值就是2。

C程序设计基础-PPT课件

C程序设计基础-PPT课件
第二章 C程序设计基础
2.1 常量和变量
注意符:号常量在其作用域内不能再赋值。
符号常量的好处:(1)含义清楚。(2)需改变时,“一改全改”。
2024/10/14
1
2.1 常量和变量
注意:
1、变量中的值:变量必须要有值才能参与运算,(如果一个变量
没有赋值,则该变量是一个随机值)变量可以在定义后与其赋值,也可以
2024/10/14
16
2.3 运算符与表达式
逻辑运算符和逻辑表达式
符号
例子 0&&0=0、0&&1=0、1&&0=0、1&&1=1
0||0=0、0||1=1、1||0=1、1||1=1 !1=0、!0=1
使用说明: ➢1、逻辑非优先级高于逻辑与和逻辑或,逻辑与和逻辑或优先级相同; ➢2、C语言规定:非0都表示“真”,只有0表示“假”; 例:6<4&&7>-3+!5
14
2.3 运算符与表达式
赋值运算符与赋值表达式
符号
功能
例子
=
将表达式右边的数据赋值给左边的变量
x=3+a
+=
将表达式右边的计算结果加上左边的变 量再赋值给左边的变量
x+=3+a等价于x=x+(3+a)
-=
将表达式右边的计算结果减去左边的变 量再赋值给左边的变量
x-=3+a等价于x=x-(3+a)
6~7
双精度(double): 8B 10-308 ~ 10308 15~16
长双精度: 16B 10-4931 ~ 104932 18~19

C++_3_类与对象

C++_3_类与对象

第三章类与对象§3—1 面向对象§3—2 类的定义§3—3 对象的定义§3—4 对象的初始化§3—5 特殊类§3—6 特殊对象§3—7 特殊成员§3—8复杂对象§3—9 类类型转换§3—10 友元§3—1 面向对象一.面向对象面向对象本质上是一种自然合理的思维方法,是一种通过模仿人类建立现实世界模型的习惯思维方式和表达方式,运用对象、类、封装、继承、消息、多态性等概念来构造系统的软件开发方法,它包含面向对象的分析、设计、编程、测试和维护等过程。

它从研究的客观事物出发,将它们抽象为系统中的对象,作为构成系统的基本单位,并尽可能隐蔽对象的内部细节,再把具有相同属性和服务的对象抽象为类。

从客观事物出发,经过不同层次上的抽象得到基类和它的派生类,派生类继承基类的属性和服务,实现了共享。

类中的大多数数据只能用本类的方法进行处理,类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。

向不同对象发送同一消息,可产生不同的行为二.面向对象的三大特性1.封装性:是基础是把对象的属性和服务结合成一个独立的系统单位,并尽可能隐藏对象的内部细节,只保留有限的对外接口使之与外部发生联系,其目的是有效地实现信息隐藏,它是软件设计模块化、软件复用、软件维护的基础对象和类是封装性的体现。

类是对若干对象的抽象描述,对象是它所属类的实例对象:是用来描述客观事物的一个实体,是问题域中客观事物的抽象表示,是用来构成系统的基本单位,由一组属性和行为构成对象属性:表示客观事物的静态特性,一般用数据表达对象行为:描述客观事物的动态特性,即事物的行为,一般用函数(方法)来表达类:是一种用户自定义的抽象数据类型,包含属性和服务两部分,它为该类的所有对象提供一种统一的抽象描述2.继承性:是关键派生类继承基类的属性和服务,派生类自身还有新的属性和服务继承机制既可避免公用代码的重复开发,减少代码和数据冗余,又可通过增强一致性来减少模块间的接口和界面继承有单继承和多继承,继承有传递性3.多态性:是补充即同一接口,多种方法;相同界面,多种实现指同一个名字对应着多种不同的行为或实现或不同对象收到相同的消息时,产生不同的行为多态性有两种:编译时的多态性:重载,包括函数和运算符重载运行时的多态性:动态联编,即同一属性或行为在基类及其各个派生类中具有不同的语义多态性使高层代码只写一次而在低层可多次复用,提高了程序设计的灵活性和效率三、基本术语1.抽象对一类具体事物共性的描述,即从一类事物中抽取共同的本质特点成为概念2.消息即成员函数的调用是向对象发出的服务请求,它包含提供服务的对象标识、服务标识以及输入信息和回答信息消息的接收者是提供服务的对象,它对外提供的每一种服务是按消息格式规定好的消息协议,该消息协议就是其服务的具体功能,即通过函数体来实现的一条完整的消息包含如下内容:①消息的接收者:对象标识②服务标识:函数名③符合消息协议要求的参数:函数实参表§3—2 类的定义一、类面向对象程序设计=对象+对象+对象对象=算法+数据结构类:是对某一类对象的抽象,它由概括了一组对象共同性质的数据和函数组成是一种用户自定义的抽象数据类型,它具有对数据的抽象性、隐藏性和封装性对象:是某一个类的实例,是对现实世界中真实对象的模拟现实世界是一个对象的世界,任何对象都具有一定的属性和操作,总能用数据结构与算法两者合一地来描述二、类的定义1.类的定义(1)说明部分用于类中成员作说明,告诉使用者“干什么”:①数据成员说明:对象的属性、状态、特征②成员函数说明:对象的行为、操作、服务、方法(2)实现部分用来实现成员函数,告诉使用者“怎么干”即提供成员函数的函数体2.具体定义格式:class 类名{public:成员函数和数据成员的说明或实现protected:成员函数和数据成员的说明或实现private:数据成员和成员函数的说明或实现};各个成员函数的实现说明:(1)类名:用户自定义的标识符,应有一定英文含义,类名本身就是类型名(2)类体:“{ }”括起来的部分,凡在其中实现的成员函数均为内联函数(3)访问权限修饰符:①public:公有访问属性,这种成员可以被任意函数访问(使用),提供类的接口功能②protected:保护访问属性,这种成员只能被本类的成员函数和友元函数以及派生类中的成员函数和友元函数访问(使用)③private:私有访问属性,这种成员只能被本类的成员函数和友元函数访问(使用)(4)当把私有成员的声明放于类体最前时,private可省略,即缺省(默认)访问权限为private(5)三种访问权限符在类体中的出现顺序可任意,也可出现多次或不出现(6)在类体中不允许对声明的数据成员进行初始化(7)在定义类的成员函数时,也可对形参设置默认值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7章类与对象7.1 类和对象(定义及使用)初步7.2成员函数的重载7.3 对象的初始化、构造函数与析构函数7. 4 类的定义及其使用7. 5 类的静态成员及常量成员7.5.1静态成员7.5.1.1静态成员数据1.静态成员数据的定义,与静态类型的变量的定义方式一样,要在成员数据的定义之前加关键字static。

2.静态成员数据必须有确定的值,但由于在类的定义中不能对成员数据直接进行初始化,故必须在类定义的外部对静态成员数据再声明一次,并进行初始化,此时,前面不需要加关键字static。

同时为了保持静态成员数据取值的一致性,一般在类的构造函数中不给静态成员数据设置初值。

对静态成员数据初始化的顺序为它们在类体外声明的顺序.3.在同一个程序中,当一个类有多个对象时,则这些对象中的静态成员数据都共享同一个存储空间,即在定义类时,就为静态成员数据分配存储单元,以后创建该类的对象时,将不再为该静态成员数据分配存储单元,也不会对该静态成员数据初始化。

静态成员数据初始化格式:<类型><类名> ::<静态成员数据> = <数值> ;4.类的静态成员数据具有全局变量的某些特征,比如在程序开始运行时就为静态成员数据分配存储空间,但它只有类的作用域。

即在执行main()之前,首先对静态成员数据和全局变量分配存储空间并进行初始化,当整个程序结束时才撤消静态成员数据和全局变量。

5.静态成员数据也可以分为公有的、私有的和受保护的静态成员。

对公有静态成员,即可以通过类的对象进行访问,也可以通过类名直接访问(这是静态成员数据与一般成员数据的另一个区别)。

格式:<类名>::<静态成员数据>私有的和保护的静态成员数据则只能被该类的公有成员函数访问。

6.值得注意的是,在创建任何对象之前,类的静态成员数据已经存在并可以引.7.静态成员数据也可以是用户自定义类型的数据。

7.5.1.2静态成员函数1.定义静态成员函数时,只要在成员函数名前用关键字static修饰即可。

2.静态成员函数属于整个类,它是由该类的所有对象所共享的成员函数,它不属于某个对象。

因此它不含有隐含的*this指针参数,故它不能像普通成员函数那样直接访问对象中的非静态的成员(成员函数和成员数据),即静态成员函数只能访问所在类的静态的成员(成员函数和成员数据)、全局变量、外部函数等。

(因为它们不属于任一个特定对象)。

3。

静态成员函数若要访问非静态成员,则必须借助于类的对象(对象名或指向对象的函数参数)。

4.静态成员函数首先是一个成员函数,它可以定义为内联函数,也可以在类体外定义,但此时函数名前不必加关键字static.5.可以通过所在类的对象访问静态成员函数(公有的)外,还可以通过类名直接访问,格式为:<类名>::<静态成员函数名>(<实参表>)6.静态成员函数不能为const成员函数。

7.5.1.3 静态成员数据和静态成员函数应用举例例1 静态成员数据的定义及应用# include <iostream.h># include<stdlib.h>class CCounter{ static int count ;//定义静态成员数据int objnumber ; //表示对象编号public :CCounter( ){ count ++ ;objnumber=count ;}void Show ( ){ cout<<”obj”<<objnumber<<’\t’<<”count=”<<count<<’\n’ ;}} ;int CCounter::count=0 ;//A 在类定义外声明静态成员数据并初始化,如果不赋初值,//可以不赋初值,此时系统会自动赋初值0。

void main ( ){ CCounter obj 1;obj1.Show( ) ;cout<<”----------------------\n “ ;CCounter obj2 ;obj1.Show ( ) ;obj2.Show( ) ;cout<<”----------------------\n “ ;CCounter obj3 ;obj1.Show ( ) ;obj2.Show ( ) ;obj3.Show ( ) ;}执行结果:obj1 count=1----------------------obj1 count=2obj2 count=2----------------------obj1 count=3obj2 count=3obj3 count=3得注意的是,在创建任何对象之前,类的静态成员数据已经存在并可以引用。

例2 分析程序输出的结果类的静态成员数据具有全局变量的某些特征,在执行main()之前,首先对静态成员数据和全局变量分配存储空间并进行初始化,当整个程序结束时才撤消静态成员数据和全局变量,但它只有类的作用域。

得注意的是,在创建任何对象之前,类的静态成员数据已经存在并可以引用# include <iostream.h>class A{ int i ;static int x ;public :static int y ;A ( int a , int b , int c ){i=a , x=b , y =c ;}void print ( ){ cout<<”i=”<<i<<’\t’<<”x=”<<x<<’\t’<<”y=”<<y<<endl ;}} ;int A ::x=0 ;int A ::y=0 ;void main ( ){count <<’y=”<<A ::y<<endl ; //B在创建任何对象之前,类中的静态成员数据就已经存在A a (11,22,33) ;a.print () ;A b(100 ,200 ,300) ;a.print () ;b.print () ;A::y=400 ; //C,私有静态成员数据不可以直接赋值。

b.print () ;执行结果:y=0i=11 x=22 y=33i=11 x=200 y=300i=100 x=200 y=300i=100 x=200 y=400例:静态成员数据的生存期静态成员数据也可以是用户自定义类型的数据。

#include<iostream.h>class A{ int i ;public :A (int x ){i=x ; cout<<”x=”<<i<<”\t 调用构造函数A() \ n “;}~ A( ){cout<<”x=”<<i<<” \ t 调用析构函数~A()\ n”;}} ;class B{ static A a ;声明静态成员数据static A c ;public :B ( ) {cout<<”调用构造函数B()\ n ”;}~B ( ) {cout<<”调用析构函数~B()\ n ”;}};A B ::a (10) ;//C 在类体外声明静态成员数据并初始化A B ::c (5) ;//DA a1 (20) ; //定义用户自定义类型的全局变量并初始化void main ( ){ cout<<”main()函数开始!\ n “;B b ;cout<<”main()函数结束!\ n “;}执行结果:x=10 调用构造函数A()x=5 调用构造函数A()x=20 调用构造函数A()main ( )函数开始调用构造函数B()main ( )函数结束调用析造函数~B()x=20 调用析造函数~A()x=5 调用析造函数~A()x=10 调用析造函数~A()注意:在执行main()之前,首先对静态成员数据和全局变量分配存储空间并进行初始化,当整个程序结束时才撤消静态成员数据和全局变量。

对静态成员数据初始化的顺序为它们在类体外声明的顺序,如将C行和D行颠倒,则输出的第1行和第2行将要颠倒,最后两行也要颠倒。

例3:静态成员函数的定义和使用# include <iostream.h>void num_Show( ) ;class CComputerstatic float total ;public :static int num ;//创建对象的个数CComputer ( float i){ price = i ;total+= i ;num++ ;}void show ( ){cout<<”The computer price is :“<<price<<endl ;}static void t_show( )//静态成员函数{ num_Show() ;cout<<”total price is:“ <<total<<endl ;//访问静态成员数据total}} ;float CComputer::total=0 ;int CComputer::num=0 ;void num_Show( ) //输出类CComputer静态数据成员num{cout<<”total number is:“<<CComputer::num<<endl ;}void main ( ){ CComputer ::t_show ( ) ;//通过类名直接访问静态成员函数CComputer c1(3500) ;c1.show( );c1.t_show( ) ;CComputer c2(4500) ;c2.show( ) ;CComputer::t_show( ) ; //A通过类名直接访问静态成员函数} // c1.t_show( );c2.t_show( );执行结果:total number is: 0total price is: 0The computer price is : 3500total number is: 1total price is: 3500The computer price is : 4500total number is: 2total price is: 8000//A行通过类名访问其中的公有静态成员函数,该语句与如下任一语句等价:c1.t_show( );c2.t_show( );例4:在静态成员函数中通过对象访问类的非静态成员静态成员函数可以直接调用所属类的其他静态成员,但不能直接访问非静态成员(成员函数和成员数据),若要访问非静态成员,则必须借助于类的对象。

相关文档
最新文档