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++static成员 -> 正文阅读

[C++知识库]c++static成员

小知识:

~static成员不属于对象,属于类--->所有对象共有--->调用可以不需要对象(当然也可以用对象调用)

~static成员依旧受权限限定 (public、protected、private)

static数据成员

·在类中直接初始化是错误的--->不能采用初始化参数列表方式初始化<--->注意和普通数据写法的区别

class Student
{
public:
	Student(string name=""):name(name),num(num){}  /*报错:num不是类Student的非静态成员函数*/  
protected:
	string name;
	static int num;

};

·用static修饰数据成员,必须在类外初始化,在类外初始化不再需要static修饰,但是受类名限定--->定义写在protected属性会报错

class Student
{
public:
	Student(string name=""):name(name){}
	static int num;
protected:
	string name;
	
};
//必须在类外初始化,此时不再需要static修饰,但是需要类名限定
int Student::num = 1;
int main(){

    //静态数据成员访问,可以不需要对象--->但是受类名限定
	cout <<Student::num << endl;

}

?什么叫做共有?---->深刻认识共有的概念<--->所有对象用的都是用一份

class Student
{
public:
	Student(string name = "") :name(name)
	{
		num++;
	}
	static int num;
protected:
	string name;

};
int Student::num = 1;
int main()
{
	cout << Student::num << endl;
	//理解什么叫做共有的
	Student mm("mm");
	//静态数据成员通过对象去访问
	cout << mm.num << endl;      //此时num等于2
	Student array[3];			     //5
	Student* p = new Student("newMM");	 //6
	cout << Student::num << endl;
	cout << p->num << endl;
	cout << mm.num << endl;
	delete p;
	p = nullptr;


}
/*输出*/

/*1
  2
  6
  6
  6 */

static成员函数

~static写在函数前面即可

~调用非静态数据成员 必须要指定对象

小知识:

????????~没有static构造函数

? ? ? ? ~可以在类中声明,在类外实现/在类中实现,不需要static修饰词,需要类名限定

怎么调用非静态数据成员--->必须指定对象

ps:静态函数调用静态数据没有要求

#include <iostream>
using namespace std;
class Student
{
public:
	Student(string name=""):name(name) 
	{
		num++;
	}
	static void printStudent();
	static void printData(Student& mm) //调用非静态成员--->指定一个对象进来,就可以调用了
	{
		cout << mm.name <<" "<<num <<endl;//静态数据可以用对象指定,也可以不用对象指定

	}
protected:
	string name;
public:
	static int num;
};

int Student::num = 1;

void Student::printStudent() 
{
	/*调用非静态数据成员,必须要指定对象--->否则不知道这个属性属于哪个对象
	cout << name << endl;  printStudent()这个函数不采用对象去调用,name就没有来源*/
	//静态数据可以直接调用,没什么要求
	cout << num << endl;
	cout << "静态成员函数" << endl;
}
int main() 
{   
    
//调用静态成员函数--->不需要对象
	Student::printStudent();
//调用非静态数据成员--->通过创建一个对象的方式调用
    Student mm("mm");
	mm.printStudent();
//调用非静态数据成员--->通过传参的方式(传入对象的参数)调用
	Student::printData(mm);
	return 0;
}
/*输出*/

/*1
  静态成员函数

  2
  静态成员函数

  mm   2     */

static对象

生命周期到程序关闭--->释放是最后释放

相关内容可以看看这篇博客:c++构造、析构顺序问题_考拉爱睡觉鸭~的博客-CSDN博客

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 07:56:38  更:2021-11-25 07:58:28 
 
开发: 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 8:44:09-

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