基数 class 和该基数 class 的派生 class 可以有一个共同的朋友 class 并且是两个 class 的朋友吗?
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 和派生 class?
的朋友
我是一个完全的编程初学者,我刚刚开始学习 C++ 中的 OOP;当我得知朋友 functions/classes.
时,我就想到了这个问题。
在 C++ 中,
为了向 class 的私有或受保护成员授予访问权限,我们应该定义一个友元 class 或一个函数(或另一个 class 的方法)。
友情不遗传。
因此,为了从另一个 class 访问基 class 和派生 class 的私有或受保护成员,您应该将“另一个” class 定义为基数 class 及其派生 class.
的朋友
对于
“....如果朋友 class 与两个基 class 和派生的 class?....”问题。
友谊不是相互的。如果 class Y 是 Y 的朋友,那么 Y 不会自动成为 X 的朋友。
因此派生 class 无法使用基 class.
的朋友访问基 class 的私有成员
可以通过使用 friend class F.
从派生 class D 访问基 class B 的私有成员
- B应该把F定义为朋友。 (F 可以访问 B 的私有和受保护成员)
- F应该把D定义为好友。(D可以访问F的private和protected成员)
- F 应该定义访问 and/modify B 的所有私有成员的方法。
- F 应该在类型 B 中定义一个属性,并将此属性设置为构造函数或方法中的参数。
- D应该在F类型中定义一个属性,并使用4.
中定义的方法或构造函数将自身设置为该属性
最终D可以通过类型F中的属性访问B的所有私有成员
可以在同一个文件中定义相同的class,这样两者就可以访问好友功能了。 Transaction
的前向声明允许 Customer
class 引用 Transaction
class 而不会导致编译器错误。
如果您想了解更多关于这些事情的信息,请考虑阅读一本书,因为互联网对学习来说并不是很好,有时甚至有毒。
#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;
}
我知道朋友 class 可以访问 class 的私有元素,所以我想知道派生的 class 可以使用朋友 class 来访问基 class 的私有成员,如果朋友 class 是基 class 和派生 class?
的朋友我是一个完全的编程初学者,我刚刚开始学习 C++ 中的 OOP;当我得知朋友 functions/classes.
时,我就想到了这个问题。在 C++ 中, 为了向 class 的私有或受保护成员授予访问权限,我们应该定义一个友元 class 或一个函数(或另一个 class 的方法)。
友情不遗传。
因此,为了从另一个 class 访问基 class 和派生 class 的私有或受保护成员,您应该将“另一个” class 定义为基数 class 及其派生 class.
的朋友对于 “....如果朋友 class 与两个基 class 和派生的 class?....”问题。
友谊不是相互的。如果 class Y 是 Y 的朋友,那么 Y 不会自动成为 X 的朋友。 因此派生 class 无法使用基 class.
的朋友访问基 class 的私有成员可以通过使用 friend class F.
从派生 class D 访问基 class B 的私有成员- B应该把F定义为朋友。 (F 可以访问 B 的私有和受保护成员)
- F应该把D定义为好友。(D可以访问F的private和protected成员)
- F 应该定义访问 and/modify B 的所有私有成员的方法。
- F 应该在类型 B 中定义一个属性,并将此属性设置为构造函数或方法中的参数。
- D应该在F类型中定义一个属性,并使用4. 中定义的方法或构造函数将自身设置为该属性
最终D可以通过类型F中的属性访问B的所有私有成员
可以在同一个文件中定义相同的class,这样两者就可以访问好友功能了。 Transaction
的前向声明允许 Customer
class 引用 Transaction
class 而不会导致编译器错误。
如果您想了解更多关于这些事情的信息,请考虑阅读一本书,因为互联网对学习来说并不是很好,有时甚至有毒。
#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;
}