用友元函数
友元函数会破坏封装性,C++能不用就尽量不用
#include <iostream>
class CLink;
class Node
{
public:
Node(int val)
{
mdata=val;
pnext=NULL;
}
//不用写析构函数 因为头结点是在栈上开辟的
//不需要手动去释放 所以不写析构函数
private:
int mdata;
Node* pnext;
friend class CLink;//友元关系//单向性
};
/*
构造函数的初始化列表
*/
class CLink
{
public:
CLink() :head(0){}
void InsertHead(int val)
{
Node* pnewnode=new Node(val);
pnewnode->pnext=head.pnext;
head.pnext=pnewnode;
}
void Show()
{
Node* pCur=head.pnext;
while(pCur!=NULL)
{
std::cout<<pCur->mdata<<" ";
pCur=pCur->pnext;
}
std::cout<<std::endl;
}
~CLink()
{
Node* pCur=head.pnext;
Node* pBack=pCur;
while(pCur!=NULL)
{
pBack=pCur->pnext;
delete pCur;
pCur=pBack;
}
head.pnext=NULL;
}
Node* Find(int val)
{
Node* pCur=head.pnext;
while(pCur->pnext!=NULL)
{
if(pCur->mdata==val)
{
break;
}
pCur=pCur->pnext;
}
return pCur;
}
typedef Node MyNode;
private:
Node head;
};
int main()
{
CLink c1;
for(int i=0;i<10;i++)
{
c1.InsertHead(i+1);
}
c1.Show();
CLink::MyNode* pf=c1.Find(5);
std::cout<<pf<<std::endl;
return 0;
}
不用友元函数,不会破坏函数的封装性
#include <iostream>
class CLink
{
public:
CLink() :head(0){};
void InsertHead(int val)
{
Node* pnewnode=new Node(val);
pnewnode->pnext=head.pnext;
head.pnext=pnewnode;
}
void Show()
{
Node* pCur=head.pnext;
while(pCur!=NULL)
{
std::cout<<pCur->mdata<<" ";
pCur=pCur->pnext;
}
std::cout<<std::endl;
}
~CLink()
{
Node* pCur=head.pnext;
Node* pBack=pCur;
while(pCur!=NULL)
{
pBack=pCur->pnext;
delete pCur;
pCur=pBack;
}
head.pnext=NULL;
}
class Node;
Node* Find(int val)
{
Node* pCur=head.pnext;
while(pCur->pnext!=NULL)
{
if(pCur->mdata==val)
{
break;
}
pCur=pCur->pnext;
}
return pCur;
}
typedef Node MyNode;
private:
class Node
{
public:
Node(int val):mdata(val),pnext(NULL){}
public:
int mdata;
Node* pnext;
};
Node head;
};
int main()
{
CLink c1;
for(int i=0;i<10;i++)
{
c1.InsertHead(i+1);
}
c1.Show();
CLink::MyNode* pf=c1.Find(5);
std::cout<<pf<<std::endl;
return 0;
}