C++ 类的友元机制解读

 更新时间:2021年02月20日 16:51:00   作者:流星斩月  
这篇文章主要介绍了C++ 类的友元机制的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下

  下面给出C++类的友元机制说明(对类private、protected成员访问),需要注意的是,友元机制尽量不用或者少用,虽然它会提供某种程度的效率,但会带来数据安全性的问题。

类的友元

  友元是C++提供的一种破坏数据封装和数据隐藏的机制。

  通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。可以使用友元函数和友元类。

  为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元。

友元函数

  友元函数是在类声明中由关键字friend修饰说明的非成员函数,在它的函数体中能够通过对象名访问 private 和protected成员

  作用:增加灵活性,使程序员可以在封装和快速性方面做合理选择。

  访问对象中的成员必须通过对象名。

举例说明:使用友元函数计算两点间的距离

#include <iostream>

#include <cmath>

using namespace std;

class Point
{//Point类声明

  public: //外部接口

    Point(int x=0, int y=0) : x(x), y(y) { }

    int getX() { return x; }

    int getY() { return y; }

    friend float dist(Point &a, Point &b);

  private: //私有数据成员

    int x, y;

};

float dist( Point& a, Point& b)
{
  double x = a.x - b.x;

  double y = a.y - b.y;

  return static_cast<float>(sqrt(x * x + y * y));

}

int main()
{

  Point p1(1, 1), p2(4, 5);

  cout <<"The distance is: ";

  cout << dist(p1, p2) << endl;

  return 0;

}

友元类

  若一个类为另一个类的友元,则此类的所有成员都能访问对方类的私有成员。

  声明语法:将友元类名在另一个类中使用friend修饰说明。

类的友元关系是单向的

  如果声明B类是A类的友元,B类的成员函数就可以访问A类的私有和保护数据,但A类的成员函数却不能访问B类的私有、保护数据。

以上就是C++ 类的友元机制解读的详细内容,更多关于C++ 类的友元机制的资料请关注脚本之家其它相关文章!

相关文章

  • C++实例分析讲解临时对象与右值引用的用法

    C++实例分析讲解临时对象与右值引用的用法

    对性能来说,许多的问题都需要和出现频率及本身执行一次的开销挂钩,有些问题虽然看似比较开销较大,但是很少会执行到,那也不会对程序有大的影响;同样一个很小开销的函数执行很频繁,同样会对程序的执行效率有很大影响。本章中作者主要根据临时对象来阐述这样一个观点
    2022-08-08
  • C++指针与引用的区别案例详解

    C++指针与引用的区别案例详解

    这篇文章主要介绍了C++指针与引用的区别案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 线程池的原理与实现详解

    线程池的原理与实现详解

    下面利用C语言来实现一个简单的线程池,为了使得这个线程池库使用起来更加方便,特在C实现中加入了一些OO的思想,与Objective-C不同,它仅仅是使用了struct来模拟了c++中的类,其实这种方式在linux内核中大量可见
    2013-09-09
  • C/C++实现全排列算法的示例代码

    C/C++实现全排列算法的示例代码

    本文主要介绍了C/C++实现全排列算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • C++设计模式之Proxy模式(代理模式)详解

    C++设计模式之Proxy模式(代理模式)详解

    这篇文章主要为大家详细介绍了C++设计模式之Proxy模式的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 浅析C语言中对于char*和char[]的理解

    浅析C语言中对于char*和char[]的理解

    char * s 只是一个保存字符串首地址的指针变量,char a[]是许多连续的内存单元,单元中的元素是char型,char * 和 char a[]具有相同的效果,源于字符串的本质,这篇文章主要介绍了C语言中对于char*和char[]的理解,需要的朋友可以参考下
    2023-02-02
  • 虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    虚函数与纯虚函数(C++与Java虚函数的区别)的深入分析

    本篇文章是对虚函数与纯虚函数进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • C++中的拷贝构造函数详解

    C++中的拷贝构造函数详解

    大家好,本篇文章主要讲的是C++中的拷贝构造函数详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结

    本篇文章是对C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程进行了总结与分析,需要的朋友参考下
    2013-05-05
  • C++ 中将一维数组转成多维的三种方式示例详解

    C++ 中将一维数组转成多维的三种方式示例详解

    这篇文章主要介绍了C++ 中将一维数组转成多维的三种方式,每种方式结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12

最新评论