IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++新特性43:静态成员函数 -> 正文阅读

[C++知识库]C++新特性43:静态成员函数

学习完静态成员变量,趁热打铁,学习静态成员函数,其基本性质及使用如下:

	//静态成员函数
	//(1)在头文件的函数名前面加上关键字static
	//(2)函数内部不能访问普通成员变量,只能访问普通成员变量
	//(3)本质是静态成员函数中没有this指针
	//(4)静态成员函数本质上就是带类域的全局函数,可以避免名称冲突的问题
	//(5)在线程及回调函数中会用到静态成员函数,用作线程的回调函数的声明

项目结构如下:
在这里插入图片描述
代码及注释如下:
CIntreger.h:

class CInteger
{
public:
	CInteger(int nNumber) {
		m_nNumber = nNumber;
	}

	int GetNumber()const;
	void SetNumber(int nNumber) {
		m_nNumber = nNumber;
	}
	//静态成员函数
	//(1)在头文件的函数名前面加上关键字static
	//(2)函数内部不能访问普通成员变量,只能访问普通成员变量
	//(3)本质是静态成员函数中没有this指针
	//(4)静态成员函数本质上就是带类域的全局函数,可以避免名称冲突的问题
	//(5)在线程及回调函数中会用到静态成员函数,用作线程的回调函数的声明
	static void foo();
	 
	//静态成员变量
	//(1)要单独的实现写在类外(cpp中,不写在.h中)
	//(2)默认会用0对该成员进行初始化
	//(3)静态成员变量是不同的对象(同一个类)公用的,不占用某个对象的大小
	//(4)本质:带类域的全局变量,虽然是全局变量但是有类域的限制,解决名称限制
	static int m_nStatic;

private:
	int m_nNumber;

};

CIntreger.cpp:

#include "CIntreger.h"
#include <iostream>
int CInteger::GetNumber()const
{
	return m_nNumber;
}

//静态成员变量的实现,若没有的话报错类似写了声明没写实现
//一般不写在.h文件中,否则会被重复调用两次报错
//若没有初始化,默认会用0对该成员进行初始化
int CInteger::m_nStatic=123;

void CInteger::foo() 
{

	printf("CInteger::foo()");

	//m_nNumber = 1;//编译后显示对非静态成员“CInteger::m_nNumber”的非法引用
	m_nStatic = 2;

	//没有this指针就无法访问普通成员变量
	//void* p = this;//报错:“this”只能用于非静态成员函数内部;只能在非静态成员函数或非静态数据成员初始值设定项的内部引用


}

TestC11.cpp:


#include <iostream>
#include "CIntreger.h"

int main()
{
	CInteger i = 1;

	i.foo();

	//因为静态成员函数没有this指针,因此也不需要依赖对象,故可以写成如下:
	CInteger::foo();

	//不用创建对象就可以创建静态变量,因为它是与类相关的,一个类有一个
	//属于类而不单属于某个对象,是类公有的
	//CInteger::表示在类域范围内
	CInteger::m_nStatic = 1;

	

	//CInteger i1 = 1;
	//CInteger i2 = 1;

	//类的size只有4字节,为非静态变量的m_nNumber
	int nSize = sizeof(CInteger);
	 
	/*i.m_nStatic = 123;*/

	//分别获取两个静态变量的地址
	//int* pStatic1 = &i1.m_nStatic;
	//int* pStatic2 = &i2.m_nStatic;

	return 0;
}


视频讲解地址:B站视频

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-22 10:47:24  更:2021-10-22 10:49:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:54:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码