1.靜態成員函數可以用普通函數指針儲存,普通成員函數必須用類函數指針儲存
class A
{
public:
static void fun()
{
cout << "hello world" << endl;
}
public:
void fun2()
{
}
};
int main()
{
void(*p)() = &A::fun;//用普通函數指針,正確
void (*p1)() = &A::fun2;//用普通函數指針,錯誤
void(A::*p2)() = &A::fun2;//正確,用類的函數指針
void(A::*p3)() = &A::fun;//錯誤,靜態成員函數用類函數指針
}
2.靜態成員函數不可以調用非靜態成員函數原因有二,其一靜態成員函數優於非靜態成員函數生成,在編譯的時候靜態成員函數已經生成,其二靜態成員函數不含this指針
class A
{
public:
static void fun()
{
cout << "hello world" << endl;
fun2();//錯誤,靜態成員函數不能調用普通成員函數;
}
public:
void fun2()
{
fun();//正確,普通成員函數可以調用靜態成員函數
}
};
3.靜態成員函數不可以同時聲明爲 virtual、const、volatile函數。
class A
{
public:
static void fun()const//錯誤
{
cout << "hello world" << endl;
}
static virtual void fun2()//錯誤
{
}
volatile static void fun3()//錯誤
{
}
public:
void fun2()
{
}
};
4.在未創建任何對象時,靜態成員函數依舊可以調用
class A
{
public:
static void fun()
{
cout << "hello world" << endl;
}
public:
void fun2()
{
}
};
int main()
{
A::fun();//靜態成員函數儲存在數據段,當類還未實例化是依舊可以調用
return 0;
}
如有不足,希望指正。
本文出自 “pawnsir的IT之路” 博客,請務必保留此出處http://10743407.blog.51cto.com/10733407/1749774