WHCSRL 技术网

2021-10-31_m0

C/C++详细介绍static关键字

1.C++ static

  1. static特点:
    1.存放在[数据段]
    2.生命周期一直到[进程]结束
    3.数据只分配-次
  2. static修饰的全局变量作用域在本文件有效
  3. static修饰的变量默值认为0
  4. static修饰成员属性
  5. static修饰的成员属性与类不同空间,所以不能在类内初始化
    类外初始化: 数据类型 类名:: 类内变量名 = ??
    类内:private: static int a;
    类外:int className :: a=0;
    注意:在类内,可通过const修饰static修饰的属性,就可以初始化:
    类内:const static int a=10;

8.static 返回值类型 函数名()
注意:static 修饰的属性和方法都在数据段,函数访问的量也要static
在类内,不是static修饰的变量,在static函数里是错误的。

9.通过static修饰的函数和变量,在类内声明,调用如下:
类内写法:static修饰成员方法
1.实现方式
static成员类型成员名(参数)
例如:
static int show(int a)
{
}
类外写,类内声明为static:
类内: static int show(int a);
类外:int 类名 ::show(int a);

10.类外定义,赋值,初始化:。。。
10.1. static修饰的成员方法不能使用类里面的非静态成员,因为他们不属于同一个空间,this也无法使用。
10.2. static修饰的成员方法可以使用类里面的static修饰的成员属性,或成员方法
10.3.static的主要作用其实是[可以不创建对象],直接通过类名: :成员属性或者成员方法实现例如
class Mat
public:
static void add(){}
static void mul(){};
static int number;
};
int main()
{
Mat::add();
Mat::number ;
}

拓展:C++强制类型转化:
this传递给创建线程函数
Lcdthread*th = static_cast<Lcdthread *>(arg)
th=this


```cpp

#include <iostream>
using namespace std;
class AA{
public:
       AA(){cout<<"AA: "<<"a="<<a<<endl;
       
       };
       static void fun();
       
private:
       int a;
       static int b;
};
int AA:: b=12;

void AA::fun()
{    
       cout<<"b="<<b<<endl;
//cout<<"a="<<AA::a<<endl; 错误:a和static修饰静态变量不在一个空间
       //修改方法
}
class BB:public AA
{

};
int main(int argc, char const *argv[])
{
       AA st; //主要用于初始化,执行构造函数
       
       //不需要创建对象就能使用
       AA::fun(); //静态函数直接访问
       BB sy;
       return 0;
       
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

下回见