C++友元

简介: C++友元

欢迎来观看温柔了岁月.c的博客 目前 设有C++学习专栏 C语言项目专栏 数据结构与算法专栏

目前主要更新C++学习专栏,C语言项目专栏不定时更新 待C++专栏完毕,会陆续更新C++项目专栏和数据结构与算法专栏

一周主要三更,星期三,星期五,星期天 感谢大家的支持


C++友元

什么是友元

  1. C++友元是用friend关键字修饰的函数或者类
    2.友元的作用:用来打破类的封装(忽视权限的限定)
    3.友元并不是说直接访问数据成员,友元只是提供一个场所,赋予对象具有打破权限限定的能力。
    4.友元函数和友元类,不属于当前类,实现函数或者类不需要类名来限定

友元函数

#include<iostream>
#include<string>
using namespace std;
class MM
{
public:
  MM() = default; //允许存在无参的函数
  MM(int age, string name) :age(age), name(name) {}
  void printDate()
  {
    cout << "age = " << age << "name = " << name << endl;
  }
  friend void visitDate(MM& object); //友元函数  ,在类内用friend修饰
private:
  int age;
  string name;
};
 //可以类外实现,也可以类内实现,一般是类外实现
//类外实现不需要加类名进行限定,这也是与函数类外实现的区别
//注意任何数据的访问,都需要通过对象,友元只是赋予对象打破权限限定的权限
void visitDate(MM & object)
 {
  cout << object.name << endl; //函数传参访问
  MM* pmm = new MM(10, " ni"); //new创建对象访问
  pmm->name = "ni";
  MM mm;   // 默认构造构造无参函数访问
  mm.age = 10;
  MM mm(10, "温柔了岁月");  // 成员函数访问
  cout << mm.age << mm.name << endl; 
 }
int main()
{
  system("pause");
  return 0;
}

以另一个类的成员函数为友元(了解即可)

以类A的成员函数,在类B中实现友元

一般都不这样写,了解即可

#include<iostream>
#include<string>
using namespace std;
class A
{
public:
  void printA(A& object);
private:
  int age;
  string name;
};
class B
{
public:
  friend void A::printA(A& object);  //加类名限定
private:
  int age;
  string name;
};
void A::printA(A& object)
{
  cout << object.age << endl;
}
int main()
{
  system("pause");
  return 0;
}

友元类

用friend 修饰一个类

//友元类
#include<iostream>
#include<string>
using namespace std;
class boy
{
public:
  boy(string name, int age);
  friend class girl; //友元类
private:
  int age;
  string name;
};
//在girl类中无视boy类中的权限,什么都可以访问
class girl
{
public:
  void printDate(boy& object)
  {
    object.age = 10;
    cout << age << endl;
  }
  void printFate(boy & object)
  {
    boy* p = new boy("ni", 19);
    cout << p->age << p->name << endl;
  }
private:
  int age;
};
int main()
{
  system("pause");
  return 0;
}

互为友元类(了解即可)

了解即可,一般不会这么写

//互为友元类
#include<iostream>
#include<string>
using namespace std;
class A
{
public:
  friend class B;
private:
  int age;
  string name;
};
class B
{
public:
  friend class A;
private:
  int age;
  string name;
};
int main()
{
  system("pause");
  return 0;
}
相关文章
|
5月前
|
程序员 C++
29 C++ - 友元
29 C++ - 友元
27 0
|
1月前
|
安全 编译器 程序员
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用(一)
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用
31 1
|
3月前
|
存储 算法 C语言
【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)
一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 🔴静态数据成员: 🔴静态函数成员: ⭕使用静态成员的
69 0
|
4天前
|
编译器 C++
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
【C++基础(八)】类和对象(下)--初始化列表,友元,匿名对象
|
11天前
|
C++
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
【C++成长记】C++入门 | 类和对象(下) |Static成员、 友元
|
1月前
|
自然语言处理 安全 程序员
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用(二)
【C++ 泛型编程 进阶篇】 C++ 泛型编程 模板与异常处理、模板与友元之间的使用
26 0
|
2月前
|
C++
【c++】友元
【c++】友元
【c++】友元
|
2月前
|
C++
C++类与对象【友元】
C++类与对象【友元】
|
3月前
|
C++
c++类与对象(五):友元、内部类、临时对象、匿名对象
c++类与对象(五):友元、内部类、临时对象、匿名对象
22 0
|
24天前
|
C++
[C++/PTA] 友元很简单2016final
[C++/PTA] 友元很简单2016final
26 0