首页 > 编程语言 >C++的友元类

C++的友元类

时间:2023-05-05 15:57:07浏览次数:45  
标签:MyClass2 MyClass1 C++ private 声明 class 友元类

C++ 中的友元类是一种特殊的类,它允许一个类授权另一个类或函数访问其私有成员。友元类的使用可以提供更好的封装和安全性,同时也可以增强代码的灵活性和可读性。

声明友元类 在 C++ 中,声明一个类为另一个类的友元类需要在该类中进行声明。例如,如果类 MyClass1 希望将类 MyClass2 声明为其友元类,则需要在 MyClass1 中进行如下声明:

class MyClass2; // 前向声明 MyClass2 类

class MyClass1 {
  friend class MyClass2; // 声明 MyClass2 为友元类
};

在这个例子中,MyClass2 被声明为 MyClass1 的友元类,MyClass2 可以访问 MyClass1 中的私有成员。

示例 下面是一个友元类的示例,其中 MyClass2 是 MyClass1 的友元类:

#include <iostream>

class MyClass2;

class MyClass1 {
 public:
  MyClass1() : private_var_(42) {}

  friend class MyClass2;

 private:
  int private_var_;
};

class MyClass2 {
 public:
  void AccessPrivateVar(const MyClass1& my_class1) {
    std::cout << "The private variable of MyClass1 is: " << my_class1.private_var_ << std::endl;
  }
};

int main() {
  MyClass1 my_class1;
  MyClass2 my_class2;

  my_class2.AccessPrivateVar(my_class1);

  return 0;
}
在这个示例中,MyClass1 中的 private_var_ 变量被声明为私有成员,MyClass2 被声明为 MyClass1 的友元类。MyClass2 可以访问 MyClass1 中的 private_var_ 变量,因为它是 MyClass1 的友元类。

总结 C++ 中的友元类是一种特殊的类,它可以授权另一个类或函数访问其私有成员。友元类的使用可以提供更好的封装和安全性,同时也可以增强代码的灵活性和可读性。要将一个类声明为另一个类的友元类,需要在该类中进行声明。

 

private构造函数怎么才能被用到

  1. 使用友元类的对象中的方法来创建它。
  2. 在本类中实现static方法来创建它。

标签:MyClass2,MyClass1,C++,private,声明,class,友元类
From: https://www.cnblogs.com/Galesaur-wcy/p/17374363.html

相关文章

  • 【C++之类构造函数和析构函数】
    【C++之类构造函数和析构函数】类的构造函数:1.类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。2.构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回void。3.构造函数可用于为某些成员变量设置初始值。类的析构函数:1.类的析构函......
  • 开心档之C++ 重载运算符和重载函数
    C++重载运算符和重载函数C++允许在同一作用域中的某个函数 和运算符 指定多个定义,分别称为函数重载 和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函数 或重载运算符 时......
  • 编程打卡: C++ 语言程序设计
    #include<iostream>usingnamespacestd;classComplex{protected:doublereal;doubleimag;public:Complex(doubler=0.0,doublei=0.0):real(r),imag(i){};Complexoperator+(constComplex&c){......
  • 【C++学习笔记】类的长度
    //空类长度是1由于可以初始化,所以必须有一个长度1class空类{}//一个函数长度是1其实函数不占长度,多个函数,长度还是为1,为了初始化,必须有一个长度。class一个函数{voidTest();}//一个虚函数类由于有一个虚函数表,所以必须长度为4,多个虚函数,也是4class一个虚函数类......
  • C++第四章课后习题4-19
    定义一个CPU类1#include<iostream>2usingnamespacestd;3enumCore{4Single,Dual,Quad5};6enumWords{7Bits32,Bits648};9enumHyperThread{10Support,Notsupport11};12classCPU{13public:14CPU(longint......
  • C++打卡第十八天
    一、问题描述。一个口袋中装有12个球,三个红的,三个白的,六个黑的,现在从中取八个,问有多少种取法。二、设计思路①、我们可以通过定义三个变量,应用循环结构依次遍历可以出现的情况。②、颜色相同的小球大小形状是相同的,那么在相同颜色中选球就是和顺序无关。③、可以通过用所拿出的总......
  • C++获取阿里巴巴1688中国站店铺详情 API 接口返回值示例说明
    ​C++(cplusplus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。......
  • C++用return{}来返回空的Vector数组
    本人在刷Leecode题目的时候发现以下代码classSolution{public:std::unordered_map<int,int>map;for(inti=0;i<nums.size();i++){//遍历当前元素,并在map中寻找是否有匹配的keyautoiter=map.find(target-nums[i]......
  • C++获取微妙级时间戳
    使用C++11提供的std::chrono库#include<chrono>#include<ctime>#include<iomanip>#include<string>std::stringgetTime(){//获取当前时间点autonow=std::chrono::system_clock::now();//将时间长度转换为微秒数autonow_us=std::chrono......
  • C++黑马程序员——P251-254. 常用排序算法 sort,random_shuffle,merge,reverse
    P251.常用排序算法——sortP252....——random_shuffleP253....——mergeP254....——reverseP251.sort  1#include<iostream>2#include<vector>3#include<algorithm>4#include<functional>//用greater5usingnamespacest......