C++的friend類別(friend class)用法如下。
Friend類別的函式可存取被宣告為friend的類別的private及protected的成員。
宣告friend類別的語法如下:
ClassName
- 宣告friend類別FriendClassName
的類別名稱,此類別的private及protected成員可被FriendClassName
類別存取。friend
- 宣告friend類別或friend函式的關鍵字。FriendClassName
-ClassName
類別的friend類別名稱。
class ClassName {
friend class FriendClassName;
}
例如下面的類別Car
中宣告類別Scooter
為friend類別,則Scooter
的函式可直接存取Car
的private即protected成員。
main.cpp
#include <iostream>
#include <string>
using namespace std;
class Car {
friend class Scooter;
private:
string model;
int speed;
public:
Car(string model, int speed) : model(model), speed(speed) {}
};
class Scooter {
private:
string model;
int speed;
public:
Scooter(string model, int speed) : model(model), speed(speed) {}
int CompareSpeed(Car& car) { return speed - car.speed; }
};
int main() {
Car car = {"Tesla Model S", 100};
Scooter scooter = {"Gogoro S", 80};
cout << scooter.CompareSpeed(car) << endl; // -20
return 0;
}
不過反過來Car
並無法存取Scooter
的private及protected成員,除非Scooter
宣告Car
為friend類別。
若兩類別互相宣告為friend類別,要注意類別及方法的宣告順序。
main.cpp
#include <iostream>
#include <string>
using namespace std;
class Scooter;
class Car {
friend class Scooter;
private:
string model;
int speed;
public:
Car(string model, int speed) : model(model), speed(speed) {}
int CompareSpeed(Scooter& scooter);
};
class Scooter {
friend class Car;
private:
string model;
int speed;
public:
Scooter(string model, int speed) : model(model), speed(speed) {}
int CompareSpeed(Car& car) { return speed - car.speed; }
};
int Car::CompareSpeed(Scooter& scooter) { return speed - scooter.speed; }
int main() {
Car car = {"Tesla Model S", 100};
Scooter scooter = {"Gogoro S", 80};
cout << scooter.CompareSpeed(car) << endl; // -20
cout << car.CompareSpeed(scooter) << endl; // 20
return 0;
}
沒有留言:
張貼留言