VC中静态变量Static

vc中没有强制的数据类型间转换,java和C都有的:

例如:vc中:

                 int a=0xfffe;    //即65534
                 char b=a;        编译不出错

                 str.Format("%d",b);
      MessageBox(str);   //结果为-2

java中:

       int a=0xfffe;    //即65534
                  byte b=a;      编译出错,需要改成byte b=(byte)a


  静态变量(static).静态变量之所以是因为静态,是因为他在整个程序生命周期的地址静止不变。也就是说在整个程序里面只保存有一份拷贝。static关键字允许它在不同的函数调用间保持它的值。如果一个静态变量被访问后值改变,它就会保持新的值。如果这变量再次被访问,它将会维持最新的值
class Test1{
public:
       static  int a;
       const int b;
       Test1():b(10){  

       }

void print1(){
               a++;
               printf("%d,%d\n",a,b);
       }
};

int Test1::a=10;

void main(){

       Test1 t1;
       t1.print1();

       Test1 t2;
       t2.print1();

       Test1 t3;
       t3.print1();
}

结果:11    12     13

在c++中,static静态成员变量不能在类内部初始化。int Test1::a=10;
在c++中,const常量成员变量也不能在类定义处初始化,只能通过构造函数初始化列表进行,并且必须有构造函数。在构造函数中初始化都不行

 

C++中常见的关键字含义:

1. inline:定义内联函数,该关键字是基于定义,如果只在函数声明时给出inline,则函数不会被认为是内联函数,所以必须在函数定义的地方也加上inline,同时inline只是向编译器建议函数以内联函数处理,不是强制的。

2. const:定义常成员,包括const数据成员和const成员函数,const数据成员必须,也只能通过构造函数的初始化列表进行初始化,const成员函数只能访问类的成员,不能进行修改,如果需要修改,则引入下面的mutable关键字。

3.mutable:这个关键字的引入是解决const成员函数要修改成员变量,通常而言,const成员函数只能访问成员变量,不能修改,但是如果成员变量被mutable修饰了,则在const成员函数中可以修改该变量。mutable和const不能同时用于修饰成员变量。

4. static:声明静态成员,包括静态数据成员和静态成员函数,它们被类的所有对象共享,静态数据成员在使用前必须初始化,而静态成员函数只能访问静态数据成员,不能访问非静态数据成员,因为该函数不含有this指针。

5. virtual:声明虚函数,用于实现多态,该关键字是基于声明的。

6. friend:声明友元函数和友元类,该关键字也是基于声明的。

7. volatile:被该关键字修饰的变量是指其值可能在编译器认识的范围外被修改,因此编译器不要对该变量进行的操作进行优化。可以与const同时修饰一个变量。

为什么需要const成员函数?

  我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员(普通成员),,对常对象和常量进行访问。也就是说,这些函数是"只读"函数,而有一些函数要修改类数据成员的值。如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。

原文地址:https://www.cnblogs.com/renyuan/p/2582732.html