2021-10-31_m0
C/C++详细介绍static关键字
1.C++ static
- static特点:
1.存放在[数据段]
2.生命周期一直到[进程]结束
3.数据只分配-次 - static修饰的全局变量作用域在本文件有效
- static修饰的变量默值认为0
- static修饰成员属性
- 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
下回见
推荐阅读