简介
本文要解决的两个问题:
- 什么是友元函数?
- 如何定义友元函数?
什么是友元函数
类中的成员变量及成员函数有公有、私有、受保护的概念,当一个函数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
注意事项
- 友元函数的声明是用于指定某个函数对于类的访问权限,并不是通常意义上的函数声明,所以我们需要在类外针对该函数再次声明