【2017年整理】C++ static、const和static const 以及它们的初始化

上传人:豆浆 文档编号:987689 上传时间:2017-05-24 格式:DOC 页数:3 大小:47.50KB
返回 下载 相关 举报
【2017年整理】C++ static、const和static const 以及它们的初始化_第1页
第1页 / 共3页
【2017年整理】C++ static、const和static const 以及它们的初始化_第2页
第2页 / 共3页
【2017年整理】C++ static、const和static const 以及它们的初始化_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《【2017年整理】C++ static、const和static const 以及它们的初始化》由会员分享,可在线阅读,更多相关《【2017年整理】C++ static、const和static const 以及它们的初始化(3页珍藏版)》请在金锄头文库上搜索。

1、 const 定义的常量在超出其作用域之后其空间会被释放,而 static 定义的静态常量在函数执行后不会释放其存储空间。static 表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在 C+中,static 静态成员变量不能在类的内部初始化。在类的内部只是声明,定义必须在类定义体的外部,通常在类的实现文件中初始化,如:double Account:Rate=2.25;static 关键字只能用于类定义体内部的声明中,定义时不能

2、标示为static在 C+中,const 成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。const 数据成员 只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。所以不能在类的声明中初始化 const 数据成员,因为类的对象没被创建时,编译器不知道 const 数据成员的值是什么。const 数据成员的初始化只能在 类的构造函数的初始化列表中 进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者 static cosnt。cpp view plaincopy1.

3、class Test 2. 3. public: 4. Test():a(0) 5. enum size1=100,size2=200; 6. private: 7. const int a;/只能在构造函数初始化列表中初始化 8. static int b;/在类的实现文件中定义并初始化 9. const static int c;/与 static const int c;相同。 10. ; 11. 12. int Test:b=0;/static 成员变量不能在构造函数初始化列表中初始化,因为它不属于某个对象。 13. cosnt int Test:c=0;/注意:给静态成员变量赋值时,

4、不需要加 static 修饰符。但要加cosnt cosnt 成员函数主要目的是防止成员函数修改对象的内容。即 const 成员函数不能修改成员变量的值,但可以访问成员变量。当方法成员函数时,该函数只能是 const 成员函数。 static 成员函数主要目的是作为类作用域的全局函数。不能访问类的非静态数据成员。类的静态成员函数没有 this 指针,这导致:1、不能直接存取类的非静态成员变量,调用非静态成员函数 2、不能被声明为 virtual关于 static、const、static cosnt、const static 成员的初始化问题:1、类里的 const 成员初始化:在一个类里建立

5、一个 const 时,不能给他初值cpp view plaincopy1. class foo 2. 3. public: 4. foo():i(100) 5. private: 6. const int i=100;/error! 7. ; 8. /或者通过这样的方式来进行初始化 9. foo:foo():i(100) 10. 2、类里的 static 成员初始化:类中的 static 变量是属于类的,不属于某个对象,它在整个程序的运行过程中只有一个副本,因此不能在定义对象时 对变量进行初始化,就是不能用构造函数进行初始化,其正确的初始化方法是:数据类型 类名:静态数据成员名=值;c-sha

6、rp view plaincopy1. class foo 2. 3. public: 4. foo(); 5. private: 6. static int i; 7. ; 8. 9. int foo:i=20; 10. 这表明: 11. 1、初始化在类体外进行,而前面不加 static,以免与一般静态变量或对象相混淆 12. 2、初始化时不加该成员的访问权限控制符 private、public 等 13. 3、初始化时使用作用域运算符来表明它所属的类,因此,静态数据成员是类的成员而不是对象的成员。 3、类里的 static cosnt 和 const static 成员初始化 这两种写法的

7、作用一样,为了便于记忆,在此值说明一种通用的初始化方法:cpp view plaincopy1. class Test 2. 3. public: 4. static const int mask1; 5. const static int mask2; 6. ; 7. const Test:mask1=0xffff; 8. const Test:mask2=0xffff; 9. /它们的初始化没有区别,虽然一个是静态常量一个是常量静态。静态都将存储在全局变量区域,其实最后结果都一样。可能在不同编译器内,不同处理,但最后结果都一样。 这是一个完整的例子:cpp view plaincopy1.

8、 #ifdef A_H_ 2. #define A_H_ 3. #include 4. using namespace std; 5. class A 6. 7. public: 8. A(int a); 9. static void print();/静态成员函数 10. private: 11. static int aa;/静态数据成员的声明 12. static const int count;/常量静态数据成员(可以在构造函数中初始化) 13. const int bb;/常量数据成员 14. ; 15. int A:aa=0;/静态成员的定义+初始化 16. const int A:count=25;/静态常量成员定义+初始化 17. A:A(int a):bb(a)/常量成员的初始化 18. 19. aa+=1; 20. 21. void A:print() 22. 23. coutcount=countendl; 24. coutaa=aaendl; 25. 26. #endif 27. void main() 28. 29. A a(10); 30. A:print();/通过类访问静态成员函数 31. a.print();/通过对象访问静态成员函数 32.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号