广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++深入探究友元使用
  • 874
分享到

C++深入探究友元使用

2024-04-02 19:04:59 874人浏览 薄情痞子
摘要

目录友元特点外部函数友元成员函数友元总结类友元友元 友元 friend 机制允许一个类授权其他的函数访问它的非公有成员. 友元声明以关键字 friend 开头 ,它只能出现在类的声明

友元

友元 friend 机制允许一个类授权其他的函数访问它的非公有成员.

友元声明以关键字 friend 开头 ,它只能出现在类的声明中, 它们不受其在类体中的 public private 和
protected 区的影响.

友元分为外部函数友元, 成员函数友元,类友元。

特点

不具有对称性:A 是 B 的友元, 并不意味着 B 是A的友元

不具有传递性:A是B的友元, B是C的友元, 但A不是C的友元。

不具有继承性: Base 类型继承 Object类型, 如果Object 类型是A的友元,但Base类型不是A友元。

外部函数友元

示例

需要在类中进行对其进行声明,则可以访问类的所有成员

class Int
{
int value;
public:
Int(int x = 0):value(x)
{
cout<<"Create Int: "<<this<<endl;
}
~Int(){ cout<<"Destroy Int: "<<this<<endl;}
friend void Print(const Int &it); // 注册为类的友元函数
};
void Print(const Int &it)
{
cout<<it.value<<endl;
}
int main()
{
Int a(10);
Print(a);
return 0;
}

成员函数友元

将一个成员函数声明成友元的时,必须要指明该成员函数属于哪个类:

class Object; // 类的声明
class Int
{
friend void Object::Print(const Int &it); // 注册为成员函数友元
private:
int value;
public:
Int(int x = 0):value(x){ cout<<"Create Int: "<<this<<endl;}
~Int(){ cout<<"Destroy Int: "<<this<<endl;}
};
class Object
{
public:
void Print(const Int &it)
{
cout<<it.value<<endl;
}
};
int main()
{
Int a(10);
Object obj;
obj.Print(a);
return 0;
}

总结

1.友元函数不是类的成员函数,在函数体中访问对象的成员,必须用对象名加运算符“.”加对象成员名。但友元函数可以访问类中的所有成员,一般函数只能访问类中的公有成员。

2.友元函数不受类中的访问权限关键字限制,可以把它放在类的公有、私有、保护部分,但结果一样。

3.某类的友元函数的作用域并非该类作用域。如果该友元函数是另一类的成员函数,则其作用域为另一类的作用域,否则与一般函数相同。

类友元

整个类可以是另一个类的友元。友元类的每个成员函数都是另一个类的友元函数,都可访问另一个

类中的所以成员,共有,保护或私有数据成员

class Object; // 类的声明
class Int
{
friend class Object; // 注册为类友元
private:
int value;
public:
Int(int x = 0):value(x){ cout<<"Create Int: "<<this<<endl;}
~Int(){ cout<<"Destroy Int: "<<this<<endl;}
};
class Object
{
public:
void Print(const Int &it)
{
cout<<it.value<<endl;
}
};
int main()
{
Int a(10);
Object obj;
obj.Print(a);
return 0;
}

到此这篇关于c++深入探究友元使用的文章就介绍到这了,更多相关C++友元内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++深入探究友元使用

