一文详解C++静态成员变量和静态成员函数
一、静态变量回顾
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
void test01()
{
// 生命周期是整个程序 作用域是该函数
static int a = 10;
}
int main()
{
test01();
return EXIT_SUCCESS;
}
二、静态成员变量
静态成员变量的生命周期是整个程序 作用域在类内
class Maker
{
public:
// 静态成员变量的生命周期是整个程序 作用域在类内
static int a;
};
静态成员变量的生命周期是整个程序,作用域在类内部
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
class Maker
{
public:
Maker()
{
}
public:
// 静态成员变量的生命周期是整个程序 作用域在类内
static int a;
};
// 静态成员变量要在类内声明 类外初始化
int Maker::a = 100;
int main()
{
return EXIT_SUCCESS;
}
静态成员变量属于类,不属于对象,是所有对象共享,所以静态成员变量可以使用类进行访问,也可以使用对象进行访问
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
class Maker
{
public:
Maker()
{
}
public:
// 静态成员变量的生命周期是整个程序 作用域在类内
static int a;
};
// 静态成员变量要在类内声明 类外初始化
int Maker::a = 100;
void test01()
{
Maker m;
cout << Maker::a << endl;
cout<<m.a<<endl;
}
int main()
{
test01();
return EXIT_SUCCESS;
}
三、静态成员函数
静态成员函数只能访问静态成员变量,不可以访问普通的成员变量,普通的成员函数也可以访问静态成员变量
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
class Maker
{
public:
Maker()
{
}
// 静态成员函数只能访问静态成员变量 不能访问不同成员变量
static void setA(int A)
{
// 尝试使用静态成员函数对静态成员变量进行赋值 可以改变
a = A;
}
public:
// 静态成员变量的生命周期是整个程序 作用域在类内
static int a;
};
// 静态成员变量要在类内声明 类外初始化
int Maker::a = 100;
void test02()
{
cout << Maker::a << endl;
Maker::setA(300);
cout << Maker::a << endl;
}
int main()
{
test02();
return EXIT_SUCCESS;
}
#include<iostream>
using namespace std;
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)
class Maker
{
public:
Maker()
{
}
void getA()
{
cout<<a<<endl;
}
// 静态成员函数只能访问静态成员变量 不能访问不同成员变量
static void setA(int A)
{
// 尝试使用静态成员函数对静态成员变量进行赋值 可以改变
a = A;
}
public:
// 静态成员变量的生命周期是整个程序 作用域在类内
static int a;
};
// 静态成员变量要在类内声明 类外初始化
int Maker::a = 100;
void test02()
{
cout << Maker::a << endl;
Maker::setA(300);
cout << Maker::a << endl;
Maker m;
m.getA();// 普通成员函数访问静态成员变量
}
int main()
{
test02();
return EXIT_SUCCESS;
}
四、静态成员也有权限,如果是私有权限,那么类外也是不可以访问
class Maker3 {
private:
static void func()
{
cout << "a3 = " <<a3<< endl;
}
private:
static int a3;
};
int Maker3::a3 = 100;// 即使是私有的静态成员变量 类外部初始化也是可以的
void test03()
{
Maker3::func();// 不可以访问 但是如果将静态成员函数改为public权限 就可以进行访问
}
int main()
{
test02();
return EXIT_SUCCESS;
}
五、const修饰的静态成员变量最好在类内部,类外也可以初始化
class Maker4 {
public:
const static int a = 20;
const static int b;
};
const int Maker4::b = 8;