C++ 学习之路(5):友元函数与友元类
来源:互联网 发布:java 二进制流上传 编辑:程序博客网 时间:2024/05/17 04:37
---------------------------1------------------------/* 友元函数: i.非成员函数作为友元函数: ①在类中:friend + 类型 + 函数名(参数) <-------声明 在类外:类型 + 函数名(对象参数) <-------定义 ②可在多个类中声明同一个友元函数,其声明与定义如上(只需在类外定义1次) ③注意:在定义友元函数时其参数一般为类的对象,因此若要定义多个类的友元函数,要提前声明各类。 ii.成员函数作为友元函数(友元函数可直接访问其主类的成员,访问其他类的成员需加上其他类的对象名) ①在主类中:类型 + 函数名(参数) <-------声明,和声明成员函数一样 在其他类中:friend + 类型 + 主类名 + “::” + 友元函数名(参数) ②在定义友元函数时其参数一般为类的对象,因此若要定义多个类的友元函数,要提前声明各类。*/// 由于声明多个类的友元函数与单个类的友元函数形式一样,因此本例使用多个函数的友元函数。#include <iostream>using namespace std;class Date; // 此处为提前声明类 Dateclass Time{ public: Time(int h,int m,int s) { hour = h; minute = m; sec = s; } // 声明函数dispDate_Time()为类Time的成员函数 void dispDate_Time(Date&); // 声明函数showDate_Time()为类Time的友元函数 // 此处用到第三行类Date的声明 friend void showDate_Time(Date &d, Time &t); private: int hour; int minute; int sec;};class Date{ public: Date(int y,int m,int d) { year = y; month = m; day = d; } // 声明类Time的成员函数dispDate_Time()为类Date的友元函数(成员函数作友元函数) friend void Time::dispDate_Time(Date&); // 声明函数showDate_Time()为类Date的友元函数(非成员函数作友元函数) friend void showDate_Time(Date &d, Time &t); private: int year; int month; int day;};// (非成员)友元函数的定义(形参分别为对类Date和类Time的对象的引用)void showDate_Time(Date &d, Time &t){ cout<<"友元非成员函数的调用:"<<endl; cout<<d.year<<"."<<d.month<<"."<<d.day<<endl; cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;}// (成员)友元函数的定义(形参为对类Date的对象的引用)void Time::dispDate_Time(Date &d){ cout<<"友元成员函数函数的调用:"<<endl; cout<<d.year<<"."<<d.month<<"."<<d.day<<endl; // 可直接调用本类Time数据成员 cout<< hour <<":"<< minute <<":"<< sec <<endl; }int main(){ Date date1(2016,3,12); // 定义类Date的对象date1 // 调用友元非成员函数showDate_Time() // 实参是对象date1和time1. showDate_Time(date1,time1); Date date2(2016,3,12); // 定义类Date的对象date2 // 调用友元成员函数dispDate_Time() // 实参是对象date2和time2 time2.dispDate_Time(date1); return 0;}---------------------------2------------------------/* 友元类: i.将一个类X声明为另一个类Y的友元类。 即在类Y的声明中(可公有也可私有):friend X; <-------注意:要在类Y的定义之前提前声明类X,在定义完类Y后再定义类X。 ii, 即 类X为类Y的友元类 <=> 即 类X中所有成员函数 都可访问 类Y中所有成员。 (友元类的关系是单向的,不具交换性的.) */#include <iostream>using namespace std;class Date;class Time{ public: Time(int h,int m,int s) { hour = h; minute = m; sec = s; } // 声明函数showDate_Time()为类Time的成员函数 void showDate_Time(Date&); private: int hour; int minute; int sec;};class Date{ public: Date(int y,int m,int d) { year = y; month = m; day = d; } // 声明类Time为类Date的友元类 // 则类Time中的所有成员函数为类Date的友元函数 friend Time; private: int year; int month; int day;};// 定义类Time的成员函数showDate_Time()// 同时也为类Date的友元函数,形参为Date类对象的引用void Time::showDate_Time(Date &d){ cout<<"调用类Time的成员函数(也是类Date的友元函数):"<<endl; cout<<d.year<<"."<<d.month<<"."<<d.day<<endl; // 可直接调用本类Time数据成员 cout<< hour <<":"<< minute <<":"<< sec <<endl; }int main(){ Date date3(2016,3,12); // 定义类Date的对象date3 Time time3(21,30,34); // 定义类TIme的对象time3 // 调用类Time的成员函数showDate_Time(),也是类Date的友 // 元函数。 // 实参是对象date3和time3. time3.showDate_Time(date3); return 0;}
0 0
- C++ 学习之路(5):友元函数与友元类
- C++学习摘要之六:友元函数与友元类
- C++学习摘要之六:友元函数与友元类
- C++学习摘要之六:友元函数与友元类 .
- C++学习摘要之六:友元函数与友元类
- C++学习:友元函数与友元类
- 一步一步学习C++(类)之友元函数
- c++学习笔记 友元函数与友元类s
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- 友元函数与友元类
- MySql数据库乱码
- luogu 1990 覆盖墙壁 (状压dp)
- 大小写转化
- 斗地主游戏-应用程序-01
- 我的第一次C++上机实验
- C++ 学习之路(5):友元函数与友元类
- Java 8简明教程
- AdaBoost算法2(基于单层决策树)
- leetcode之Additive Number
- Java Thread Join Example with Explanation
- spark新手教程
- HDOJ 5640-King's Cake【数学】
- mac下使用Navicat
- 【leetcode】Array——Jump Game2(45)