时间:2021-05-19
一、静态变量
与C语言一样,可以使用static说明自动变量。根据定义的位置不同,分为静态全局变量和静态局部变量。
二、类中的static
1、定义类的静态成员
类的静态成员有两种:静态成员变量和静态成员函数。在类体内定义类的成员时,
在前面添加static关键字后,该成员即成为静态成员。
2、类静态成员的使用
访问静态成员时,成员前面既可以用类名作前缀,也可以使用对象名或对象指针作前缀。这与访问类成员时仅能使用对象名或对象指针作前缀是不同的。访问类静态成员的一般格式如下:
类的静态成员函数没有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关键字的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Java的static关键字和C/C++语言的关键字有所不同:一旦在Java里使用了static关键字,那么这样的内容不再属于对象自己,而是属于类本身的,所以凡
前言static是c++的关键字,顾名思义是表示静态的含义。它在c++中既可以修饰变量也可以修饰函数。那当我们使用static时,编译器究竟做了哪些事情呢?早先
今天看博文时,看到了c++的static关键字的一些总结,还涉及到了一些代码的存储位置,为了有时间的时候能够看一下,还是自己把它给摘抄下来吧。C++的stati
Struct和Class的区别今天这篇博文主要讲解在C++中关键字struct和class的区别。这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解。从语
静态数据成员是在一个类中用关键字static声明的数据成员。在C++中,一般使用静态成员来代替C语言的全局变量,以达到数据共享。C和C++的全局变量有一定的局限