【C++

您所在的位置:网站首页 什么是静态类 【C++

【C++

2024-07-11 22:24| 来源: 网络整理| 查看: 265

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C++、数据结构、音视频🍭 ⏰发布时间⏰:2024-06-16 00:05:01

本文未经允许,不得转发!!!

目录 🎄一、概述🎄二、静态(static)数据成员🎄三、静态(static)成员函数🎄四、总结

在这里插入图片描述

🎄一、概述

在C++编程中,有时需要定义一些成员是属于整个类的,而不是属于某个对象。例如:定义一个数据成员来记录这个类创建了多少个对象。

C++的静态(static)成员就是属于整个类而非属于某个对象的。本文介绍下面几个内容: 1、什么是C++的静态数据成员、静态成员函数? 2、静态数据成员、静态成员函数分别由什么特点? 3、怎么声明、定义静态数据成员、静态成员函数? 4、怎么使用 静态数据成员、静态成员函数?

在这里插入图片描述

🎄二、静态(static)数据成员

静态(static)数据成员:是指在类中声明时使用关键字static修饰的数据成员。 静态数据成员可以是 public 的或 private 的。本质上就是一个全局变量,只不过受 类名作用域 和 权限 控制。

怎样声明、定义静态数据成员? 在类中声明时使用static关键字修饰,一般在类外定义并初始化,类外定义时不需要加static。参考下面代码:

class CDate { public: static int s_ObjCount; // 静态数据成员声明 ... private: static int s_ObjCount2; ... }; // 静态数据成员定义 int CDate::s_ObjCount = 0; int CDate::s_ObjCount2= 0;

静态数据成员的几个特点:

1、静态数据成员属于整个类,而不属于某个对象,所有对象共享静态数据成员;2、静态数据成员一般在类内声明、在类外定义,声明时加static修饰,定义时不加static;3、静态数据成员定义后位于程序的全局数据区,并一直存在于程序的整个生命周期中;4、静态数据成员可以是 public 的或 private 的 public 的静态数据成员可以使用类名作用域直接访问,private 的静态数据成员只能在类内访问;public 的静态数据成员可以使用类的对象、引用或者指针来访问;成员函数可以直接使用静态数据成员,而不需要作用域运算符; 5、静态数据成员的类型可以就是它所属的类类型。 而非静态数据成员只能声明成它所属类的指针或引用。

下面通过代码来理解这些特点:

// g++ 17_static_member_data.cpp #include using namespace std; class CDate { public: CDate(int year, int mon, int day) { m_year = year; m_mon = mon; m_day = day; // 成员函数可以直接使用静态数据成员,而不需要作用域运算符 s_ObjCount++; s_ObjCountPrv++; } public: static int s_ObjCount; // 类内声明静态数据成员 private: static int s_ObjCountPrv; // 类内声明静态数据成员 static CDate s_Date; // 静态数据成员可以用所属类类型 //CDate date; //报错:field ‘date’ has incomplete type CDate *pDate; // 非静态数据成员,只能声明成所属类的指针或引用 int m_year; int m_mon; int m_day; }; static int gCount = 0; // 类外定义静态数据成员 int CDate::s_ObjCount = 0; int CDate::s_ObjCountPrv= 0; int main() { CDate::s_ObjCount = 0; // public静态数据成员,使用类名作用域直接访问 //CDate::s_ObjCountPrv = 0; // 报错:private静态数据成员只能在类内访问 CDate date(2024,06,14); date.s_ObjCount = 0; // public静态数据成员,可以使用类的对象访问 CDate rDate = date; rDate.s_ObjCount = 1; // public静态数据成员,可以使用类的引用访问 CDate *pDate = &date; pDate->s_ObjCount = 1; // public静态数据成员,可以使用类的指针访问 cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3