当前位置:编程学习 > C/C++ >>

C++学习之友元函数

为什么要引入友元函数?
因为我们不能在类的外部访问类的私有变量。

传统的访问方法:


//============================================================================ 
// Name        : main.cpp 
// Author      : ShiGuang 
// Version     : 
// Copyright   : sg131971@qq.com 
// Description : Hello World in C++, Ansi-style 
//============================================================================ 
 
#include <iostream> 
#include <string> 
using namespace std; 
 
class aa 

private: 
    float a; 
    float b; 
public: 
    float &aaa() 
    { 
        return (a); 
    } 
    float &bbb() 
    { 
        return (b); 
    } 
}; 
 
aa sum(aa a, aa b) 

    aa c; 
    c.aaa() = a.aaa() + b.aaa(); 
    c.bbb() = a.bbb() + b.bbb(); 
    return (c); 

 
int main(int argc, char **argv) 

    aa a, b; 
    a.aaa() = 1; 
    a.bbb() = 2; 
    b.aaa() = 3; 
    b.bbb() = 4; 
    aa c = sum(a, b); 
    cout << c.aaa() << endl; 
    cout << c.bbb() << endl; 
 
    return 0; 

引入友元函数之后:

//============================================================================ 
// Name        : main.cpp 
// Author      : ShiGuang 
// Version     : 
// Copyright   : sg131971@qq.com 
// Description : Hello World in C++, Ansi-style 
//============================================================================ 
 
#include <iostream> 
#include <string> 
using namespace std; 
 
class aa 

private: 
    float a; 
    float b; 
public: 
    float &aaa() 
    { 
        return (a); 
    } 
    float &bbb() 
    { 
        return (b); 
    } 
    friend aa sum(aa, aa); 
    friend int main(int argc, char **argv); 
}; 
 
aa sum(aa s, aa t) 

    aa c; 
    c.a = s.a + t.a; 
    c.b = s.b + t.b; 
    return (c); 

 
int main(int argc, char **argv) 

    aa a, b; 
    a.a = 1; 
    a.b = 2; 
    b.a = 3; 
    b.b = 4; 
    aa c = sum(a, b); 
    cout << c.a << endl; 
    cout << c.b << endl; 
 
    return 0; 

两个函数运行结果完全一样。www.zzzyk.com
对于使用友元:
(1)声明的位置既可在public区,也可在protected区。友元函数虽然是在类内进行声明,但它不是该类的成员函数,不属于任何类。
(2)在类外定义友元函数,与普通函数的定义一样,一般与类的成员函数放在一起,以便类重用时,一起提供其友元函数。
(3) 友元函数是能访问类的所有成员的普通函数,一个函数可以是多个类的友元函数,只需在各个类中分别声明。
(4)友元能使程序精炼,提高程序的效率。
(5)友元破坏了类的封装,使用时,要权衡利弊,在数据共享与信息隐藏之间选择一个平衡点。

 摘自 sg131971的学习笔记

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,