{
private:
int a;
static b;
public:static void set(int a)
{
this->a = a;//此時this沒有實例 是不存在的。
}
My1();
~My1();
My2 mymm;
};
My1::b;//這樣是可以的,因爲b已經存在
以上程序是錯的,因爲靜態成員函數是不可以對非靜態的成員變量進行操作的。錯誤提示如下
那麼爲什麼不可以對非靜態成員進行操作呢?
static 成員,是在類的實例沒有創建前就存在的。
其他的成員必須是在類的實例創建才存在。
static void set(int a)在類實例化之前就已經存在,而成員變量a只有在實例化只有纔會被分配內存。
這個時候this指針是沒有指向任何實例的,可以認爲是NULL,另外this是私有的指針,不可能在外部使用的。
class My1
{
private:
int a;
public:
static void run()
{
system("notepad");
}
My1();
~My1();
My2 mymm;
};
void main()
{
My1 mym;
My1::run();
system("pause");
}
以上My1::run();的調用是可以的,這種調用時不需要通過實例化的,因爲run()是靜態函數。在實例化之前就存在;
但是不可以直接調用非靜態的成員函數。