C++第14章 常量成员静态成员与友元
- 格式:pptx
- 大小:550.18 KB
- 文档页数:29
C++关键字大全1. asm(汇编),用法如下:asm (指令字符串); 允许在C++程序中嵌入汇编代码。
2. auto(自动,automatic)是存储类型标识符,表明变量“自动”具有本地范围,块范围的变量声明(如for循环体内的变量声明)默认为auto存储类型。
3. bool(布尔)类型,C++中的基本数据结构,其值可选为true(真)或者false(假)。
C++中的bool类型可以和int混用,具体来说就是0代表false,非0代表true。
bool类型常用于条件判断和函数返回值。
4. break(中断、跳出),用在switch语句或者循环语句中。
程序遇到break后,即跳过该程序段,继续后面的语句执行。
5. case用于switch语句中,用于判断不同的条件类型。
6. catch catch和try语句一起用于异常处理。
7. char char(字符,character)类型,C++中的基本数据结构,其值一般为0~255的int。
这256个字符对应着256个ASCII码。
char类型的数据需要用单引号’’括起来。
8. class class(类)是C++面向对象设计的基础。
使用class关键字声明一个类。
9. const const(常量的,constant)所修饰的对象或变量不能被改变,修饰函数时,该函数不能改变在该函数外面声明的变量也不能调用任何非const函数。
在函数的声明与定义时都要加上const,放在函数参数列表的最后一个括号后。
在C++中,用const声明一个变量,意味着该变量就是一个带类型的常量,可以代替#define,且比#define多一个类型信息,且它执行内链接,可放在头文件中声明;但在C中,其声明则必须放在源文件(即.C文件)中,在C中const声明一个变量,除了不能改变其值外,它仍是一具变量10. const_cast 用法:const_cast<type_id> (expression) 该运算符用来修改类型的const或volatile属性。
判断char型变量cl是否为小写字母的正确表达式是________。
(2.0分)A、(cl>='a')&&(cl<='z')B、('a'>=cl)||('z'<=cl)C、a'<=cl<='z'D、(cl>=a)&&(cl<=z)假定MyClass为一个类,则执行"MyClass a(2),b[5],*c[4]"后,执行构造函数的次数为________。
(2.0分)A、6B、11C、10D、5char *s1="hello",*s2;s2=s1;则________。
(2.0分)A、s1不能再指向其它单元B、cout<<s1;与cout<<s2;结果相同C、不能访问"hello"D、s2指向不确定的内存单元已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。
如果要给m赋值为5,正确的是________。
(2.0分)A、*A1.p=5;B、A1.*p=5;C、A1->p=5;D、A1.p=5;C++异常处理机制中没有________。
(2.0分)A、finallyB、tryC、throwD、catch所谓多态性是指________。
(2.0分)A、一个对象调用不同名称的对象B、一个对象调用不同名称的函数C、不同的对象调用相同名称的函数D、不同的对象调用不同名称的函数关于new运算符的下列描述中,________是错的。
(2.0分)A、使用它创建对象数组时必须指定初始值B、它可以用来动态创建对象和对象数组C、使用它创建对象时要调用构造函数D、使用它创建的对象和对象数组可以使用运算符delete删除以下正确的说法是:在C++语言中进行值传递时________。
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++类静态成员与类静态成员函数详解当将类的某个数据成员声明为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; // 这⾏代码是错误的静态函数成员必须通过对象名来访问⾮静态数据成员。
数据成员可以分静态变量、非静态变量两种.静态成员:静态类中的成员加入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++friend)详解私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接⼝(成员函数)间接地进⾏。
这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的⿇烦。
是从结构化的C语⾔发展⽽来的,需要照顾结构化设计程序员的习惯,所以在对私有成员可访问范围的问题上不可限制太死。
C++ 设计者认为,如果有的程序员真的⾮常怕⿇烦,就是想在类的成员函数外部直接访问对象的私有成员,那还是做⼀点妥协以满⾜他们的愿望为好,这也算是眼前利益和长远利益的折中。
因此,C++ 就有了友元(friend)的概念。
打个⽐⽅,这相当于是说:朋友是值得信任的,所以可以对他们公开⼀些⾃⼰的隐私。
友元分为两种:友元函数和友元类。
友元函数在定义⼀个类的时候,可以把⼀些函数(包括全局函数和其他类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对象的私有成员了。
将全局函数声明为友元的写法如下:friend 返回值类型函数名(参数表);将其他类的成员函数声明为友元的写法如下:friend 返回值类型其他类的类名::成员函数名(参数表);但是,不能把其他类的私有成员函数声明为友元。
关于友元,看下⾯的程序⽰例。
1. #include<iostream>2. ug namespace std;3. class CCar; //提前声明CCar类,以便后⾯的CDriver类使⽤4. class CDriver5. {6. public:7. void ModifyCar(CCar* pCar); //改装汽车8. };9. class CCar10. {11. private:12. int price;13. friend int MostExpensiveCar(CCar cars[], int total); //声明友元14. friend void CDriver::ModifyCar(CCar* pCar); //声明友元15. };16. void CDriver::ModifyCar(CCar* pCar)17. {18. pCar->price += 1000; //汽车改装后价值增加19. }20. int MostExpensiveCar(CCar cars[], int total) //求最贵⽓车的价格21. {22. int tmpMax = -1;23. for (int i = 0; i<total; ++i)24. if (cars[i].price > tmpMax)25. tmpMax = cars[i].price;26. return tmpMax;27. }28. int main()29. {30. return 0;31. }这个程序只是为了展⽰友元的⽤法,所以 main 函数什么也不做。
常量函数知识点归纳总结常量函数是一种特殊的函数,它具有一些独特的特性和用途。
在编程中,了解常量函数的特点和用法对于设计和编写高质量的代码非常重要。
本文将对常量函数的定义、特点、用法以及相关注意事项进行归纳总结。
一、常量函数的定义常量函数是指在函数声明和定义中加上const关键字的函数。
在C++中,常量函数的声明和定义分别如下所示:```cpp// 声明常量函数void fun() const;// 定义常量函数void ClassName::fun() const {// 函数体}```在函数声明和定义的参数列表后加上const关键字即可将函数声明为常量函数。
这使得函数在被调用时无法修改成员变量的值,从而实现了常量函数的特性。
二、常量函数的特点常量函数具有以下几个特点:1. 不能修改成员变量:在常量函数中,不允许修改任何类的成员变量。
即使类的成员变量被声明为可变的(mutable),常量函数也不能修改它们的值。
2. 只能调用其他常量函数:常量函数只能调用其他常量函数,因为非常量函数有可能修改成员变量的值,这与常量函数的特性相悖。
3. 适用于常量对象:常量函数通常用于处理常量对象,因为常量对象的成员变量不能被修改。
通过使用常量函数,可以确保对常量对象的操作不会改变对象的状态。
4. 不产生副作用:由于常量函数不能修改成员变量的值,它不会产生副作用。
这使得常量函数更加安全和可靠,有利于编写健壮的代码。
5. 表现为类的不变性:常量函数可以用来表现类的不变性(invariant),即类在某一时间段内不会发生变化的特性。
通过在常量函数中实现不变性,可以确保对象的状态不会被错误地修改。
三、常量函数的用法常量函数在实际编程中具有多种用途,主要包括以下几个方面:1. 处理常量对象:常量函数通常用于处理常量对象,以确保对象的状态不会被修改。
这对于编写高质量的代码非常重要,可以避免在对象被错误地修改时引发不确定的行为。
HZAU-专业C++作业11-12判断题1. 友元关系是单向的,不可交换的。
(2分)2. 只有成员函数才能传递this指针,而友元函数不能传递this指针(2分)3. 友元函数是成员函数,它可以访问类中私有成员。
(2分)4. 在成员函数中访问对象的数据成员时,可以直接用数据成员名,而在友员函数中访问对象的数据成员时,必须指明是哪个对象的数据成员。
(2分)5. 友元是可以继承的。
(2分)6. 常成员函数只能用来引用数据成员的值,而不允许改变数据成员的值。
(2分)7. C++语言允许使用友元,但是友元会破环封装性。
(2分)8. 必须在类定义体外对静态数据成员进行初始化。
(2分)9. 能访问一个类CMyClass中的private成员的可以是类CMyClass 的成员函数,友元函数和友元类中的函数。
(2分)10. 类的友元函数是指可以访问本类私有成员的其他类的成员函数。
(2分)11. 类中的静态成员数据为该类的所有对象所共享,并且,在该类对象被撤销时,静态成员并没有撤销。
(2分)12. 如果在一个类的对象之间要进行数据交换,可以使用该类的静态数据成员来完成。
(2分)13. 如果一个类的所有对象都共享某一个变量,则应当将该变量定义为该类的私有成员。
(2分)1.如果类A被说明成类B的友元,则()。
(2分)A. 类A的成员即类B的成员B. 类B的成员即类A的成员C. 类A的成员函数不得访问类B的成员D. 类B不一定是类A的友元2.友元的作用()。
(2分)A. 提高程序的运用效率B. 加强类的封装性C. 实现数据的隐藏性D. 增加成员函数的种类3.下述静态数据成员的特征中,()是错误的。
(2分)A. 静态数据成员要在类体外进行初始化B. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符C. 静态数据成员不是所有对象所共用的D. 说明静态数据成员时前边要加修饰符static已知类A是类B的友元,类B是类C的友元,则()。
C++运算符重载三种形式(成员函数,友元函数,普通函数)详解三种重载⽅式⾸先,介绍三种重载⽅式:1//作为成员函数重载(常见)2class Person{3 Private:4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}8bool operator<(const Person& b);910 };11bool Person::operator<(const Person& b)12 {13//作为成员函数时,*this即为左操作数a14 ...15 }1//作为友元函数重载2class Person{3private:4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}8 friend bool operator<(const Person& a,const Person& b);910 };11bool operator<(const Person& a,const Person& b)12 {13 ...14 }1//作为普通函数重载(不推荐)2class Person{3public://注意,重载运算符为普通函数时,使⽤到的类成员必须为public4string name;5int age;6public:7 Person(const char* name, int age):name(name),age(age){}89 };10bool operator<(const Person& a,const Person& b)11 {12 ...13 }作为成员函数重载先介绍第⼀种:bool Person::operator<(const Person& b),bool是函数返回类型,Person::只是指定了成员函数所属类名。
类和对象初步1.类的定义在定义外成员函数的实现2.类的成员函数之间可以相互调用,类的成员函数也可以重载,也可设默认参数值3.一般来讲,一个对象占用的内存空间的大小等于其成员变量的体积之和。
每个对象都有自己的存储空间(成员变量),但成员函数只有一份对象名.成员名指针->成员名引用名.成员名4.private:一个类的私有成员,只能在该类的成员函数中才能访问public:proteced:5.class默认private struct默认public6.内联成员函数:成员函数名前加inline 或函数体写在类定义内部的成员函数。
执行更快,但会带来额外的内存开销构造函数1.构造函数全局变量在堆上,系统自动初始化为零。
局部变量在栈上,初始值是随机的,需要初始化。
2.构造函数:对对象进行初始化。
构造函数执行时对象的内存空间已经分配,构造函数的作用是初始化这片空间.可重载,不写的话有默认构造函数,但是如果编写了构造函数,那默认构造函数不会再执行.是一类特殊的成员函数。
不写返回值类型,函数名为类名.3.对象在生成时一定会调用某个构造函数,一旦生成,不再执行构造函数.4.P183 Ctest *pArray[3]={new Ctest(4),new Ctest(1,2)}5.复制构造函数:其是构造函数的一种,只有一个参数,为本类的引用,防止混淆,构造函数不能以本类的对象作为唯一的参数。
默认复制构造函数。
6.复制构造函数被调用的三种情形:1用一个对象去初始化另一个对象时Complex C1(C2)ComplexC2=C1; 2 函数的参数是类A的对象。
形参未必等于实参函数中用对象的引用不会调用复制构造函数void Function(const Complex &c)3 函数的返回值是类A的对象7.类型转换构造函数:除复制构造函数外,只有一个参数的构造函数C=68.析构函数:在对象消亡时调用,可以定义其做善后工作。
第6章;类和对象(一)练习题66.1判断题×1.使用class定义的类,其默认的访问权限是公有的,使用struct定义的类,其默认的访问权限是私有的。
×2.类中的成员函数都是公有的,数据成员都是私有的。
×3.定义在类体内的成员函数是内联函数,定义在类体外的成员函数不能是内联函数。
√4.类定义后,它的成员个数及名称就不会再被改变了。
×5.定义或说明对象时,系统会自动调用构造函数为创建的对象初始化。
如果类中没有定义任何构造函数时,就无法给定义的对象初始化。
√6.定义一个对象时,系统只为该对象的数据成员开辟内存空间,而成员函数是同类对象共享的。
√7.对象成员的表示方法与结构变量成员的表示方法相同。
√8.创建对象时系统自动调用相应的构造函数为对象初始化,没有相应的构造函数时,系统会自动生成。
√9.构造函数是一个其名与类名相同的特殊的成员函数。
×10.析构函数是一个函数体为空的成员函数。
√11.构造函数和析构函数都是系统自动调用的成员函数。
×12.构造函数和析构函数都可以重载。
√13.成员函数与一般函数一样可以重载、内联和设置参数的默认值。
×14.静态成员是指静态对象的成员。
×15.静态数据成员必须在构造函数的成员初始化列表中进行初始化。
√16.静态成员都可以使用类名加作用域运算符的方法来引用。
×17.静态成员函数中引用静态数据成员和非静态数据成员的方式是相同的。
√18.常成员指的是类体内使用const关键字说明的常数据成员和常成员函数。
×19.常数据成员在常成员函数中的值是不允许改变的,而在非常成员函数中是允许改变的。
√20.常对象需要引用常成员函数,而不能引用非常成员函数。
×21.常对象的数据成员都是常数据成员。
√22.友元函数是说明在类体内的非成员函数,它可以访问类中的所有成员。
×23.可以把一个一般函数说明为某类的友元函数,也可以将某类的成员函数说明为另类的友元函数。
5.3 练习题解答1.什么是类?为什么说类是一种抽象数据类型的实现?答:类是C++语言中的一种数据类型。
这种数据类型是一种封装体,它既包含有数据结构,又包含有对这些数据所进行的若干操作。
类的获得是通过对于所要解决的问题中的客观实体的抽象,这种抽象不仅包含了它的属性,同时还有对这些属性的操作,即方法。
对实体的这种抽象可用一个标识符来表示,并可对它引用及操作,这种标识符称为类。
可见,类是抽象数据类型的一种实现。
2.类的定义格式如何?类的说明部分和实现部分各包含些什么?答:类的定义格式包含说明部分和定义部分。
类的说明部分主要有类头和类体两部分。
类头定义格式如下所示。
class<类名>其中,class是关键字,<类名>同标识符。
类体是由一对花括号括起来的若干成员,成员中包含数据成员和成员函数,右花括号后边有一个分号。
{〈数据成员说明〉〈成员函数说明〉};成员又分为不同的访问权限,有公有(puLlic)、私有(private)和保护(protected)3种。
类的实现部分是用来定义类中说明的成员函数(没有定义)在该部分定义。
如果类中所有成员函数都已在类体内定义了,则实现部分可以省略。
3.类的成员一般分为哪两部分?这两部分有何区别?答:类的成员一般分为数据成员和成员函数两个部分。
前一部分是用来表示状态的数据,后一部分是用来改变状态的方法(即函数)。
简单地讲,前部分是变量,后部分是函数,后部分的函数是用来对前部分的变量进行操作的。
4.从访问权限角度如何区分不同种类的成员?它们各自的特点是什么?答:从访问权限角度可以将类中成员分为三种:公有的,私有的和保护的。
公有成员可以被类体内外的程序所访问,它通常作为一个类体的对外接口。
私有成员只能对类体内的程序所访问,在类体外是不可见的。
它是类中的被隐藏部分。
保护成员对一般类而言视同私有成员,对派生类同公有成员。
它可以被其派生类中的程序访问。
5.作用域运算符的功能是什么?它的使用格式如何?答:作用域运算符::是C十十语言中的一种运算符,用来指明某个标识符的作用域,主要用于标识类中成员。
静态成员的需要性静态成员的使用静态数据成员静态成员函数需要友元的原因友元的使用私有成员和保护成员提供了方便,但破坏了类的封装性和隐蔽性。
友元可以是一个函数,称为友元函数,也可以是一个类,称为友元类。
友元函数和友元类统称为友元。
一、静态成员的需要性类相当于一个数据类型,当说明一个某类的对象时,系统就为该对象分配一块内存单元来存放类中的所有成员。
但在某些应用中,需要程序中属于某个类的所有对象共享某个数据。
为此,一个解决的办法就是将所要共享的数据说明为全局变量,但这将破坏数据的封装性;较好的解决办法是将所要共享的数据说明为类的静态成员。
二、静态成员的使用C++中在说明类成员(数据成员和成员函数)时,使用了static关键字,则这类成员称为类的静态成员。
静态成员是所有对象公有的。
静态成员有静态数据成员和静态函数成员之分。
C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。
静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此可以实现多个对象间的数据共享。
静态数据成员不属于任何对象,它不因对象的建立而产生,也不因对象的析构而删除,它是类定义的一部分, 所以使用静态数据成员不会破坏类的隐蔽性。
对静态数据成员的操作和一般数据成员一样,定义为私有的静态数据成员不能由外界访问。
静态数据成员可由任意访问权限许可的函数访问。
可以在类的成员函数中改变静态数据成员。
静态数据成员不从属于任何一个具体对象,所以必须对它初始化,且对静态数据成员的初始化不能在构造函数中进行。
类中用关键字static修饰的数据成员叫做静态数据成员。
说明一个静态数据成员的方法与说明一个一般静态变量一样,只不过前者是在一个类中说明。
静态数据成员的使用方法如下:1) 静态数据成员的定义与一般数据成员相似,但前面要加上static关键词。
2) 静态数据成员的初始化与一般数据成员不同,静态数据成员初始化的格式如下:<类型> <类名>::<静态数据成员>=<值>;int Student :: noOfStudents = 0;3)在引用静态数据成员时采用格式:<类名>::<静态数据成员>几点注意:⏹静态数据成员是类的一部分,静态数据成员的定义是类定义的一部分,将其放在类的内部实现部分中定义。