38友元

简介: 38友元

C++入门——60s从0到1

友元

 

在C++中,友元是一种特殊的机制,它允许一个类或函数访问另一个类中的私有成员。友元可以公开一个类的接口,以便其他代码可以访问类的私有成员。

 

友元的概念

 

友元是一种特殊的机制,它允许一个类或函数访问另一个类中的私有成员。在C++中,类中的私有成员默认是只允许在类的内部访问的。如果其他代码需要访问这些成员,可以通过将它们声明为友元来实现。友元可以公开一个类的接口,以便其他代码可以访问类的私有成员。

 

友元的声明

 

在C++中,友元可以在类定义中进行声明。语法如下:

 

class MyClass {

   friend class OtherClass; // 声明 OtherClass 为 MyClass 的友元类

   friend void foo(); // 声明 foo() 为 MyClass 的友元函数

   int x, y; // 其他成员变量和函数...

};

 

在此示例中,声明了一个友元类`OtherClass`和一个友元函数`foo()`。这些友元类和友元函数可以访问`MyClass`中的私有成员。

 

友元的使用

 

友元可以用于访问类的私有成员,它们通常被用于以下场景:

 

1. 访问私有成员:通过将其他代码声明为友元,可以使其访问类的私有成员。这可以帮助我们更好地封装代码,同时提供必要的接口以供其他代码使用。

 

2. 提供接口:通过将其他代码声明为友元,可以为其提供访问类接口的权限。这可以帮助我们更好地封装代码,并提供必要的接口以供其他代码使用。

 

3. 实现特定的操作:通过将其他代码声明为友元,可以为它们提供对特定操作的权限。这可以帮助我们更好地封装代码,并提供特定的功能以供其他代码使用。

 

友元函数的使用

 

友元函数是一种特殊的函数,它可以访问类的私有成员。通常情况下,我们需要在类外部定义一个函数来实现特定的操作,并将该函数声明为该类的友元函数。下面是一个示例:

 

class MyClass {
private:
    int x, y; // 私有成员变量
public:
    void print() {
        cout << "x = " << x << ", y = " << y << endl;
    }
    friend void print(MyClass&); // 将 print() 声明为 MyClass 的友元函数
};
 
void print(MyClass& obj) { // 在函数定义中可以直接访问类的私有成员
    cout << "x = " << obj.x << ", y = " << obj.y << endl;
}

 

在此示例中,我们在类`MyClass`中定义了一个私有成员变量`x`和`y`,并将其公开在一个名为`print()`的公有成员函数中。我们还定义了一个名为`print()`的友元函数,它接受一个`MyClass`类型的参数对象,并在控制台输出该对象的私有成员变量值。最后我们在主函数中创建了一个`MyClass`类型的对象并调用了它的`print()`函数。

 

友元类的使用

 

友元类是一种特殊的类类型,它可以访问另一个类的所有成员(包括私有成员)。通常情况下,我们需要定义一个类来实现特定的操作,并将该类声明为另一个类的友元类。下面是一个示例:

 

class MyClass {
private:
    int x, y; // 私有成员变量
public:
    void print() { // 其他公有成员函数...
        cout << "x = " << x << ", y = " << y << endl;
    }
    friend class OtherClass; // 将 OtherClass 声明为 MyClass 的友元类
};
 
class OtherClass { // OtherClass 是 MyClass 的友元类类型
public: // OtherClass 的公有成员函数...
    void doSomething(MyClass& obj) { // 在 OtherClass 中可以直接访问 MyClass 的私有成员变量和公有成员函数
        obj.x = 10; obj.y = 20; obj.print(); // 对 MyClass 的私有成员进行赋值并调用公有成员函数 print()
    }   
};

在此示例中,我们在`MyClass`中定义了两个私有成员变量和一个名为`print()`的公有成员函数。我们还定义了一个名为`OtherClass`的友元类类型,并在其中定义了一个名为`doSomething()`的公有成员函数。该函数接受一个指向`MyClass`类型的参数对象的对象引用,并在控制台中对参数对象的私有成员进行赋值并调用公有成员函数`print()`来输出结果。最后我们在主函数中创建了一个`MyClass`类型的对象和一个`OtherClass`类型的对象并调用了它们的相应函数来测试结果。

目录
相关文章
|
5月前
|
程序员 C++
29 C++ - 友元
29 C++ - 友元
27 0
|
30天前
|
安全 C语言 C++
C++友元
C++友元
24 0
|
2月前
|
C++
【c++】友元
【c++】友元
【c++】友元
|
6月前
|
C++
C++ 友元
C++ 友元
25 0
|
8月前
|
安全 编译器 C++
C++友元函数和友元类
在 C++ 中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。 借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。 friend 的意思是朋友,或者说是好友,与好友的关系显然要比一般人亲密一些。我们会对好朋友敞开心扉,倾诉自己的秘密,而对一般人会谨言慎行,潜意识里就自我保护。 在 C++ 中,这种友好关系可以用 friend 关键字指明,中文多译为“友
53 0
|
11月前
7-友元类
7-友元类
|
11月前
|
C++
静态成员,友元函数,友元类
🐰静态数据成员 🌸静态数据成员的声明: 🌸静态数据成员的初始化: 🌸静态数据成员的访问: 🐰静态成员函数 🌸静态成员函数的声明 🌸静态数据成员函数的访问 🐰友元函数 友元函数的声明 🐰 友元类