类与对象(三)--static成员、友元

文章目录

1.static成员

1.1概念🎧

🔎 static关键字用于声明类的静态成员变量和静态成员函数 。静态成员变量与特定的类相关联 ,而不是与类的实例相关联。它们的值对于类的所有实例都是共享的。另外,静态成员变量一定要在类外进行初始化

面试题✒️

实现一个类,计算程序中创建出了多少个类对象

cpp 复制代码
class A
{
public:
	A() {
		++_scount;
	}
	A(const A& t) {
		++_scount;
	}
	~A() {
		--_scount;
	}
	static int GetACount() {
		return _scount;
	}
private:
	static int _scount;
};

int A::_scount = 0;//初始化


void TestA()
{
	cout << A::GetACount() << endl;
	A a1, a2;
	A a3(a1);
	cout << A::GetACount() << endl;
}

✋以上代码中的A类成员变量用一个static修饰的变量_scount来记录实例化对象的个数。如果一个对象调用构造函数就会使_scount++,调用析构函数清理时又会使_scount--

1.2static的特性🎧

1️⃣. 静态成员为所有类对象所共享 ,不属于某个具体的对象,存放在静态区

2️⃣. 静态成员变量必须 在类外定义,定义时不添加static关键字 ,类中只是声明

3️⃣. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问

4️⃣. 静态成员函数没有隐藏的this指针,不能访问任何非静态成员

5️⃣. 静态成员也是类的成员,受public、protected、private 访问限定符的限制

1.3思考🎧

1.静态成员函数可以调用非静态成员函数吗?不行

显然,静态成员函数不与特定的类实例相关联,不访问非静态成员变量或非静态成员函数,因为它们没有 this 指针

  1. 非静态成员函数可以调用类的静态成员函数吗? 可以

2.友元

2.1什么是友元?🎧

在c++中,友元(Friend)是一种机制 ,允许一个类或函数访问另一个类的私有成员。通过使用友元关键字,可以将某个函数或类声明为另一个类的友元,从而赋予它对该类私有成员的访问权限。

2.2两种友元关系:🎧

1️⃣.函数友元 :一个函数被声明为另一个类的友元,使得该函数能够访问该类的私有成员

✋A类成员变量由于被private权限限制符修饰,不能被直接访问。现在我们将Print()函数声明为A类的友元函数,这样在Print()函数中就可以直接访问A类对象的私有变量_num了

2️⃣.类友元 :一个类被声明为另一个类的友元,使得该类的所有成员函数都能够访问该类的私有成员

✋B类的Print()函数中无法访问A类的私有成员,现在在A类中声明B类为友元类,这样一来就可以在B类中成功访问到A类的所有成员

⭐️值得注意的是
1.声明友元并不是相互的,是单向的

假设B是A的友元类,那么只允许B类访问A类的私有变量 ,但是A类不可以访问B类的私有变量,除非也将A类置为B类的友元。
2.友元关系不能传递

如果C是B的友元, B是A的友元,则不能说明C时A的友元
3.友元关系不能继承

相关推荐
XH华36 分钟前
C语言第十一章内存在数据中的存储
c语言·开发语言
叫我阿柒啊2 小时前
Java全栈开发面试实战:从基础到微服务架构
java·vue.js·spring boot·redis·git·full stack·interview
小凡敲代码2 小时前
2025年金九银十Java面试场景题大全:高频考点+深度解析+实战方案
java·程序员·java面试·后端开发·求职面试·java场景题·金九银十
AndrewHZ2 小时前
【python与生活】如何用Python写一个简单的自动整理文件的脚本?
开发语言·python·生活·脚本·文件整理
拉法豆粉2 小时前
在压力测试中如何确定合适的并发用户数?
java·开发语言
枯萎穿心攻击3 小时前
Unity VS UE 性能工具与内存管理
开发语言·游戏·unity·ue5·游戏引擎·虚幻·虚幻引擎
爱上纯净的蓝天3 小时前
迁移面试题
java·网络·c++·pdf·c#
老赵的博客3 小时前
c++ 常用接口设计
开发语言·c++
binbinaijishu883 小时前
Python爬虫入门指南:从零开始的网络数据获取之旅
开发语言·爬虫·python·其他
chenglin0163 小时前
Logstash_Input插件
java·开发语言