【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )

这篇具有很好参考价值的文章主要介绍了【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。





一、友元函数简介



在 C++ 语言中 , " 友元函数 " 是 与 类 相关联的函数 ,

" 友元函数 " 不是类的成员函数 , 但是可以访问类的 private 私有成员 和 protected 保护成员 ;

友元函数可以是

  • 全局函数
  • 本类的成员函数
  • 其他类的成员函数

友元函数 是 类的 朋友 ,

在 友元函数 中 , 可以修改 类对象 中的 私有属性 和 保护属性 ;

友元函数 破坏了 类的 封装性 ;





二、友元函数声明




1、友元函数语法


" 友元函数 " 需要在 类 中进行声明 , 使用 friend 关键字修饰函数 , 语法如下 :

class ClassName {  
  
  // 成员变量和成员函数  
  
  friend returnType functionName(arguments);  
};
  • returnType : 是 友元函数 的 返回值 ;
  • functionName : 是 友元函数 的 函数名 ;
  • arguments : 是 友元函数 的 参数列表 ;

2、友元函数声明不受访问控制限制


" 友元函数 " 的 声明 , 不受类的访问控制限制 , 可以在任何地方定义 , 如 : 在 private: , protected: , public: , 下声明 友元函数 , 并不影响到 友元函数 的使用 ;

只要 声明了 " 友元函数 " , 不管在什么位置声明 , 都可以正常通过该友元函数 访问 类中的成员 ;


3、友元函数参数要求


" 友元函数 " 中 , 需要有一个参数是 类对象的 指针 ;

如下 Student 类的友元函数 , 需要有一个参数是 Student 类对象指针 , 可以访问对象 ;

private:
	// 声明友元函数 
	friend void changeAge(Student* s, int age);

4、友元函数示例


在 类中声明 如下友元函数 :

private:
	// 声明友元函数 
	friend void changeAge(Student* s, int age);

即使使用了 private 限定友元函数 , 在类的外部也能访问该函数 ;

在类的外部定义上述友元函数 , 可以访问类对象中的私有成员 ;

// 在友元函数中 访问 age 私有属性
void changeAge(Student* s, int age)
{
	s->age = age;
}




三、完整代码示例 - 友元函数



在下面的代码示例中 ,

Student 类有一个私有成员变量 age ,

并且声明了一个友元函数 changeAge ;

private:
	// 声明友元函数 
	friend void changeAge(Student* s, int age);

changeAge 函数不是 Student 的成员函数 , 而是一个 全局函数 , 通过友元关系访问 对象中的 age 私有成员 ;

在 main 函数中 , 我们创建了一个 Student 对象并调用了 changeAge 友元函数 修改私有成员 age 的值 ;


代码示例 :

#include "iostream"
using namespace std;

class Student
{
public:
	// 带参构造函数
	Student(int age = 1, int height = 1)
	{
		this->age = age;
		this->height = height;
		cout << "执行 Student 的构造函数" << endl;
	}

	~Student()
	{
		cout << "执行 Student 的析构函数" << endl;
	}

public:
	// 打印类数据
	void print()
	{
		cout << " age = " << age  << " , height = " << height << endl;
	}

private:
	// 声明友元函数 
	friend void changeAge(Student* s, int age);

private:
	int age;		// 年龄
	int height;		// 身高
};

// 在友元函数中 访问 age 私有属性
void changeAge(Student* s, int age)
{
	s->age = age;
}


int main() {
	
	// 调用有参构造函数 创建 Student 实例对象
	Student s(18, 180);
	s.print();

	changeAge(&s, 88);
	s.print();
	

    // 控制台暂停 , 按任意键继续向后执行
    system("pause");

    return 0;
}

执行结果 :

执行 Student 的构造函数
 age = 18 , height = 180
 age = 88 , height = 180
请按任意键继续. . .

友元函数,C++,c++,友元函数文章来源地址https://www.toymoban.com/news/detail-807622.html

