在C++中,友元類(friend class)是一種特殊的類關(guān)系,允許一個類訪問另一個類的私有(private)和保護(protected)成員。友元類不是被另一個類包含的類,而是與另一個類有相互訪問權(quán)限的類。
要定義一個友元類,需要在類聲明中使用friend
關(guān)鍵字。這里有一個簡單的例子來說明如何定義和使用友元類:
#include <iostream>
// 聲明類A
class A {
public:
A(int value) : value_(value) {}
// 聲明類B為友元類
friend class B;
// 定義一個公有成員函數(shù),用于輸出類A的成員變量
void printValue() const {
std::cout << "Value of A: " << value_ << std::endl;
}
private:
int value_;
};
// 聲明類B
class B {
public:
B(int value) : value_(value) {}
// 定義一個成員函數(shù),用于訪問類A的私有成員變量
void printAValue() const {
std::cout << "Value of A: " << a_.value_ << std::endl;
}
private:
int value_;
// 定義一個友元聲明,允許類B訪問類A的私有成員變量
friend class A;
};
int main() {
A a(10);
B b(20);
// 使用類A的成員函數(shù)輸出其私有成員變量
a.printValue();
// 使用類B的成員函數(shù)訪問類A的私有成員變量
b.printAValue();
return 0;
}
在這個例子中,我們有兩個類:A
和B
。類A
有一個私有成員變量value_
,而類B
有一個私有成員變量value_
和一個成員函數(shù)printAValue()
。我們在類A
的聲明中使用friend class B;
將類B
聲明為友元類,這樣類B
就可以訪問類A
的私有成員變量value_
。同樣,我們在類B
的聲明中使用friend class A;
將類A
聲明為友元類,這樣類A
就可以訪問類B
的私有成員變量value_
。
在main()
函數(shù)中,我們創(chuàng)建了類A
和類B
的實例,并使用它們的成員函數(shù)分別輸出各自的私有成員變量。