[英]Can a base class and a derived class of that base class have a common friend class which is a friend of both the classes?
我知道朋友 class 可以訪問 class 的私有元素,所以我想知道派生 class 可以使用朋友 class 訪問基 class 的私有成員,如果朋友 class 是派生class?
我是一個完全的編程初學者,我剛剛開始學習 C++ 中的 OOP; 當我了解到友元函數/類時,我只是想問這個問題。
在 C++ 中,為了向 class 的私有或受保護成員授予訪問權限,我們應該定義一個朋友 class 或 function(或另一個類的方法)。
友情不是世代相傳的。
因此,為了從另一個 class 訪問基 class 和派生 class 的私有或受保護成員,您應該將“另一個”class 定義為基 class 及其派生 class 的友元。
對於“....如果朋友 class 是基數 class 和派生的 class 的朋友,派生的 class 可以使用朋友 class 訪問基數 class 的私有成員嗎?....”問題。
友誼不是相互的。 如果 class Y 是 Y 的朋友,那么 Y 不會自動成為 X 的朋友。 因此派生 class 無法使用基 class 的朋友訪問基 class 的私有成員。
可以通過使用朋友 class F 從派生的 class D 訪問基 class B 的私有成員。
最后,D 可以通過類型 F 中的屬性訪問 B 的所有私有成員。
可以在同一個文件中定義相同的class,這樣兩者就可以訪問朋友function。Transaction的前向聲明允許Customer
class引用Transaction
Transaction
而不會導致編譯錯誤。 如果您想了解更多關於這方面的信息,請考慮閱讀一本書,因為 inte.net 對學習來說並不是很好,有時也相當有毒。
#include<iostream>
using namespace std;
class Transaction;
class Customer
{
friend void applyTransaction(Customer, Transaction);
private:
int custNum;
double balanceDue;
public:
Customer(int = 0, double = 0.0);
};
Customer::Customer(int num, double balance)
{
custNum = num;
balanceDue = balance;
}
class Transaction
{
friend void applyTransaction(Customer, Transaction);
private:
int transactionNum;
int custNum;
double amount;
public:
Transaction(int = 0, int = 0, double = 0.0);
};
Transaction::Transaction(int trans, int cust, double amt)
{
transactionNum = trans;
custNum = cust;
amount = amt;
}
void applyTransaction(Customer cust, Transaction trans)
{
cout << "Customer #" << cust.custNum <<
" original balance of $" <<
cust.balanceDue << endl;
cust.balanceDue += trans.amount;
cout << "After transaction #" <<
trans.transactionNum << " for " <<
trans.amount << " the new balance is $" <<
cust.balanceDue << endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.