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参数传递给该函数。
如: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参数传递给该函数。
相关文章推荐
- c++的const和static区别
- C++知识点总结(上):指针和引用,static关键字,const关键字,malloc\free和new\delete的区别等
- C++中const,define和static的区别
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- static const extern在C与C++中的区别
- 温习static和const在C和C++的区别
- c++类型转换static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较,显示转换,隐式转换
- c/c++中const与static的区别
- const和static在c和c++环境下的区别
- C++带const、static和#define关键字的变量定义的区别
- C/C++中static、const的区别
- C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- C++中const和static的区别(转)
- C/C++中static用法详解及其与const的区别
- C++ static const 及 声明和定义的区别
- 【C++】static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- c/c++中const、static的区别
- 转C++中static_cast, dynamic_cast, const_cast用法/使用情况及区别解析
- C语言与C++中static,const 关键字的区别