類的靜態成員函數

class My1
{
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()是靜態函數。在實例化之前就存在;

但是不可以直接調用非靜態的成員函數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章