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;
}
相关文章
|
8天前
|
编译器 数据安全/隐私保护 C++
C++(十四) friend友元
友元机制允许非成员函数或类访问私有成员,提高程序效率,但会破坏封装性。友元可以是函数或类,并以关键字`friend`声明。友元函数不是成员函数,需通过对象访问私有成员。友元类使所有成员函数可访问另一个类的私有成员,常用于简化开发。友元声明位置灵活,但不影响访问控制。使用友元需注意其单向性和非传递性。
|
2月前
|
C++
C++友元函数和友元类的使用
C++中的友元(friend)是一种机制,允许类或函数访问其他类的私有成员,以实现数据共享或特殊功能。友元分为两类:类友元和函数友元。类友元允许一个类访问另一个类的私有数据,而函数友元是非成员函数,可以直接访问类的私有成员。虽然提供了便利,但友元破坏了封装性,应谨慎使用。
63 9
|
2月前
|
编译器 数据安全/隐私保护 C++
C++一分钟之-属性友元与访问控制
【7月更文挑战第9天】C++中的友元机制允许非成员函数或类访问私有和保护成员,打破了封装性。友元需在类内声明,常见的错误包括忘记声明、过度使用及误解友元的非继承性。要避免错误,应明确声明友元,限制其使用,并理解其局限。示例展示了如何声明和使用友元函数来访问私有数据。谨慎使用友元以保持代码的健壮性和可维护性。
19 1
|
2月前
|
编译器 C++
【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)
📚 C++ 知识点概览:探索类的`static`成员、友元及应用🔍。
|
2月前
|
编译器 C++
【C++】详解初始化列表,隐式类型转化,类静态成员,友元
【C++】详解初始化列表,隐式类型转化,类静态成员,友元
|
4月前
|
编译器 C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(上)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
31 1
|
4月前
|
C++
C++程序中的友元
C++程序中的友元
20 2
|
4月前
|
编译器 C++
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
24 2