为什么要使用友元
-
C++是面向对象的,目的之一:封装
-
友元函数提供直接访问对象的私有成员的接口。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。
-
封装:
优点之一,就是安全。
缺点:在某些特殊的场合,不是很方便。
友元的两种使用形式
友元函数、友元类。
友元函数
使用全局函数作为类的友元函数
Computer.h
#pragma once
#include <string>
using namespace std;
class Computer{
public:
Computer();
string description() const;
//把外部的函数声明成Computer类的友元函数
//在外面就可以访问Computer类所有成员
friend void upgrade(Computer& computer);
private:
string cpu; //计算机的CPU芯片
//友元可以声明在私有权限下, 也可以声明在公有权限下
//friend void upgrade(Computer& computer);
};
Computer.cpp
#include <sstream>
#include "Computer.h"
Computer::Computer(){
this->cpu = "Inter i7";
}
string Computer::description() const{
stringstream ret;
ret << "Cpu: " << cpu;
return ret.str();
}
main.cpp
#include <iostream>
#include <Windows.h>
#include "Computer.h"
//把Computer类里的cpu私有数据升级成i9
void upgrade(Computer &computer) {
computer.cpu = "Inter i9";
}
int main(void) {
Computer c1;
cout << c1.description() << endl; // Inter i7
upgrade(c1);
cout << "升级后" << endl;
cout << c1.description() << endl;
system("pause");
return 0;
}