靜態成員函數可以不以捆綁的方式調用,靜態成員函數被調用時,沒有當前對象的信息,所以靜態成員函數不能訪問數據成員,只能訪問靜態數據成員。但可以通過傳遞對象參數進去從而訪問成員。
// class_test.cpp : 定義控制檯應用程序的入口點。
//
#include <iostream>
using namespace std;
class Student{
private:
string name;
static int number;
public:
void set(string str){
name = str;
++number;
}
static void printNumber(){
cout<<number<<"total number\n";
}
void print(){
cout << name.c_str() << "-> studnets are " << number << " numbers\n" << endl;
}
};
int Student::number = 0;
void fn(){
Student s1;
s1.set("Jenny");
Student s2;
s2.set("Randy");
s1.print();
s1.printNumber();
}
int main()
{
Student s;
s.set("Smith");
fn();
s.print();
Student::printNumber();//**只有靜態成員函數纔可以這樣調用,普通成員函數只能:對象.函數**。
return 0;
}
static int printNumber(){
cout<<name<<number<<"total numbers"<<endl;
}
//編譯不通過,因爲,靜態成員函數不能訪問非靜態成員變量。
可以使用如下傳遞對象參數的途徑訪問:
static int printNumber(Student &s){
cout<<"my name is<<s.name<<endl;
cout<<s.number<<endl;
}