c++中可不可以在一个类中访问另一个类的私有成员?

c++中可不可以在一个类中访问另一个类的私有成员?,第1张

可以,只要定义该类为另一个类的友元类即可。

友元类:

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();

    }

}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12182945.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存