ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++的友元函数,友元类及#pragma once的作用

2022-01-14 10:58:00  阅读:182  来源: 互联网

标签:友元 函数 int C++ pragma include once


把代码都放最后吧

友元函数的作用:

可以访问该类的私有属性

但在类的外面定义的时候没有”类::“

所以该友元函数不属于该类

友元函数的意义:

C++友元函数_Bussy的博客-CSDN博客_c++友元函数 csdn

1、友元存在的意义
为什么要有友元函数?友元的存在可以共享数据资源,减小系统的调用开销,提升运行效率。funA想访问B类中的私有成员函数,只需要在B类的声明中加个friend returntype funA(T t);即可。其中friend是友元函数的标识,告诉编译器这是友元函数,不具备this指针,但是它能访问B类的私有成员函数,returntype 函数返回类型, T入参类型,t实参。

2、友元的优点以及缺点:
优点:提升编程效率,提升运行效率,并且表达清晰简单
缺点:破坏了封装机制,所以尽量不使用友元。
 

友元类的作用:

可以让友访问自身的私有属性

#pragma once的作用

1.#pragmaonce这个宏有什么作用?

为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。

在能够支持这两种方式的编译器上,二者并没有太大的区别。但两者仍然有一些细微的区别。

#pragma once用法总结_程序猿老樊的博客-CSDN博客_#pragma once

大家可以试着看一下我的代码

可以删一删#pragma once

friend class A

之类的看看删了哪里报错

出错的内容自己看一下怎么解决

这个字要打的话太多了

第一个

friend.cpp

第二个

friendA.h

第三个

friendB.h

#include <iostream>
#include "friendA.h"
#include "friendB.h"

using namespace std;


int main()
{
    A a(2,3,4);
    B b(4,5,6);
    cout<<ave(a)<<endl;//不是a.ave(a),这是友元函数
    cout<<a.aveB(b)<<endl;
    return 0;
}
#pragma once

#include <iostream>
#include "friendB.h"
using namespace std;

class A{
    private:
        int score1;
        int score2;

    public:
        int score3;
        
        
        friend int ave(A); //注意括号里面是类,跟函数指针的定义有点像
        //友元函数可以访问私有属性       
        // friend void set();
        //对成员进行赋值
        //我可以用构造函数
        //那从功能上讲,可不可以用友元函数
        //友元函数不是类的方法(不能写::)
        //那么就不能访问类的对象的私有属性了
        //所以就需要在友元函数里面用一个可以访问类的对象的私有属性的类的方法了
        //所以比较麻烦
        //所以我就用构造函数了
        A(int a,int b,int c);

        int aveB(B b);
        //这个不是友元函数,就是一个普通的类的方法


};

int ave(A a)
{
    //能访问私有属性
    return (a.score1+a.score2+a.score3)/3;
    //发现这样写是不是没什么特别的
}

int A::aveB(B b)
{
    //能访问私有属性
    return (b.score11+b.score22+b.score33)/3;
    //发现这样写是不是没什么特别的
}


// void set(A a)
// {
//     // cin>>a.score1;//外部函数不能访问私有属性
//     // cin>>a.score2;
//     //所以这种方法不行
//     //所以我要全都注释掉
//     //哈哈哈哈
//     return;
// }

A::A(int a,int b,int c)
{
    score1 = a;
    score2 = b;
    score3 = c;
}
#pragma once

#include <iostream>
#include "friendA.h"

using namespace std;

class B{
    private:
        int score11;
        int score22;

    public:
        int score33;

        B(int a,int b,int c);

        friend class A;
        //用一个比较理想的现实举例子
        //如果我认同了你作为我的朋友,那么我会允许你用一些我的物品
        //比如笔,橡皮之类的(代指成员变量)(没有函数(类似的叫做友元函数))
        //但我不能随便用你的东西,因为你还没有认同我作为你的朋友

};

B::B(int a,int b,int c)
{
    score11 = a;
    score22 = b;
    score33 = c;
}


标签:友元,函数,int,C++,pragma,include,once
来源: https://blog.csdn.net/qq_41423247/article/details/122489253

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有