C++类中的友元函数[1]

简介

本文要解决的两个问题:

  • 什么是友元函数?
  • 如何定义友元函数?

什么是友元函数

类中的成员变量及成员函数有公有、私有、受保护的概念,当一个函数A不是类的成员函数,但是希望可以访问类中的非公有成员,此时需要将函数A声明为类的友元函数

总的来说:

  • 友元函数并不属于类的成员函数
  • 友元函数可以访问类的非公共有成员

如何定义友元函数

如果一个类希望把一个函数作为自己的友元函数,只需要增加一条以friend关键字开始的函数声明语句

例程

#include <iostream>
#include <string>

class Book
{
public:
    friend void friendPrint(Book& bk); //声明friendPrint为Book类的友元函数
    Book(std::string& title,unsigned int price)
        :bookTitle(title),bookPrice(price){}
    std::string getTitle(void) const
    {
        return bookTitle;
    }
    unsigned int getPrice(void) const
    {
        return bookPrice;
    }
private:
    std::string bookTitle;
    unsigned int bookPrice;
};
void friendPrint(Book& bk)
{
    std::cout << "friend function:-------" << "\n";
    //注意这里访问Book::bookTitle与Book::bookPrice的方式
    //它们都是私有成员哦
    std::cout << "bookTitle:" <<bk.bookTitle  << "\n"
        << "boolPrice:" << bk.bookPrice << "\n";
}
void unfriendPrint(Book& bk)
{
    std::cout << "unfriend function:--------" << "\n";
    std::cout << "bookTitle:" << bk.getTitle() << "\n"
        << "boolPrice:" << bk.getPrice() << "\n";
}

int main()
{
    Book bk(std::string("C++ Primer"), 88);
    unfriendPrint(bk);
    friendPrint(bk);
    return 0;
}
//输出结果:
unfriend function:--------
bookTitle:C++ Primer
boolPrice:88
friend function:-------
bookTitle:C++ Primer
boolPrice:88

注意事项

  • 友元函数的声明是用于指定某个函数对于类的访问权限,并不是通常意义上的函数声明,所以我们需要在类外针对该函数再次声明
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,739评论 1 51
  • C++类和对象 C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。类是 C++ 的核心...
    863cda997e42阅读 777评论 0 4
  • 1.面向对象的程序设计思想是什么? 答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2.什么是类?...
    少帅yangjie阅读 5,146评论 0 14
  • 在需要重新布局的地方 只需要重新调用self.view.layouIfNeed只调用控件的layouifneed...
    __Objc阅读 198评论 0 0
  • 倒计时第二天,集体打扫。 清除掉没用的、遗漏的在边角的、还有一两个存量的包装,拭去桌面上死角里寂寞已久的灰尘,给屏...
    莫准阅读 201评论 0 0

友情链接更多精彩内容