友元类

 

/////////////////////////////////
#include <iostream>
using namespace std;
class Area;
class Point
{
private:
friend class Area;
  void show();
};

class Area
{
public:
void display();
private:
int x,y,z;
};
void Point::show()
{
cout<<"Point!"<<endl;
}
void Area::display()
{
Point p;
p.show();
}
int main()
{
Area a;
a.display();
return 0;
}

友元类与Pimpl应用报错

06-19

[code=C/C++]//CBase类是一个一般的类,而Foreign类要以友元的形式访问CBase中的私有成员rn//现在问题是在main中声明的变量CForeign mybase2能访问CBase中私有成员age,而不能访问pImp指向的name和val。rn//其中,pImp采用了Pimpl技术,实现隐藏数据成员机制,但就是不懂为什么同样是私有,就不能运行了rn//我是在VS2005的控制台下调试运行rn//望各位前来指教rn//////////////////////////Base.h头文件///////////////////////rn#pragma oncern#include rn#include rnusing namespace std;rnrnclass CForeign;rnclass CBasernrn friend class CForeign;rn rnpublic:rn CBase(void);rn ~CBase(void);rn rn void DisplayData();rn rn void SetValues(const string& _Str,const int& _Value);rnprivate:rn int age;rn class CBaseImp;rn CBaseImp* pImp;rn;rnrn//////////////////////////Base.cpp源文件文件///////////////////////rnrn#include rn#include rnrnrn#include "Base.h"rnusing namespace std;rnrnrnclass CBase::CBaseImprnrnpublic:rn string name;rn int val;rnrn CBaseImp()rn rn name="";rn val=0;rn rn;rnrnCBase::CBase(void)rnrn pImp=new CBase::CBaseImp();rnrnrnCBase::~CBase(void)rnrn delete pImp;rnrnrnvoid CBase::DisplayData()rnrn cout<name<<" "<val<<" "<name=_Str;rn pImp->val=_Value;rnrn//////////////////////////Foreign.h头文件//////////////////////rn#pragma oncern#include rn#include rn#include "Base.h"rnusing namespace std;rnrnclass CForeignrnrnpublic:rn CForeign(void);rn ~CForeign(void);rn CBase* pBase;rn rnrn void SetBaseName(const string& _Str);rnrn void SetBaseValue(const int& _Value);rnrn void SetAge(const int& _Age);rnrn rn;rnrnrn//////////////////////////Foreign.cpp源文件//////////////////////rn#include "Foreign.h"rnrnCForeign::CForeign(void)rnrn pBase=new CBase();rnrnrnCForeign::~CForeign(void)rnrn delete pBase;rnrnrnvoid CForeign::SetAge(const int& _Age)rnrn pBase->age=_Age;rnrnrnvoid CForeign::SetBaseName(const string& _Str)rnrn //pBase->pImp->name=_Str;// 取消注释,编译不通过rnrnrnvoid CForeign::SetBaseValue(const int& _Value)rnrn //pBase->pImp->val=_Value;// 取消注释,编译不通过rnrnrn//////////////////////////Main.h主文件//////////////////////rn#include rn#include "Base.h"rn#include "Foreign.h"rnrnusing namespace std;rnrnvoid main()rnrn rn CForeign mybase2;rn mybase2.pBase->DisplayData();rn mybase2.SetAge(30);rn //mybase2.SetBaseName("Tom");rn //mybase2.SetBaseValue(33);rn mybase2.pBase->DisplayData();rn[/code]

c++友元类,友元函数

03-23

