静态成员...

静态成员包括静态成员变量和静态成员函数。

c++如果中希望数据在多个对象之间共享,有两种方案,一种是用全局变量,另一种用类的静态成员变量,类的静态成员变量更安全。

#include<iostream>
using namespace std;

class CGirl
{
public:
	string m_name;
	int m_age;
	CGirl(const string& name, int age) { m_name = name; m_age = age; }
	void showname() { cout << "name is : " << m_name<<endl; }
	void showage() { cout << "age is : " << m_age << endl; }
	

};
int main() {
	CGirl g1("zhongge", 19);
	g1.showname();
	g1.showage();
	return 0;
}
name is : zhongge
age is : 19

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 18344)已退出,代码为 0。
按任意键关闭此窗口. . .

这样好好的,但是你要是把int age改成static int age让它成为静态成员。就报错了。

静态成员变量不会在创建对象的时候初始化,必须在程序的全局区用代码清晰的初始化(用范围解析运算符::)

#include<iostream>
using namespace std;

class CGirl
{
public:
	string m_name;
	static int m_age;
	CGirl(const string& name, int age) { m_name = name; m_age = age; }
	void showname() { cout << "name is : " << m_name<<endl; }
	void showage() { cout << "age is : " << m_age << endl; }
	

};

int CGirl::m_age = 8;
//这行代码必须放在全局区!

int main() {
	CGirl g1("zhongge", 19);
	g1.showname();
	g1.showage();
	return 0;
}

普通对象的成员变量需要先创建对象,然后才能访问,静态成员变量不一样,不创建对象也可以访问。只要在静态成员前面加类名和俩::就可以直接访问,例如:

int CGirl::m_age = 8;
int main() {
	cout << "CGirl::m_age = " << CGirl::m_age << endl;
	CGirl g1("zhongge", 19);
	g1.showname();
	g1.showage();
	return 0;
}
CGirl::m_age = 8
name is : zhongge
age is : 19

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 6620)已退出,代码为 0。
按任意键关闭此窗口. . .

———————————————————————————————————————————

静态成员函数:

不创建对象也可访问静态成员函数。

#include<iostream>
using namespace std;

class CGirl
{
public:
	string m_name;
	static int m_age;
	CGirl(const string& name, int age) { m_name = name; m_age = age; }
	void showname() { cout << "name is : " << m_name<<endl; }
	static void showage() { cout << "age is : " << m_age << endl; }
	

};
int CGirl::m_age = 8;
int main() {
	CGirl::showage();
	cout << "CGirl::m_age = " << CGirl::m_age << endl;
	CGirl g1("zhongge", 19);
	g1.showname();
	g1.showage();
	return 0;
}

运行也没问题

age is : 8
CGirl::m_age = 8
name is : zhongge
age is : 19

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 17032)已退出,代码为 0。
按任意键关闭此窗口. . .

如果把类的成员声明为静态的,就可以把他与类的对象独立开来(静态成员不属于对象)。

——————

与全局变量和全局函数相比,类的静态成员还具备类的性质。

用类创建出来的对象可以访问静态成员。

#include<iostream>
using namespace std;

class CGirl
{
public:
	string m_name;
	static int m_age;
	CGirl(const string& name, int age) { m_name = name; m_age = age; }
	void showname() { cout << "name is : " << m_name<<endl; }
	static void showage() { cout << "age is : " << m_age << endl; }
	

};
int CGirl::m_age = 8;
int main() {

	CGirl g1("zhongge", 19),g2("ouge",20),g3("zhuge",18);
	g1.showname();
	g1.showage();
	g2.showname();
	g2.showage();
	g3.showname();
	g3.showage();

	CGirl::showage();
	cout << "CGirl::m_age=" << CGirl::m_age << endl;
	return 0;
}
name is : zhongge
age is : 18
name is : ouge
age is : 18
name is : zhuge
age is : 18
age is : 18
CGirl::m_age=18

C:\Users\代伟业\Desktop\C++\初始化列表\this指针\x64\Debug\this指针.exe (进程 18752)已退出,代码为 0。
按任意键关闭此窗口. . .

这三个对象的姓名是不同的,因为姓名成员不是静态变量,而全部对象的年龄都是18,因为他们共享一个静态变量。

------------------------------------------------------------------------------------------------------------

在静态成员函数中只能访问静态成员不能访问非静态成员。

————————————————————————————————————

静态成员函数中没有this指针,因为他不属于对象,当然没有this指针。

——————————————————————————————————————

在非静态成员函数和静态成员函数在一个类里边,访问比较方便,不用加 类名::直接访问就行。

——————————————————————————————————

私有静态成员在类外无法访问

#include<iostream>
using namespace std;

class CGirl
{
public:
	string m_name;
	//static int m_age;
	CGirl(const string& name, int age) { m_name = name; m_age = age; }
	void showname() { cout << "name is : " << m_name<<endl; }
	static void showage() { cout << "age is : " << m_age << endl; }
private:
	static int m_age;
};
int CGirl::m_age = 8;
int main() {
	cout << "CGirl::m_age=" << CGirl::m_age << endl;
	return 0;
}

相关推荐

  1. 静态成员...

    2024-06-18 10:12:02       7 阅读
  2. 实例成员静态成员

    2024-06-18 10:12:02       6 阅读
  3. C++静态成员数据

    2024-06-18 10:12:02       45 阅读
  4. 5.C++静态成员

    2024-06-18 10:12:02       31 阅读
  5. C++_静态成员变量介绍

    2024-06-18 10:12:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 10:12:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 10:12:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 10:12:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 10:12:02       18 阅读

热门阅读

  1. 架构模式——分层架构

    2024-06-18 10:12:02       8 阅读
  2. MySQL:emoj表情录入

    2024-06-18 10:12:02       8 阅读
  3. 软件测试全面指南:提升软件质量的系统流程

    2024-06-18 10:12:02       9 阅读
  4. Spring Boot高级配置与自定义Starter详解

    2024-06-18 10:12:02       5 阅读
  5. Android 面试题

    2024-06-18 10:12:02       4 阅读
  6. WDF驱动开发-注册表项

    2024-06-18 10:12:02       8 阅读
  7. 15.2 测试-网格测试、基准测试与测试覆盖率

    2024-06-18 10:12:02       6 阅读