friend有兩個用法,一個友元函式,一個友元類。
#include <iostream>
class B;
class A
{
public:
A() : _a(0) {}
void print() const
std::cout << _a << std::endl;
}
private:
friend class B; // 友元類
friend void set(A &a, int v); // 友元函式
int _a;
};
void set(A &a, int v = 1)
// 這一個就是友元函式的實現
a._a = v;
class B
void set(A &a, int v)
int main(const char *args, char *argv[])
A a;
// a._a = 1; // 編譯不透過
set(a, 1);
a.print(); // 輸出:1
B().set(a, 2);
a.print(); // 輸出:2
friend有兩個用法,一個友元函式,一個友元類。
#include <iostream>
class B;
class A
{
public:
A() : _a(0) {}
void print() const
{
std::cout << _a << std::endl;
}
private:
friend class B; // 友元類
friend void set(A &a, int v); // 友元函式
int _a;
};
void set(A &a, int v = 1)
{
// 這一個就是友元函式的實現
a._a = v;
}
class B
{
public:
void set(A &a, int v)
{
a._a = v;
}
};
int main(const char *args, char *argv[])
{
A a;
// a._a = 1; // 編譯不透過
set(a, 1);
a.print(); // 輸出:1
B().set(a, 2);
a.print(); // 輸出:2
}