c++友元

来源:互联网 发布:阿里云客服怎么做 编辑:程序博客网 时间:2024/05/29 08:33


c++友元就是用来访问类的私有成员 不明白c++需要这个语法 

#pragma once
class CWatch;
class CTV
{
public:
 CTV(void);
 ~CTV(void);

public:
 friend class CWatch;  //友元类 可以访问CTV的私有成员
private:
 int   type;
 char* name;

 void SetTypeAndName(int type,char*name,CWatch& watch_);

 friend void  friendFunc(CTV& tv_); //友元函数

 friend bool is_equal( CTV &, CWatch & ); //两个类的友元函数
};
class CWatch
{
public:
 CWatch(void);
 ~CWatch(void);

 //private:
 int type;
 char* name;

 friend bool is_equal( CTV &, CWatch & ); //两个类的友元函数
};

 void friendFunc(CTV& tv_)
{
 int type = tv_.type;
}

  bool is_equal( CTV &, CWatch & )
  {
 return true;
  }


     使用友元类时注意:
        (1) 友元关系不能被继承。
            (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
            (3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明

注意事项:

1.友元可以访问类的私有成员。

2.只能出现在类定义内部,友元声明可以在类中的任何地方,一般放在类定义的开始或结尾。

3.友元可以是普通的非成员函数,或前面定义的其他类的成员函数,或整个类。

4.类必须将重载函数集中每一个希望设为友元的函数都声明为友元。//??????

5.友元关系不能继承,基类的友元对派生类的成员没有特殊的访问权限。如果基类被授予友元关系,则只有基类具有特殊的访问权限。该基类的派生类不能访问授予友元关系的类。



0 0