本文链接: https://www.lsjlt.com/news/153162.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++深入探究友元使用
    目录友元特点外部函数友元成员函数友元总结类友元友元 友元 friend 机制允许一个类授权其他的函数访问它的非公有成员. 友元声明以关键字 friend 开头 ,它只能出现在类的声明...
    99+
    2022-11-13
  • C++深入探究类与对象之友元与运算符重载
    目录友元1 全局函数做友元2 类做友元3 成员函数做友元运算符重载1 加号运算符重载2 左移运算符重载3 递增运算符重载4 赋值运算符重载5 关系运算符重载6 函数调用运算符重载友元...
    99+
    2022-11-13
  • C++深入探究引用的使用
    目录一. 引用的概念二. 引用特性三. 常引用四. 使用场景1. 做参数2. 做返回值3. 做返回值需要注意的问题五. 传值传引用效率对比1. 值和引用传参时的效率比较2. 值和引用...
    99+
    2022-11-13
  • C/C++多态深入探究原理
    目录多态虚表和虚表指针多态 面向对象编程有三大特性:继承、封装和多态。 其中,多态又分为编译时多态和运行时多态。编译多态是通过重载函数体现的,运行多态是通过虚函数体现的。 多态是如何...
    99+
    2022-11-13
  • C/C++函数指针深入探究
    目录函数指针语法函数地址声明使用函数指针调用函数深入理解函数指针使用typedef 简化函数指针 为什么要使用函数指针? 调用的灵活性和通用性。 试想一下,我们在设计初期并不知道我们...
    99+
    2022-11-13
  • C++深入探究继承的概念与使用
    目录1、概念及定义1.1 概念1.2 定义2、class与struct的区别3、赋值兼容规则4、继承中的作用域问题5、派生类(子类)的默认成员函数5.1 构造函数5.2 拷贝构造函数...
    99+
    2022-11-13
  • C++深入探究list的模拟实现
    目录迭代器正向迭代器类反向迭代器类push_back尾插函数push_front头插函数insert插入函数erase删除函数pop_front函数pop_back函数构造函数析构函...
    99+
    2022-11-13
  • C语言深入探究栈的原理
    栈 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。 栈的实现 栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优...
    99+
    2022-11-12
  • C++深入探究引用的本质与意义
    目录一、引用的意义二、特殊的引用三、引用是否占用存储空间四、引用的本质五、引用的注意事项六、小结一、引用的意义 引用作为变量别名而存在,因此在一些场合可以代替指针引用相对于指针来说具...
    99+
    2022-11-13
  • C++深入探究不同的继承体系
    目录单继承多继承菱形继承概念存在的问题解决方案菱形虚拟继承虚拟继承什么是虚拟继承内存层面理解虚拟继承虚拟继承和普通单继承的区别虚拟继承+菱形继承声明: 本文的测试环境为Windows...
    99+
    2022-11-13
  • C++深入细致探究二叉搜索树
    目录1、二叉搜索树的概念2、二叉搜索树的操作二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除3、二叉搜索树的实现4、二叉搜索树的性能分析1、二叉搜索树的概念  二叉搜索树又...
    99+
    2022-11-13
  • 深入探究C语言中的二叉树
    目录1.树概念及结构1.1树的概念 1.2 树的相关概念1.3 树的表示2.二叉树概念及结构   2.1概念2.2 特殊的二叉树2.3 二叉树的性质&n...
    99+
    2023-05-19
    C语言二叉树 C语言数据结构
  • C语言深入探究函数的溯源
    目录一、函数的由来二、模块化程序设计三、C 语言中的模块化四、面向过程的程序设计五、声名和定义六、小结一、函数的由来 二、模块化程序设计 三、C 语言中的模块化 四、面向过程的...
    99+
    2022-11-13
  • C语言指针和数组深入探究使用方法
    目录1、数组参数和指针参数1.1 一维数组传参1.2 一级指针传参1.3 二维数组参数和二级指针参数1.4 野指针的问题2、函数指针3、函数指针数组4、指向函数数组的指针5、回调函数...
    99+
    2022-11-13
    C语言指针和数组 C语言指针 C语言数组
  • c++中explicit与mutable关键字的深入探究
    今天说一说c++里面的两个关键字explicit和mutable。 1. explicit关键字 在写c++标准输入输出相关文章,查看iostream实现代码的时候,经常看到构造函...
    99+
    2022-11-12
  • C语言深入探究斐波那契数列
    目录一、递归思想二、空间换时间三、动态规划四、通项公式五、矩阵快速幂六、总结本文章参考leetcode斐波那契数官方题解 斐波那契的边界条件是 F(0)=0 和 F(1)=1。当 n...
    99+
    2022-11-13
  • C++数据结构深入探究栈与队列
    目录1. 栈1.1 栈的概念1.2 栈的实现2. 队列2.1 队列的概念2.2 队列的实现3. 栈和队列面试题3.1 括号匹配问题3.2用队列实现栈3.3 用栈实现队列3.4 设计循...
    99+
    2022-11-13
  • C++深入探究二阶构造模式的原理与使用
    目录一、构造函数的回顾二、半成品对象三、二阶构造四、小结一、构造函数的回顾 关于构造函数 类的构造函数用于对象的初始化构造函数与类同名并且没有返回值构造函数在对象定义时自动被调用 问...
    99+
    2022-11-13
  • Java深入探究关键字abstract的使用
    目录1. 理解2. 作用3. 修饰类-抽象类4. 修饰方法-抽象方法5. 代码演示6. 经典题目7. 抽象类的匿名子类8. 应用-模板方法设计模式(TemplateMethod)1....
    99+
    2022-11-13
  • 如何深入探究Flex应用程序使用
    这篇文章将为大家详细讲解有关如何深入探究Flex应用程序使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。和大家重点讨论一下Flex应用程序的概念,主要包括...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作