文章目录
- 1.static成员
- 1.1概念🎧
- 面试题✒️
- 1.2static的特性🎧
- 1.3思考🎧
- 2.友元
- 2.1什么是友元?🎧
- 2.2两种友元关系:🎧
1.static成员
1.1概念🎧
🔎 static关键字用于声明类的静态成员变量和静态成员函数。静态成员变量与特定的类相关联,而不是与类的实例相关联。它们的值对于类的所有实例都是共享的。另外,静态成员变量一定要在类外进行初始化。
面试题✒️
实现一个类,计算程序中创建出了多少个类对象
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 指针
2. 非静态成员函数可以调用类的静态成员函数吗? 可以
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.友元关系不能继承