【学习笔记】C++之static关键字

本文详细介绍了C++中static关键字的作用,包括修饰对象、成员变量和成员函数。通过示例代码展示了static如何实现数据共享,以及静态成员函数的特点,如与对象无关、无法访问非静态成员等。同时,文中强调了静态成员变量必须在类体外初始化,并探讨了静态成员函数的使用场景和限制。
摘要由CSDN通过智能技术生成

【学习笔记】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;
}

转载请标明原文出处

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值