亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++教程:C++友元類講解

2020-05-23 14:25:46
字體:
來源:轉載
供稿:網友
在編寫鏈表類的時候我們有著這樣的困惑:鏈表類和鏈表結點類都是我們編寫的,我們能保證鏈表類對鏈表結點類的操作都是安全的。但由于類的封裝性,我們不得不編寫一些成員函數,以便于鏈表類訪問鏈表結點類的私有成員數據。好在鏈表結點類的成員數據并不是很多,否則豈不是需要一大堆成員函數來供別的類訪問?對于這種情況,我們能否告訴鏈表結點類:“鏈表類是安全的,讓它訪問你的私有成員吧”?

在C++中,可以用友元來解決這種尷尬的問題。所謂友元,就是作為一個類的“朋友”,可以例外地訪問它的私有成員數據或私有成員函數。

友元類

類似于鏈表類和鏈表結點類的問題,我們可以用友元類來解決。即鏈表類是鏈表結點類的“朋友”,可以直接訪問鏈表結點類的私有成員數據或私有成員函數。顯然,要做鏈表結點類的“朋友”,必須要得到鏈表結點類的認可。所以我們必須在鏈表結點類的聲明中告訴電腦,鏈表類是它認可的“朋友”,可以訪問它的私有成員。聲明友元類的語句格式為:
    friend class 類名;
下面我們來看一下,友元是如何讓我們更方便地設計程序的:(程序16.2.1)
//node.h
class Node//聲明一個鏈表結點類
{
   friend class Linklist;//在Node類中聲明友元類Linklist
   public:
   Node();
   Node(Node &n);
   Node(int i,char c='0');
   Node(int i,char c,Node *p,Node *n);
   ~Node();
   static int allocation();
   private:
   int idata;
   char cdata;
   Node *prior;
   Node *next;
   static int count;
};
//node.cpp
#include "node.h"
#include <iostream>
using namespace std;
int Node::count=0;
Node::Node()
{
   cout <<"Node constructor is running..." <<endl;
   count++;
   idata=0;
   cdata='0';
   prior=NULL;
   next=NULL;
}
Node::Node(int i,char c)
{
   cout <<"Node constructor is running..." <<endl;
   count++;
   idata=i;
   cdata=c;
   prior=NULL;
   next=NULL;
}
Node::Node(int i,char c,Node *p,Node *n)
{
   cout <<"Node constructor is running..." <<endl;
   count++;
   idata=i;
   cdata=c;
   prior=p;
   next=n;
}
Node::Node(Node &n)
{
   count++;
   idata=n.idata;
   cdata=n.cdata;
   prior=n.prior;
   next=n.next;
}
Node::~Node()
{
   count--;
   cout <<"Node destructor is running..." <<endl;
}
int Node::allocation()
{
   return count;
}
//linklist.h
#include "node.h"
#include <iostream>
using namespace std;
class Linklist//定義一個鏈表類
{
   public:
   Linklist(int i,char c);
   Linklist(Linklist &l);
   ~Linklist();
   bool Locate(int i);
   bool Locate(char c);
   bool Insert(int i=0,char c='0');
   bool Delete();
   void Show();
   void Destroy();
   private:
   Node head;
   Node * pcurrent;
};
Linklist::Linklist(int i,char c):head(i,c)//鏈表的構造函數
{
   cout<<"Linklist constructor is running..."<<endl;
   pcurrent=&head;
}
Linklist::Linklist(Linklist &l):head(l.head)
{
   cout<<"Linklist Deep cloner running..." <<endl;
   pcurrent=&head;
   Node * ptemp1=l.head.next;//直接訪問私有成員數據
   while(ptemp1!=NULL)
   {
      Node * ptemp2=new Node(ptemp1->idata,ptemp1->cdata,pcurrent,NULL);
      pcurrent->next=ptemp2;
      pcurrent=pcurrent->next;
      ptemp1=ptemp1->next;
}
}
Linklist::~Linklist()
{
   cout<<"Linklist destructor is running..."<<endl;
   Destroy();
}
bool Linklist::Locate(int i)
{
   Node * ptemp=&head;
   while(ptemp!=NULL)
   {
      if(ptemp->idata==i)
      {
         pcurrent=ptemp;
         return true;
      }
      ptemp=ptemp->next;
   }
   return false;
}
bool Linklist::Locate(char c)
{
   Node * ptemp=&head;
   while(ptemp!=NULL)
   {
      if(ptemp->cdata==c)
      {
         pcurrent=ptemp;
         return true;
      }
      ptemp=ptemp->next;
   }
   return false;
}
bool Linklist::Insert(int i,char c)
{
   if(pcurrent!=NULL)
   {
      Node * temp=new Node(i,c,pcurrent,pcurrent->next);
      if (pcurrent->next!=NULL)
      {
         pcurrent->next->prior=temp;
      }
      pcurrent->next=temp;
      return true;
   }
   else
   {
      return false;
   }
}
bool Linklist::Delete()
{
   if(pcurrent!=NULL && pcurrent!=&head)
   {
      Node * temp=pcurrent;
      if (temp->next!=NULL)
      {
         temp->next->prior=pcurrent->prior;
      }
      temp->prior->next=pcurrent->next;
      pcurrent=temp->prior;
      delete temp;
      return true;
   }
   else
   {
      return false;
   }
}
void Linklist::Show()
{
   Node * ptemp=&head;
   while (ptemp!=NULL)
   {
      cout <<ptemp->idata <<'/t' <<ptemp->cdata <<endl;
      ptemp=ptemp->next;
   }
}
void Linklist::Destroy()
{
   Node * ptemp1=head.next;
   while (ptemp1!=NULL)
   {
      Node * ptemp2=ptemp1->next;
      delete ptemp1;
      ptemp1=ptemp2;
   }
   head.next=NULL;
}
//main.cpp同程序16.1

