美文网首页
C++——友元friend,实践

C++——友元friend,实践

作者: StevenHD | 来源:发表于2020-11-29 00:03 被阅读0次

一、友元的概念

  • 同类之间是不需要友元的
  • 只有不同类之间需要友元

友元friend可以让类B的对象高效地访问类A的私有成员,如果不用友元friend,那么就需要通过类A的公有成员函数来访问类A的私有数据成员(这种做法太麻烦了)。

二、前向性声明

  • 前向性声明具有局限性——解决这种A& t问题。

三、不同类之间的声明

全局函数和类B的成员函数——


全局函数可以不加::,但是另一个类要加上B::

四、实践友元

  • 友元函数的实现需要放在类外
  • 如果一个类中的多个成员函数都需要被声明成友元,那么我们直接将这个类声明为友元类

声明为类A(比如Point)的友元,就可以通过A(比如Point)的对象,访问A(比如Point)的private数据成员

五、友元的利弊

友元的好处在于——可以不用通过函数接口来使用private成员,而是可以直接通过对象来访问。(当然就算是自己类的对象也不能直接访问自己类的private数据成员

友元一般都是函数,友元类也是对函数有便利,让友元函数直接使用private数据成员,因为本类自己的公有函数是可以随便用Private数据成员的。
友元的坏处在于——破坏了封装性

六、运算符重载与友元

将一个全局函数变为友元函数

#include <iostream>

using namespace std;

class Complex
{
public:
    Complex (int r = 0, int i = 0) : real(r), image(i) {}
    
    friend Complex operator+(Complex& a, Complex& b);

    void dis()
    {
        cout << "(" << real << "," << image << ")" << endl;
    }

private:
    
    int real;
    int image;
};

Complex operator+ (Complex& a, Complex& b)
{
    Complex t;

    t.real = a.real + b.real;
    t.image = a.image + b.image;

    return t;
}

int main()
{
    Complex c1(1, 2), c2(3, 4);
    Complex c3 = c1 + c2;
    
    c3.dis();

    return 0;
}

相关文章

  • C++——友元friend,实践

    一、友元的概念 同类之间是不需要友元的 只有不同类之间需要友元 友元friend可以让类B的对象高效地访问类A的私...

  • c++ 友元

    在c++中,通过关键字friend声明为友元。友元可以范围与其有好友关系的类中私有成员。友元包括友元函数和友元类。...

  • C++基础-(静态成员和友元)

    C++基础 静态成员和友元 static:标志静态成员 friend:标志友元 静态数据成员用得比较多的场合一般为...

  • 友元(friend)

    友元 友元可以直接拿数据,而不需要通过函数。拿数据的动作就像成员函数一样。 相同 class 的各个 object...

  • 【C++】C++学习笔记之五:友元

    在类中有一种函数声明前加friend关键字的函数声明方式,这种函数被称为C++类的友元函数 1. 友元的作用——破...

  • C++笔记2

    1.Josephus数小孩 2.静态成员 友元1(friend) 友元2

  • C++ 友元,关键词friend介绍

    类(class)在外部不容易访问其私有成员,而友元声明却让这个操作变得如此简单,下来咱们来看看到底怎么个...

  • C++ 类友元函数

    /* 友元函数可以访问类的 private 和 protected 成员。 */ /* class friend ...

  • 2-1友元函数

    友元函数的概念想必学过c++类的同学都听过,就是在类A的类体内,声明函数时在返回类型前加入friend关键字,如T...

  • GreekBand-job1-note

    1、友元 友元机制允许一个类将其非公有成员的访问权授予指定的函数或类,友元的声明以friend关键字开始。友元声明...

网友评论

      本文标题:C++——友元friend,实践

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