c++中static关键字的应用

发布时间:2020-06-25 21:24:16 作者:Leah
来源:亿速云 阅读:176

本篇文章给大家分享的是有关c++中static关键字的应用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、静态变量

与C语言一样,可以使用static说明自动变量。根据定义的位置不同,分为静态全局变量和静态局部变量。

#include<iostream>
using namespace std;

//全局静态变量
static int glos_s=10;
//全局变量
int glos_a=10;

void f(){
  int a=1; //局部变量a
  static int fs=1; //静态局部变量fs,完成初始化。
  a+=2;
  fs+=2;
  glos_s+=10;
  glos_a+=10;
  cout<<"在f中:局部变量a="<<a<<" 静态局部变量fs="<<fs<<" 全局变量glos_a="<<glos_a<< " 全局静态变量glos_s=" << glos_s <<endl;
}
int main(){
   f(); //在f中:局部变量a=3 静态局部变量fs=3 全局变量glos_a=20 全局静态变量glos_s=20
   f(); //在f中:局部变量a=3 静态局部变量fs=5 全局变量glos_a=30 全局静态变量glos_s=30
  return 0; 
}

二、类中的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关键字的应用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

推荐阅读:
  1. C++中栈的应用
  2. static关键字在php中的应用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++ static

上一篇:怎么删除mysql中的数据表

下一篇:11g R2 rac linstener 监听配置

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》