C++ friend友元函数和友元类

本文介绍了C++中的友元机制,包括友元函数和友元类。友元允许非成员函数或类的成员函数访问其他类的私有和保护成员。详细阐述了如何声明和使用友元函数,如将非成员函数和其他类的成员函数声明为友元,并解释了友元关系的单向性和不传递性。强调了谨慎使用友元,以保护类的封装性。
摘要由CSDN通过智能技术生成

1.什么是友元?

一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。

2.friend function友元函数

友元函数两点:

  • 在当前类以外定义的、不属于当前类的函数,
  • 在类中声明,但要在前面加 friend 关键字,

这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数

2.1 将非成员函数声明为友元函数

示例一:

#include <iostream>
#include <iostream>
class Student{
   
    private:
        char *m_name;
        int m_age;
        int m_score;
    public:
        Student();
        Student(char *name, int age, int score);
        void setname(char * name){
   m_name = name;};
        void setage(int age){
   m_age = age;};
        void setscore(int score){
   m_score = score;};

        char * getname(){
   return m_name;};
        int getage(){
   return m_age;};
        int getscore(){
   return m_score;};
        //友元函数,不属于student
        friend void show(Student *stu);
};
Student::Student(){
   
    m_name = NULL;
    m_age = 0;
    m_score = 0;
    std::cout << "Student (): called" << "\n";
}
采用参数初始化表
Student::Student(char *name, int age, int score):m_name(name), m_age(age), m_score(score){
   
    std::cout << "Student(char *name, int age, int score):called "<< "\n";
}
void show(Student * stu){
   
    std::cout 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值