美文网首页C/C++
(二十六)朋友成员/类的朋友

(二十六)朋友成员/类的朋友

作者: RGiskard | 来源:发表于2018-11-04 21:26 被阅读0次

引例

class Object
{
public:
    Object(int v) : value(v)
    {
        
    }
private:
    int value;
};

//定义全局函数Test
void Test(Object* p)
{
    printf("%d",p->value);//错误!!value是private的,不能被外部访问
}

怎么才能访问到呢?

朋友成员

在类中,用friend关键词可以将一个全局函数或另一个类修饰为该类的朋友

class Object
{
    friend void print(Object* p);
    
    friend class Base;  //将类Base声明为朋友
};
class Object
{
    friend void Print(Object* p);
public:
    Object(int v) : value(v)
    {
        
    }
private:
    int value;
};

void Print(Object* p)
{
    printf("%d",p->value);
};

friend的语法

  • 放在类体大括号内
  • 朋友B的权力:可以无限制地访问类A的所有成员,不受private/protected限制
  • B被声明为A的朋友,则B可以访问A的所有成员,反之不成立,A不是B的朋友,A无法访问B的所有成员

缺点大于优点

  • 优点:给设计人员带来灵活度,无视private/protected
  • 缺点:破坏了类的封装原则

相关文章

  • (二十六)朋友成员/类的朋友

    引例 怎么才能访问到呢? 朋友成员 在类中,用friend关键词可以将一个全局函数或另一个类修饰为该类的朋友 fr...

  • A类朋友

    从小到大,我们听到的理念一向都是是“人生而平等”。 但是在实际中,我们人常常还是被划分成三六九等,被贴上了各式各样...

  • 友元

    一.友元 友元函数,目的是访问类中的私有成员属性 友元关系不能被继承 友元关系是单向的,类A是类B的朋友,单类B不...

  • 类成员

    类成员: 数据成员,描述对象状态 实例变量,对内部状态 属性,对外 函数成员,描述对象行为 方法 初始化器 析构器...

  • 《面向对象程序设计 C++》类数据成员和类成员函数

    类数据成员 C++类中有一种类型成员,属于类本身,而不属于类的对象,这种类型成员成为类成员,而属于对象的成员成为对...

  • 三类朋友

    周末来了两拨朋友。 古人说,有朋自远方来,不亦乐乎?这句话越琢磨越觉得有意思。 有些朋友,和你从小就玩到大,一辈子...

  • java静态方法的线程安全问题

    类的成员分为两类,静态成员(static member)和实例成员(instance member)。静态成员属于...

  • C++ const用法

    一 修饰类 C++中const修饰类主要包括3个部分:数据成员,成员函数,对象。 数据成员const 修饰类的成员...

  • 16章 类: 不可变性 & 具体类型

    16.1 类基础 1 访问类的(而非对象)成员 (static 成员 / 成员函数): 类名 + 作用域操作符 :...

  • C++ 哪几种情况必须用到初始化成员列表

    类的成员是常量成员初始化; 类的成员是对象成员初始化,而该对象没有无参构造函数; 类的成员为引用时。

网友评论

    本文标题:(二十六)朋友成员/类的朋友

    本文链接:https://www.haomeiwen.com/subject/ngvdxqtx.html