静态成员函数可以不以捆绑的方式调用,静态成员函数被调用时,没有当前对象的信息,所以静态成员函数不能访问数据成员,只能访问静态数据成员。但可以通过传递对象参数进去从而访问成员。
// 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;
}