# 友元普通函數
## 聲明
friend 類型 函數名();
## 特點
可以突破類的封裝,訪問類中的數據成員
## 例子
~~~
#include <iostream>
using namespace std;
?
class Time
{
public:
? Time(int,int,int);
? ? ? friend void display(Time &); ?
? ? ? //聲明display函數為Time類的友元函數
? private: ? ? ? ? ? ? ? //以下數據是私有數據成員
? int hour;
? ? ? int minute;
? ? ? int sec;
};
?
Time∷Time(int h,int m,int s) ? ? ?
//構造函數,給hour,minute,sec賦初值
{
hour=h;
? minute=m;
? sec=s;
}
?
void display(Time& t) ? ? ? ? ? ? ?
//這是友元函數,形參t是Time類對象的引用
{
cout<<t.hour<<″:″<<t.minute
? <<″:″<<t.sec<<endl;
}
?
int main( )
{
Time t1(10,13,56);
? display(t1);
? return 0; //調用display函數,實參t1是Time類對象
}
/****
結果:10:13:56
****/
~~~
# 友元成員函數
在一個類中,將另一個類中的成員函數聲明為友元成員函數,這個函數可訪問兩個類中的所有數據成員
## 例子
~~~
#include <iostream>
using namespace std;
?
class Date; ? ? ? ? ? ? ? ? //對Date類的提前引用聲明
class Time ? ? ? ? ? ? ? ? //定義Time類
{
public:
? Time(int,int,int);
? ? ? void display(Date &); ? ?
? ? ? //display是成員函數,形參是Date類對象的引用
? private:
? int hour;
? int minute;
? ? ? int sec;
};
?
class Date ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //聲明Date類
{
public:
? Date(int,int,int);
? ? ? friend void Time∷display(Date &); ? ?
? ? ? //聲明Time類display函數為Date類的友元成員函數
? private:
? int month;
? ? ? int day;
? ? ? int year;
};
?
Time∷Time(int h,int m,int s)//類Time的構造函數
{
hour=h;
? minute=m;
? sec=s;
}
?
void Time∷display(Date &d) ? ? ?
//display的作用是輸出年、月、日和時、分、秒
{
cout<<d.month<<″/″<<d.day<<″/″
? <<d.year<<endl;//引用Date類對象中的私有數據
? cout<<hour<<″:″<<minute<<″:″
? <<sec<<endl; //引用本類對象中的私有數據
}
?
Date∷Date(int m,int d,int y) //類Date的構造函數
{
month=m;
? day=d;
? year=y;
}
?
int main( )
{
Time t1(10,13,56); ? ? ? ? //定義Time類對象t1
? Date d1(12,25,2004); ? ? //定義Date類對象d1
? t1.display(d1); ? ? ? ? ? ? ? ?
? //調用t1中的display函數,實參是Date類對象d1
? ?
? return 0;
}
~~~
# 友元類
## 聲明
在一個類中將另一個類聲明為友元
格式:friend 類名;
## 特點
* 友元關系是單向的
* 友元關系不能傳遞
- 介紹
- 編程設計語言
- 第一章 對C++的初步認識
- 1.2 最簡單的C++程序
- 1.3 C++對C的補充
- 1.3.1 return
- 1.3.2 輸入輸出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定義常變量
- 1.3.5 函數原型聲明
- 1.3.6 內置函數
- 1.3.7 函數重載
- 1.3.8 函數模板
- 1.3.9 有默認值的參數
- 1.3.10 作用域
- 1.3.11 const修飾指針
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 變量
- 1.3.15 字符串變量
- 第二章 類與對象
- 2.2 類的聲明和對象的定義
- 2.3 類的成員函數
- 第三章 關于類和對象的進一步討論
- 3.1 構造函數
- 3.1.1 對象的初始化
- 3.1.2 構造函數
- 3.2 析構函數
- 3.3調用析構函數和構造函數的順序
- 3.4 對象數組
- 3.5 對象指針
- 3.6 共享數據的保護
- 3.7 對象的建立與釋放
- 3.8 對象的賦值與復制
- 3.9 靜態成員
- 3.10 友元
- 3.11 類模板
- 第四章 運算符重載
- 數據類型轉換
- 運算符重載
- 重載流插入運算符和流提取運算符
- 第五章 繼承與派生
- 繼承與派生
- 第六章 多態性與虛函數
- 多態性
- 虛函數
- 純虛函數與抽象類