++待用資料成員/靜態函數成員總結
一、待用資料成員
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;