【学习笔记】C++之static关键字
一、static修饰对象:表示该对象是静态的.
二、static修饰成员变量
//Example1.
/*===============================================================
* Copyright (C) 2021 All rights reserved.
*
* 文件名称:static.cpp
* 创 建 者:RiSK
* 创建日期:2021年08月10日
* 描 述:
*
* 更新日志:
*
================================================================*/
using namespace std;
#include <iostream>
class Demo
{
public:
Demo(){};//default constructor
Demo(int x,int y);//带参构造函数
int showX();
int a;
static int z;
private:
static int x;
int static y;
};
int Demo::x = 13;//静态成员变量的初始化
int Demo::y = 14;
int Demo::z = 23;
Demo::Demo(int x,int y)
{
this->x = x;//成员变量赋值操作
this->y = y;
}
int Demo::showX()
{
return x;
}
int main()
{
Demo obj(2,3);
Demo obj1;
cout << obj.showX() << endl;
cout << obj1.showX() << endl;
//Demo a;
cout << "obj.z=" << obj.z <<endl;
obj.z += 10;
cout << "obj1.z=" << obj1.z <<endl;
cout << "Demo::z=" << Demo::z <<endl;
//cout << Demo::a <<endl;//错误,a是非静态成员变量
}
1、static修饰成员变量:初始化必须在类体外定义
/*语法结构:数据类型 类名::变量名 = 初值*/
int Demo::x = 13;//静态成员变量的初始化
int Demo::y = 14;
int Demo::z = 15;
2、static作用:改变成员变量作用域,使其与具体对象无关,在同类型的不同对象之间进行数据共享
Demo obj(2,3);//定义一个Demo对象
Demo obj1;//定义另一个Demo对象
cout << obj.showX() << endl;//输出obj对象成员变量x的值
cout << obj1.showX() << endl;//输出obj1对象成员变量x的值
//运行结果为:
//2
//2
//根据结果可以看出,我们并没有对obj1的成员变量x进行赋值操作,obj1对象的变量x值仍被改变
//在main函数中加入如下代码:
cout << "obj.z=" << obj.z << endl;//输出obj对象成员变量z的值
obj.z += 10;//将obj对象的成员变量z 进行加10操作
cout << "obj1.z=" << obj1.z << endl;//输出obj1对象成员变量z的值
//运行结果为:
//obj.z=15;
//boj1.z=25;
//根据结果看出,对obj对象成员变量z进行加操作,obj1对象的成员变量z也随之改变
//体现了static改变成员变量作用域,使其与具体对象无关,在同类型的不同对象之间进行数据共享的特性
3、static修饰的成员变量访问:
//访问方式共有两种
//1. 对象.静态成员变量名
cout << "obj.z=" << obj.z <<endl;
//2. 类名::静态成员变量名 (此种方法不可对非静态成员变量进行访问)
cout << "Demo::z=" << Demo::z << endl;
//cout << Demo::a <<endl;//错误,a是非静态成员变量
三、static修饰成员函数
//Example2.
/*===============================================================
* Copyright (C) 2021 All rights reserved.
*
* 文件名称:static.cpp
* 创 建 者:RiSK
* 创建日期:2021年08月10日
* 描 述:
*
* 更新日志:
*
================================================================*/
using namespace std;
#include <iostream>
class Demo
{
public:
Demo();
Demo(int x,int y);//带参构造函数
static int showX();//声明一个静态成员函数
int showY();
private:
static int x;
int y;
};
int Demo::x = 13;//初始化静态成员变量
Demo::Demo()
{
}
Demo::Demo(int x,int y)
{
this->x = x;//成员变量赋值操作
this->y = y;
}
int Demo::showX()
{
//return this->x;错误:与静态成员函数与具体对象无关,所以不能有this 指针
//return y;
//cout << showY() << endl;
return x;
}
int Demo::showY()
{
return y;
}
//static modified member function ,只在声明的数据类型之前使用static修饰,定义不能写static
//静态成员函数与具体的对象无关
int main()
{
Demo obj(2,3);
cout << obj.showX() << endl;
cout << Demo::showX() << endl;
}
1、static修饰成员函数,只在声明的数据类型前使用static修饰,定义时不能写static,静态成员函数与具体的对象无关
static int showX();//声明一个静态成员函数
int Demo::showX()//定义静态成员函数
{
}
2、静态成员函数与具体的对象无关
3、静态成员函数的使用
Demo obj(2,3);//定义一个obj对象
//调用成员函数的方法:
//1. 对象名.成员函数名()
cout << obj.showX() << endl;
//2. 类名::成员函数名()
cout << Demo::showX() << endl;
4、静态成员函数中,不能有this指针,不能访问类的非静态成员
int Demo::showX()
{
//return this->x;错误:与静态成员函数与具体对象无关,所以不能有this 指针
//return y;//错误,不能访问类的非静态成员变量
//cout << showY() << endl;//错误,不能访问类的非静态成员函数
return x;
}
转载请标明原文出处