两个没有继承关系,没有引用关系的对象可能如何通信?

tmathliao 2003-06-27 02:03:25
现在有两个对象,A和B,由相同的主程序创建,都有ADO操作的相应属性和方法,
A对象是我不可见的(封装了),主程序创建B对象时传递一个int变量作为参数,但是我发现A,B没有继承关系,没有引用关系,但是B却可以访问A的数据。这是为什么呢?B访问的是A的没有保存在数据库中的数据。
B的定义中也没有接口。
...全文
43 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThinkX 2003-07-03
  • 打赏
  • 举报
回复
通信的方式就太多了。
yesry 2003-07-03
  • 打赏
  • 举报
回复
可能?靠,连这个也不愿意尝试啊,你太懒了,还想别人帮你!
tmathliao 2003-07-03
  • 打赏
  • 举报
回复
如何引用,系统可能报错,
TMidBaseAAAAAAAAAAAAA *pA;没有定义
yesry 2003-07-03
  • 打赏
  • 举报
回复
搞错了:
pA->l_ItemStatus.......
yesry 2003-07-03
  • 打赏
  • 举报
回复
class TMidBaseAAAAAAAAAAAAA
{
//private:
public:
AnsiString l_MidCode;
int l_DataSetType;
bool l_CanModify;
TDataSetState l_HeadStatus;
TStringList *l_ItemStatus;
TADOConnection *l_SCnt;
TADOQuery *l_HeadDataSet;
TADOQuery *l_ItemDataSet;
TADOQuery *l_Query;
AnsiString l_ErrorMessage;

TDataSetState __fastcall GetHeadStatus();
TDataSetState __fastcall GetItemStatus();

public:
__fastcall TMidBase();
__fastcall ~TMidBase();

int __fastcall ValidFieldValue(int Param);
int __fastcall CommandExecute(int Param);
void __fastcall Edit();
void __fastcall EditDetail();
void __fastcall Update();
Variant __fastcall GetMasterValue(AnsiString fieldname);
Variant __fastcall GetMasterOldValue(AnsiString fieldname);
void __fastcall SetMasterValue(AnsiString fieldname,Variant value);
Variant __fastcall GetDetailValue(AnsiString fieldname);
Variant __fastcall GetDetailOldValue(AnsiString fieldname);
void __fastcall SetDetailValue(AnsiString fieldname,Variant value);

__property TADOConnection *Connection={read=l_SCnt};
__property TADOQuery *Query={read=l_Query};
__property int DataSetType={read=l_DataSetType};
__property AnsiString MidCode={read=l_MidCode};
__property TDataSetState HeadStatus={read=GetHeadStatus};
__property TDataSetState ItemStatus={read=GetItemStatus};
__property bool CanModify={read=l_CanModify};
__property AnsiString ErrorMessage={read=l_ErrorMessage};

protected:
virtual void __fastcall ValidHeadValues();
virtual void __fastcall ValidItemValues();
virtual void __fastcall CmdExec(AnsiString Param);

};



TMidBaseAAAAAAAAAAAAA *pA;
TMidBase *theA;
theA=new TMidBase(...);
pA=(TMidBaseAAAAAAAAAAAAA *)theA;
pA=->l_ItemStatus.......
tmathliao 2003-07-03
  • 打赏
  • 举报
回复
就再等一天吧,上面的方法可能没有新意。
MAX°孟兆 2003-07-01
  • 打赏
  • 举报
回复
声明为public就行了.
「已注销」 2003-07-01
  • 打赏
  • 举报
回复
用一个public的函数吧,该函数可取得字符串列表TStringList的数据;
sprewellkobe 2003-07-01
  • 打赏
  • 举报
回复
关注中!
tmathliao 2003-07-01
  • 打赏
  • 举报
回复
请问
tmathliao 2003-06-27
  • 打赏
  • 举报
回复
是两个复杂的对象,内有ADO的定义和操作。B的定义MidBase.h我列出来

#ifndef MidBaseH
#define MidBaseH
#include <adodb.hpp>
#include <db.hpp>
#include <stdio.h>
//---------------------------------------------------------------------------
class TMidBase
{
private:
AnsiString l_MidCode;
int l_DataSetType;
bool l_CanModify;
TDataSetState l_HeadStatus;
TStringList *l_ItemStatus;
TADOConnection *l_SCnt;
TADOQuery *l_HeadDataSet;
TADOQuery *l_ItemDataSet;
TADOQuery *l_Query;
AnsiString l_ErrorMessage;

TDataSetState __fastcall GetHeadStatus();
TDataSetState __fastcall GetItemStatus();

public:
__fastcall TMidBase();
__fastcall ~TMidBase();

int __fastcall ValidFieldValue(int Param);
int __fastcall CommandExecute(int Param);
void __fastcall Edit();
void __fastcall EditDetail();
void __fastcall Update();
Variant __fastcall GetMasterValue(AnsiString fieldname);
Variant __fastcall GetMasterOldValue(AnsiString fieldname);
void __fastcall SetMasterValue(AnsiString fieldname,Variant value);
Variant __fastcall GetDetailValue(AnsiString fieldname);
Variant __fastcall GetDetailOldValue(AnsiString fieldname);
void __fastcall SetDetailValue(AnsiString fieldname,Variant value);

__property TADOConnection *Connection={read=l_SCnt};
__property TADOQuery *Query={read=l_Query};
__property int DataSetType={read=l_DataSetType};
__property AnsiString MidCode={read=l_MidCode};
__property TDataSetState HeadStatus={read=GetHeadStatus};
__property TDataSetState ItemStatus={read=GetItemStatus};
__property bool CanModify={read=l_CanModify};
__property AnsiString ErrorMessage={read=l_ErrorMessage};

protected:
virtual void __fastcall ValidHeadValues();
virtual void __fastcall ValidItemValues();
virtual void __fastcall CmdExec(AnsiString Param);

};
#endif

A对象维持着字符串列表TStringList的数据,也可能是数据集,B一定可以读到这些数据.如何实现的?
zxcdewq 2003-06-27
  • 打赏
  • 举报
回复
friend();友员函数,
extern 声明可以实现
lifejoy 2003-06-27
  • 打赏
  • 举报
回复
不晓的你在说什么。
是OO还是数据库?
tmathliao 2003-06-27
  • 打赏
  • 举报
回复
当然B的实现文件中可能引用了A的头文件
耙子 2003-06-27
  • 打赏
  • 举报
回复
没有明白你说的,

如果B完全可以访问A的public成员,不需要任何关系。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