運行結果:
請輸入一個整數和一個字符:
3 F
Node constructor is running...
Linklist constructor is running...
Node constructor is running...
Node constructor is running...
After Insert
3 F
2 B
1 C
Node Allocation:3
Node constructor is running...
An independent node created
Node Allocation:4
Node destructor is running...
Linklist destructor is running...
Node destructor is running...
Node destructor is running...
Node destructor is running...

可以看到,程序的運行結果和程序16.1的結果一樣,但是鏈表結點類沒有程序16.1中那么繁瑣。并且在鏈表類中完全都是直接訪問鏈表結點類的成員數據,大大減少了調用函數產生的開銷,這樣執行程序的效率也就得以提高了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
乱亲女秽乱长久久久| 亚洲精选在线观看| 庆余年2免费日韩剧观看大牛| 日韩在线观看免费全| 一区二区成人精品| 欧美精品在线看| 国产日韩欧美在线观看| 国产日韩精品在线播放| 日本国产精品视频| 91av在线播放视频| 九九热这里只有精品免费看| 欧美视频免费在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产精品十八以下禁看| 欧美性精品220| 亚洲欧美在线播放| 这里只有精品视频| 亚洲亚裔videos黑人hd| 国产不卡精品视男人的天堂| 亚洲国语精品自产拍在线观看| 国产一区二区三区直播精品电影| 久久亚洲国产精品| 欧美一级电影免费在线观看| 国产香蕉精品视频一区二区三区| 亚洲欧美视频在线| 91精品国产高清自在线看超| 国产999精品久久久影片官网| 永久免费看mv网站入口亚洲| 国产亚洲精品久久久| 国产91在线播放九色快色| 国产精品视频免费在线观看| 久久999免费视频| 亚洲人成电影网站色www| 久久久久久国产精品久久| 中国china体内裑精亚洲片| 日韩免费在线播放| 亚洲一区www| 欧美另类交人妖| 国产精品久久久精品| 国产精品欧美日韩一区二区| 一本色道久久88亚洲综合88| 91久久久久久久久久| 日韩欧美在线视频免费观看| 88国产精品欧美一区二区三区| 中文字幕日韩欧美在线| 欧美有码在线观看视频| 欧美激情视频网址| 欧美夜福利tv在线| 色噜噜国产精品视频一区二区| 国产精品高潮视频| 亚洲精品wwwww| 91人人爽人人爽人人精88v| 91网站在线免费观看| 国产区亚洲区欧美区| 精品欧美国产一区二区三区| 亲子乱一区二区三区电影| 最近2019中文字幕大全第二页| 欧美一区二区大胆人体摄影专业网站| 国产成人精品优优av| 国产亚洲人成a一在线v站| 91在线视频精品| 日韩av手机在线观看| 国产女人18毛片水18精品| 69av成年福利视频| 久久在线观看视频| 精品视频久久久久久久| 奇米成人av国产一区二区三区| 久久久久久久久久久免费精品| 久久久亚洲欧洲日产国码aⅴ| 欧美激情在线有限公司| 在线日韩欧美视频| 国产一区二区黑人欧美xxxx| 国产91精品久久久| 国内精品中文字幕| 伦伦影院午夜日韩欧美限制| 日韩av在线网| 欧美夫妻性生活xx| 亚洲资源在线看| 亚洲热线99精品视频| 国产精品视频男人的天堂| 欧美中文在线视频| 国产不卡av在线| 久久影视电视剧免费网站清宫辞电视| 在线免费观看羞羞视频一区二区| 国产乱肥老妇国产一区二| 久久精品国产亚洲精品2020| 97**国产露脸精品国产| 91精品视频网站| 欧美性xxxx极品hd欧美风情| 亚洲精品欧美日韩| www国产亚洲精品久久网站| 日韩精品在线观看一区二区| 国产色婷婷国产综合在线理论片a| 日本亚洲欧洲色α| 欧洲成人在线视频| 97久久超碰福利国产精品…| 午夜精品一区二区三区在线视频| 国产成人激情小视频| 国产精品久久一| 国产精品成人观看视频国产奇米| 第一福利永久视频精品| 国产精品女人网站| 亚洲第一中文字幕在线观看| 日本欧美中文字幕| 97香蕉久久超级碰碰高清版| 国产成人短视频| 成人福利网站在线观看11| 96精品久久久久中文字幕| 欧美大奶子在线| 欧洲亚洲在线视频| 成人免费视频网| 这里只有精品久久| 91精品一区二区| 亚洲精品欧美极品| 欧美日韩综合视频| 国产精品av电影| 91理论片午午论夜理片久久| 亚洲视频欧美视频| 国产成人一区二区三区电影| 欧美视频免费在线观看| 欧美寡妇偷汉性猛交| 懂色av影视一区二区三区| 国模叶桐国产精品一区| 欧美成人一区在线| 亚洲午夜未删减在线观看| 国内成人精品视频| 国产精品自拍偷拍| 欧美激情国产日韩精品一区18| 欧美日韩在线视频一区二区| 国产精品视频xxxx| 国产成人精品电影| 久久最新资源网| 国产精品一久久香蕉国产线看观看| 91夜夜揉人人捏人人添红杏| 欧美国产视频一区二区| 日韩在线视频线视频免费网站| 日韩中文字幕在线播放| 国产在线观看精品| 97人洗澡人人免费公开视频碰碰碰| 国内精品模特av私拍在线观看| 精品福利在线视频| 亚洲国产高清高潮精品美女| 日韩高清欧美高清| 亚洲色图综合网| 国内精品久久久久久影视8| 日本精品视频在线播放| 国产不卡精品视男人的天堂| 国产精品免费电影| 午夜精品美女自拍福到在线| 九九九久久久久久| 激情成人中文字幕| 久久韩国免费视频| 欧美一性一乱一交一视频| 国内成人精品一区| 成人h视频在线观看播放| 日韩在线视频国产| 国产精品吊钟奶在线| 日日狠狠久久偷偷四色综合免费| 日韩免费av片在线观看| 国产精品一区二区三区免费视频| 中文字幕日韩av电影| 热久久这里只有精品| 久久亚洲一区二区三区四区五区高| 国产欧美精品一区二区三区介绍|