[code=c]#ifndef _BST_H_HITHUMING_INCLUDE_rn#define _BST_H_HITHUMING_INCLUDE_rn#includernusing namespace std;rntemplaternclass nodernrnpublic:rn node():lchild(NULL),rchild(NULL) ;rn node(T p)rn rn this->data=p;rn lchild=NULL;rn rchild=NULL;rn ;rn ~node()rn rn delete this;rn ;rn void setup(T d,node* l,node r)rn rn data=d;rn lchild=l;rn rchild=r;rn ;rn T return_data()rn rn return data;rn ;rn node* return_lc()rn rn return lchild?lchild:NULL;rn ;rn node* return_rc()rn rn return rchild?rchild:NULL;rn ;rn friend class BST;//声明啦友元类,为什么下面还不能访问?rnprivate:rn T data;rn node* lchild,rchild;rn;rntemplate rnclass BSTrnrnpublic:rn void CreateBST();//返回父节点的指针rn void InsertBST(T key,node* F);//插入的类型,还有插入的位置rn node* SearchBST(T key,node* F);//查找rn void in_order(node* t);rn node* return_rt();rnprivate:rn node* root;rn;rntemplate rnvoid BST::CreateBST()rnrn root=NULL;rn T m;rn while(cin >> m&&m!='#')rn InsertBST(m,root);rnrntemplate rnvoid BST::InsertBST(T key,node* F)rnrn if(F==NULL)rn rn// F=new node;rn F.setup(key,NULL,NULL);rn rn else if (key F.return_data())rn InsertBST(key,F.return_rc());rn else return;rnrntemplate rnnode* BST::SearchBST(T k,node* F)rnrn node* p =F;rn if (p== NULL || k == p.return_data() ) /* 递归终止条件*/rn return p;rn if ( k < p.return_data())rn return (SearchBST (k, p.return_lc())); /* 查找左子树*/rn elsern return (SearchBST(k,p.return_rc())) ; /* 查找右子树*/rnrntemplate rnvoid BST::in_order(node* t)rnrn if(t!=NULL)rn rn in_order(t.return_lc());rn cout << t.return_data();rn in_order(t.return_rc());rn rnrn#endif[/code]rn上面一个查找树的程序,可能实现上还有问题,但是为什么生命友元类啦还是不能访问?求解释!

new与友元类的访问问题!

07-08

程序中两类,CCardReaderSrv_EmuDlg和CCardReaderSrv_EmuDlgAutoProxy,分别已简称DLG【主要是画面显示】和PROXY【主要是底层函数】,在DLG.H文件定义如下rnclass CCardReaderSrv_EmuDlgAutoProxy;rn// CCardReaderSrv_EmuDlg dialogrnclass CCardReaderSrv_EmuDlg : public CDialogrnrn DECLARE_DYNAMIC(CCardReaderSrv_EmuDlg);rn friend class CCardReaderSrv_EmuDlgAutoProxy;rnpublic:rn void AddHeadInfoStr(LPCTSTR strInfo);rnprotected:rn CCardReaderSrv_EmuDlgAutoProxy* m_pAutoProxy;rn。。。rn在PROXY.H文件定义如下rnclass CCardReaderSrv_EmuDlg;rn// CCardReaderSrv_EmuDlgAutoProxy command targetrnclass CCardReaderSrv_EmuDlgAutoProxy : public CCmdTargetrnrnDECLARE_DYNCREATE(CCardReaderSrv_EmuDlgAutoProxy)rnCCardReaderSrv_EmuDlgAutoProxy(); rnpublic:rn CCardReaderSrv_EmuDlg* m_pDialog;rn。。。rn之前在DLG里实现访问PRXOY的相关程序,在PROXY回调DLG里面定义的rnvoid CCardReaderSrv_EmuDlg::AddHeadInfoStr(LPCTSTR strInfo)rnrn m_InfoEdit.AddHeadInfoStr(strInfo);rnrn函数如此调用时m_pDialog->AddHeadInfoStr(str);出现了"Unhandled exception in ***.exe 0xc0000005:Access Violation,急!"问题,之后我参考其他文章在DLG里面如此实现rnm_pAutoProxy = new CCardReaderSrv_EmuDlgAutoProxy();rnm_pAutoProxy->Init();此时PROXY回调DLG里面AddHeadInfoStr函数不报上述错误了,但是碰到了最后编译的程序不能完全退出问题,烦请请教各位大哥指点一下,看看有何方法能解决上述问题,谢谢,小弟感激不尽!

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试