1:不能通過類名來調用類的非靜态成員函數。
錯誤示範:
class Member
{
public:
void init()
{
}
static void output()
{
}
};
int main()
{
Member::init();//✖
Member::output();//✔
}
2:類的對象可以使用靜态成員函數和非靜态成員函數。
1 int main()
2 {
3 Member m;
4 m.init();//✔
5 m.output();//✔
6 }
3:靜态成員函數中不能引用非靜态成員。
class Member
{
public:
void init()
{
}
static void output()
{
cout << x;//✖
}
private:
int x;
};
int main()
{
Member m;
m.output();
}
4:類的非靜态成員函數可以調用用靜态成員函數,反之卻不能。
class Member
{
public:
void init()
{
output();//☆
}
static void output()
{
}
};
int main()
{
Member m;
m.output();
}
5:類的靜态成員變量必須先初始化再使用。
如:
#include<iostream>
using namespace std;
class Height{
private:
static int number;
public:
Height(){
number++;
}
~Height(){
number--;
cout << number <<endl;
}
static void output(){
cout << number <<endl;
}
};
int Height::number = 0;//類的靜态成員變量必須先初始化再使用,不必再加static關鍵字
int main()
{
Height p;
p.output();
return 0;
}
補充:典新23為什麼靜态成員變量要通過類外初始化指派?_百度知道 (baidu.com)
----------------------
當将類的某個資料成員聲明為static時,該靜态資料成員隻能被定義一次,而且要被同類的所有對象共享。各個對象都擁有類中每一個普通資料成員的副本,但靜态資料成員隻有一個執行個體存在,與定義了多少類對象無關。
靜态資料成員的用途之一是統計有多少個對象實際存在。
靜态資料成員不能在類中初始化,實際上類定義隻是在描述對象的藍圖,在其中指定初值是不允許的。也不能在夠造函數中初始化該成員,因為靜态資料成員為類的各個對象共享,那麼每次建立一個類的對象則靜态資料成員都要被重新初始化。
-----------------------
那什麼靜态成員能在類内初始化呢?
能在類中初始化的靜态成員隻有一種,那就是靜态常量成員。
//這樣不行
class A {
private:
static int count = 0; // 靜态成員不能在類内初始化
};
//這樣也不行
class A {
private:
const int count = 0; // 常量成員也不能在類内初始化
};
//但是這樣可以
class A {
private:
static const int count = 0; // 靜态整型常量成員可以在類内初始化,但是 static const float count就不行了
};