c++类的 static 和const那些事
2015-03-07 17:08
197 查看
1.static成员变量(非const)必须在类外定义,在类中只是作为声明(声明其scope为该类),不能使用类初始化成员列表来初始化,只能在定义的时候初始化。
2.static const的成员变量必须在类中定义的时候就初始化,不能在类外再定义,不能使用类初始化成员列表初始化。
3.static 与 virtual不能共存于一个函数上,即没有静态虚函数,原因在于静态函数没有this指针,无法通过对象实例来调用,而虚函数与普通成员函数一样必须通过this指针来调用。但是static成员可以通过类实例或类来调用,即A a; a.b或A::b都可。
4.非static的const成员,和引用类型的成员,因为在定义的时候就必须初始化,所以必须使用类初始化成员列表来初始化。
5.在一个函数的最后加上const,则这个函数只能是一个成员函数,而且是非静态的。因为const的函数就隐含着“this指针所指的对象不能被修改”这个意思。同时,const函数不能对任何成员函数做赋值等修改的动作,而且如果一个实例是const实例,这个实例只能调用const函数。
6.static成员在编译的时候就已经确定了(未显式初始化的则为0)。而普通成员则在创建实例的时候初始化。
故一个类对象里面的成员的初始化顺序:
程序加载时确定:
a.静态成员变量的空间及值。
b.成员函数的空间及地址。
创建对象时(运行时)确定:
c.虚函数表(如果该类或该类的任一个基类,超类有虚函数)
e.普通成员变量的空间及值。
2.static const的成员变量必须在类中定义的时候就初始化,不能在类外再定义,不能使用类初始化成员列表初始化。
3.static 与 virtual不能共存于一个函数上,即没有静态虚函数,原因在于静态函数没有this指针,无法通过对象实例来调用,而虚函数与普通成员函数一样必须通过this指针来调用。但是static成员可以通过类实例或类来调用,即A a; a.b或A::b都可。
4.非static的const成员,和引用类型的成员,因为在定义的时候就必须初始化,所以必须使用类初始化成员列表来初始化。
5.在一个函数的最后加上const,则这个函数只能是一个成员函数,而且是非静态的。因为const的函数就隐含着“this指针所指的对象不能被修改”这个意思。同时,const函数不能对任何成员函数做赋值等修改的动作,而且如果一个实例是const实例,这个实例只能调用const函数。
6.static成员在编译的时候就已经确定了(未显式初始化的则为0)。而普通成员则在创建实例的时候初始化。
故一个类对象里面的成员的初始化顺序:
程序加载时确定:
a.静态成员变量的空间及值。
b.成员函数的空间及地址。
创建对象时(运行时)确定:
c.虚函数表(如果该类或该类的任一个基类,超类有虚函数)
e.普通成员变量的空间及值。
#include<iostream> using namespace std; class A { public: int a; static int b; const int c; static const int d = 4; public: A(int i,int j):c(i),a(j){} void print(){} }; int A::b;//这个值默认为0,因为static成员放在全局静态区。 int main() { A a(1,2); cout<<a.a<<endl; cout<<a.b<<endl; cout<<a.c<<endl; cout<<a.d<<endl; }
相关文章推荐
- 【那些人追的干货】如何正确使用const,static,extern
- C++类中const, static, reference等类型成员的初始化
- C++类的const、static和const static数据成员的初始化
- 【如何正确使用const,static,extern】|那些人追的干货
- c++类中static、const、static const成员变量初始化
- 【如何正确使用const,static,extern】|那些人追的干货
- 【如何正确使用const,static,extern】|那些人追的干货
- C++类的三种数据成员:常量(const)、静态(static)、普通 的赋值方式
- C++类的const、static和const static数据成员的初始化
- C++类中各种不同类型成员根据是否static 、是否const类型的初始化方法不尽相同,写代码时经常搞乱,网上搜了一下资料,全部总结一下。一、例子 [cpp] view plaincopy ---
- c++类中const/static/const static成员变量初始化
- C++那些细节--static_cast,dynamic_cast,const_casst,reinterpret_cast
- 把字符串转换成浮点数并体现 c++类中的const和static的用法
- 【那些人追的干货】如何正确使用const,static,extern
- C++类的const, static 和inline成员函数(变量)
- C++类中const, static, reference等类型成员的初始化
- C++类中的static和const用法实例教程
- C++类中的const和static
- 《C++程序设计教程》——C++类中的static和const
- C++类的const、static和const static数据成员的初始化