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