到了这里,关于【C++】友元函数 ( 友元函数简介 | 友元函数声明 | 友元函数语法 | 友元函数声明不受访问控制限制 | 友元函数参数要求 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++友元函数

    友元——让函数或者类作为另外一个类的朋友,则可以访问当前类的private或者protected 友元friend机制允许一个类授权其他的函数访问它的非公有成员 友元声明以friend开头,它只能出现在类的声明中,它们不受其在类体中的public、private和protected区的影响 1、外部函数友元

    2024年02月06日
    浏览(46)
  • 波奇学C++:友元函数,友元类,内部类,匿名对象,优化构造

    这个代码会报错,原因是_a是a._a的私有成员,fun()是类外函数不能访问。 加上友元就可以突破限制 关于友元的知识 友元函数是一种声明,表明这个函数可以访问私有变量。 友元函数本质上不属于类函数,所以这个声明是不受访问限定符限制的,可以定义在public或者private中。

    2024年02月05日
    浏览(41)
  • C++之类的友元函数

    类的友元函数是指在类中声明为友元的函数。友元函数可以访问类的所有成员(包括私有成员),但它本身并不是类的成员函数,因此不需要通过类的对象来调用。友元函数主要用于在类的内部实现对其他类成员的访问和操作。 举例说明: 这个友元函数的参数是一个类A的对象引

    2024年01月22日
    浏览(37)
  • C++——详解类模板与友元函数

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 模板类的友元函数有三类: 1)非模板友元函数:友元函数不是模板函数,而是利用模板类参数生成的函数。 2)约束模板友元函数:模板类实例化时,每个实例化的类对应一个友元函数。 3)非约束

    2024年02月11日
    浏览(36)
  • C++类和对象终章——友元函数 | 友元类 | 内部类 | 匿名对象 | 关于拷贝对象时一些编译器优化

    🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/C++、Linux 学习。 🌸 本文收录于 C++系列 ,本专栏主要内容为 C++ 初阶、C++ 进阶、STL 详解等,专为大学生打造全套 C++ 学习教程,持续更新! 🌸 相关专栏推荐: C语言初阶系列 、 C语言进阶系列 、 数据结构与算法 、 Linu

    2023年04月15日
    浏览(43)
  • 【C++】类和对象(下篇)--->再识构造函数,static成员,友元,内部类,匿名对象

    目录 一、构造函数  1、构造函数体赋值  2、初始化列表  3、explicit 二、Static 成员  1、概念  2、特性 三、友元  1、友元函数  2、友元类 四、内部类  1、概念  2、特性 五、匿名对象 六、拷贝对象时的一些编译器优化 在创建对象时,编译器通过调用构造函数,给对

    2024年02月13日
    浏览(43)
  • c++类开发的第三篇(讲明白友元函数和this指针)

    c++实现了 封装 , 数据 和 处理数据的操作(函数) 是分开存储的。 c++中的 非静态数据成员 直接内含在类对象中,就像c语言的struct一样。 成员函数并不会出现在对象中,而是作为类的一部分存储在代码段中,需要通过对象或对象指针进行调用。成员函数可以访问类的所有成员

    2024年02月21日
    浏览(46)
  • c++中static静态成员变量和静态成员函数、explcit和隐式类型转换、友元函数()详解

    声明为 static 的类成员 称为 类的静态成员 ,用 static 修饰的 成员变量 ,称之为 静态成员变量 ;用 static 修饰 的 成员函数 ,称之为 静态成员函数 。 静态成员变量一定要在类外进行初始化   静态成员 为 所有类对象所共享 ,不属于某个具体的对象,存放在静态区   静态成

    2024年02月04日
    浏览(49)
  • 【C++】继承的基本特性(定义,赋值转换,友元,静态成员,虚拟继承,默认成员函数,作用域)

    🌏博客主页: 主页 🔖系列专栏: C++ ❤️感谢大家点赞👍收藏⭐评论✍️ 😍期待与大家一起进步! 它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。 Person是父类,也称作基类。Student是子类,也称作派生类 总结: 基类private成员

    2024年02月14日
    浏览(48)
  • [C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 佬佬催更,那就更吧!嗯~ o(* ̄▽ ̄*)o! 在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个

    2024年03月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包