可以,只要定义该类为另一个类的友元类即可。
友元类:
class A
{
friend class B
private: int aa;
};
class B
{
public:
void output()
{
cout << aaa << endl;
}
private: A a;
}
使用友元类时:
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。
扩展资料:
友元类使用注意事项:
1、友元可以访问类的私有成员。
2、只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。
3、友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。
4、类必须将重载函数集中每一个希望设为友元的函数都声明为友元。
5、友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。
-友元类
class club;
这个只是前向声明,但是你在class lon中用到了club的具体内容,编译器找不到club的具体实现,(因为club类的实现在class lon的后面),所以报错。
解决办法:新建一个源文件放class lon(把类的声明放在头文件中) 再新建一个源文件放club类(同前)在两个类的头文件中互相包含下就OK了。
protected是访问控制的一种 。在类中被protected修饰的函数或数据成员,只能被该类或其子类的以及其友元函数访问。
特别要注意的是:访问权限为protected的类成员不能被该类的实例对象或其子类的实例对象访问。以下的C#代码演示了这一点
// 父类public class Father
{
protected int x;
public Father()
{
// 正确!
x = 10;
}
public void ShowX()
{
// 正确!
ConsoleWrite( "x = {0}", x);
}
}
// 子类
public class Son : Father
{
public Son() : base()
{
// 正确!
x = 100;
}
public void ShowXSon()
{
// 正确!
ConsoleWrite( "x = {0}", x);
}
}
class Program
{
static void Main(string[] args)
{
Father f = new Father();
// fx = 30; <--错误!!!
fShowX();
Son s = new Son();
// sx = 20; <--错误!!!
sShowXSon();
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)