博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
35 C++基础-友元
阅读量:4148 次
发布时间:2019-05-25

本文共 1601 字,大约阅读时间需要 5 分钟。

1.友元

C++ 中可以使用 friend 关键字将函数、声明为某个类的友元

友元具有一些特权,可以访问 private 的成员

友元只能授予,不能索取,单向,不能传递

2. 友元函数

在类体重使用 friend 关键字进行声明

friend void fun(); // func 是非成员函数,不属于任何类

#ifndef TIME_H#define TIME_Hclass CTime{
public: // 构造函数 CTime(); // 带参数构造函数 CTime(int hour); // 析构函数 ~CTime(); void setHour(int hour); int getHour(); // 友元函数 friend void func();private: int m_nHour;};#endif

此时就可以调用其中的私有变量了

#include 
#include "Time.h"using namespace std;void func() { CTime time(8); // 通过友元,这里可以访问私有变量 time.m_nHour = 3;}int main() { func(); return 0;}

3. 友元类

在类体重使用 friend 关键字声明为自己的友元类

friend Object

  • 头文件
#ifndef DATE_H#define DATE_H// 类的前置声明class CTime;class CDate {public:    CDate(int year, int month, int day);    // 友元的应用    void display(const CTime& time);private:    int m_nYear;    int m_nMonth;    int m_nDay;};#endif
  • 对象文件
#include "Date.h"#include "Time.h"#include 
// 类的前置声明class CTime;using namespace std;// 构造函数CDate::CDate(int year, int month, int day) // 初始化列表,进行参数初始化 :m_nYear(year),m_nMonth(month) ,m_nDay(day){}void CDate::display(const CTime& mCTime){ // 通过友元访问私有变量 cout<
<<" - "<
<<" - "<
<<""<
<
  • 友元对象的声明
#ifndef TIME_H#define TIME_H// 类的前置声明class CDate;class CTime{public:    // 构造函数    CTime();    // 带参数构造函数    CTime(int hour);    // 析构函数    ~CTime();    void setHour(int hour);    int getHour();    // 友元函数    friend void func();    // 友元对象    friend CDate;private:    int m_nHour;};#endif

4. 友元的缺点

面向对象的基本原则包括封装和信息的隐藏,而友元可以访问其他类的私有成员,这是对封装原则的破坏,开发时慎重选择。

转载地址:http://krcti.baihongyu.com/

你可能感兴趣的文章
To do list
查看>>
Study of Source code
查看>>
如何使用BBC英语学习频道
查看>>
浅谈Spring声明式事务管理ThreadLocal和JDKProxy
查看>>
初识xsd
查看>>
java 设计模式-职责型模式
查看>>
构造型模式
查看>>
svn out of date 无法更新到最新版本
查看>>
java杂记
查看>>
RunTime.getRuntime().exec()
查看>>
Oracle 分组排序函数
查看>>
删除weblogic 域
查看>>
VMware Workstation 14中文破解版下载(附密钥)(笔记)
查看>>
日志框架学习
查看>>
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>