您的位置:首页 > 编程语言 > C语言/C++

C,C++的静态函数及static与const的区别

2013-04-29 11:29 246 查看
1.类外部定义的静态函数

如:static void fun(){};说明该函数的为全局静态函数,它只能在文件所在的编译单位内使用,不能在其它编译单位内使用。以及下面的main函数

public static void main(String arg[])

{}//只能在本文件中使用

2.类中的静态成员函数

如:protected class Class1{

privated char name;

public const int a;//不能在类内部初始化

public static int count;//定义静态成员变量,不能在类内部初始化,为该类的公用变量,在第一次使用时被初始化,对于该类的所有 对象来说,static成员变量只有一份。在使用是可通过Class1::count方法改变count值

public static const int a1;

public const static int a2;//与static const二者作用相同

public:

static void Output(){//定义的静态成员函数,函数中只能访问类中定义的静态成员变量,不能访问非静态成员

cout<<count<<endl; //比如cout<<name<<endl;错误

}

void funcAC(string inString) const{

cout<<count<<endl;该函数不能修改该类中的成员变量的值,如对name="name1";则会出错。

}

}

3.static与const的区别

(1)存储位置

static变量存放在静态区(全局区)中,也存放全局变量,数据在内存中,程序结束后由系统释放。

const存放在常量存储区中,且C++中该存储区中的数据存放在代码段中,不占内存。不过C语言的const仍是存在内存中。

(2)定义方式

static在类外部定义(无论是否是在函数中定义的)时说明该变量只能在当前文件中作为全局变量使用。

如:int fun(){

static int a=1;

a++;}//静态变量a在第一次调用该函数时初始化为1,并自增1,而第二次调用该函数后会直接将上次自增之后的a+1,不会再初始化a.

static在类中定义的变量如1,2所示。

const主要目的是防止成员函数修改对象的内容,定义的常量在超出其作用域之后其空间会被释放,数据成员在类中
初始化时只能在类的构造函数的初始化列表中进行,而在类外部初始化时如2中的const int a;应加上const修饰符 而static变量不需要加修饰符. 如const
int Class1::a=10;

类中的函数定义的后面添加const且只能在类的成员函数后加const:如2中的void funcAC(string inString) const{}函数。

类外部和内部的函数均可在函数名前添加const,如

int a;

int &fun(){

return a;

}

fun()=100即对a赋值;若在函数前加上const后表明该函数的返回值是常量,不可使用fun()=100进行赋值修改。

4.const作为形参

在函数参数传递时,如果形参是非const非引用的参数,则可以将const或非const参数传递给该函数,如果函数形参是非const引用形参,则不能传递const实参。如果是const引用形参,则也可以将const或非const参数传递给该函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: