`

C++静态数据成员/静态函数成员总结

 
阅读更多

++静态数据成员/静态函数成员总结

一、静态数据成员
1.几种错误用法总结
class A
{
static int a;
void test()
{
int b = a;//错误,因为没有定义a,会提示找不到a
}
}
class A
{
static int a = 2;//错误,非const静态数据成员不能在类体中初始化
}
class A
{
static const int a = 2;
void test()
{
int b = a;//错误,虽然static const成员变量可以再类体中初始化,但仍需
要在类外定义,且不能再次初始化
}
}
const A::a[4];
class A
{
static const char a[4] = "err";//错误,只有有序的const静态数据成员可在类
体中初始化
}
2.正确用法例子:
int A::a = 2;
const int A::b;
const int A::c("err");
class A
{
static int a;
static const int b = 2;
static const char c[5];
}
3.可以通过const方法修改静态数据成员的值。
如果是public静态数据成员,也可以通过对象或者类域修改。
4.静态数据成员所有类共享,包括子类
5.不要在头文件中定义静态数据成员,否则可能会出现多次定义情况。
6.静态数据成员可以成为成员函数的可选参数,而普通数据成员则不可以
7.静态数据成员的类型可以是所属类的类型,而普通数据成员则不可以。普通数据成员
的只能声明为所属类类型的指针或引用
class A
{
static A a;//可以
A b;//不可以
}
二、静态函数成员
1.只能访问静态数据成员
2.静态成员函数不能同时声明成const, virtual,volatile类型。
3.静态成员函数的地址可用普通函数指针储存,而普通成员函数地址需要用类成员函数
指针来储存。
class A
{
static int func1();
int func2();
}
int (*psf)() = &A::func1;
int (A::*pf)() = &A::func2;

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics