类与对象(三)--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.友元关系不能继承

相关推荐
读书点滴1 分钟前
笨方法学python -练习14
java·前端·python
lingRJ7772 分钟前
微服务架构下的抉择:Consul vs. Eureka,服务发现该如何选型?
java·eureka·springcloud·consul·backend·microservices·servicediscovery
RainbowSea2 分钟前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
C182981825755 分钟前
OOM电商系统订单缓存泄漏,这是泄漏还是溢出
java·spring·缓存
慌糖12 分钟前
RabbitMQ:消息队列的轻量级王者
开发语言·javascript·ecmascript
try2find14 分钟前
移动conda虚拟环境的安装目录
linux·运维·conda
风象南19 分钟前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
码农101号37 分钟前
Linux中容器文件操作和数据卷使用以及目录挂载
linux·运维·服务器
醇醛酸醚酮酯37 分钟前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
jioulongzi43 分钟前
记录一次莫名奇妙的跨域502(badgateway)错误
开发语言·python