类的静态成员函数没有this指针,不能在静态成员函数内访问非静态的成员,即通常情况下,类的静态成员函数只能处理类的静态成员变量。静态成员函数内也不能调用非静态成员函数。
#include<iostream>
using namespace std;
class Student{
public:
int id;
string name;
static int money;
static void printlnMoney(Student &stu);
};
//静态成员必须在类体外初始化,并且不能在类体内赋值
int Student::money=10000;
//静态成员函数的实现
void Student::printlnMoney(Student &stu){
cout << "name:" << stu.name <<" money:" << stu.money << endl;
}
int main(){
Student stu;
stu.id=1;
stu.name="小米";
//使用对象调用静态成员
stu.printlnMoney(stu);//name:小米 money:10000
Student *stu2=new Student();
stu2->id=1;
stu2->name="美团";
//使用指针调用静态成员
stu2->printlnMoney(*stu2);//name:美团 money:10000
//使用类名调用静态成员
Student::money=50000;
Student::printlnMoney(*stu2);//name:美团 money:50000
Student::printlnMoney(stu);//name:小米 money:50000
return 0;
}
3、普通成员与静态成员
对于普通成员变量,每个对象有各自的一份,而静态成员变量只有一份,被同类所有对象共享。普通成员函数一定是作用在某个对象上的,而静态成员函数并不具体作用在某个对象上。
访问普通成员时,要通过“对象名.成员名”等方式,指明要访问的成员变量是属于哪个对象的,或要调用的成员函数作用于哪个对象;
访问静态成员时,则可以通过“类名::成员名”的方式访问,不需要指明被访问的成员属于哪个对象或作用于哪个对象。
因此,甚至可以在还没有任何对象生成时就访问一个类的静态成员。非静态成员的访问方式其实也适用于静态成员,也就是可以通过“对象名.成员名”的方式访问,效果和“类名::成员名”这种访问方式没有区别
在通常情况下,除一种情况外,类的成员函数之间是允许互相调用的。具体来说,静态函数与静态函数之间、非静态函数与非静态函数之间是可以相互调用的,非静态成员函数内可以调用静态成员函数,但静态成员函数内不能调用非静态成员函数
以上就是一文读懂c++之static关键字的详细内容,更多关于c++ static关键字的资料请关注易采站长站其它相关文章!










