我了解到将一个类声明为友元类使它能够使用声明它的类的内容或成员。我使用了以下代码:
#include <iostream>
using namespace std;
class two; // forward class declaration
class one {
private:
friend class two; // friend class declared
int a; // to be accessed later
public:
one() { a = 5; }
};
class two {
private:
int b;
public:
two() {
b = a; // intended to access 'a' and assign to 'b'
cout << " " << b << endl;
}
};
int main() {
one one_obj;
two two_obj;
return 0;
}
错误是:'a' was not declared in this scope
我在朋友类的大多数例子中注意到的是构造函数'two()'将使用'class one'作为参数,然后使用数据成员'a'。但我并不总是希望将一个新对象作为构造函数two()的参数。例如,调用构造函数one()已经完成,并且已经设置了'a'的值。制作一个新对象意味着再次这样做,这可能不是有利的。那么这一切导致的是,我可以使用友元类访问类的成员,而不必再次声明一个对象吗?
答案 0 :(得分:1)
班级two
为friend
班级one
仅覆盖访问权限检查。
这仍然意味着您必须引用类的static
成员,或者类正常方式的特定实例的非静态成员强>
您可以从The definitive C++ book list中选择教程或书籍,并阅读所有内容,从中获益。
答案 1 :(得分:0)
b = a; // intended to access 'a' and assign to 'b'
仅因为它是friend
,您无法直接访问其成员。您需要创建one
对象才能访问其成员。
one o;
b = o.a; //now it should work