社区
C++ Builder
帖子详情
两个没有继承关系,没有引用关系的对象可能如何通信?
tmathliao
2003-06-27 02:03:25
现在有两个对象,A和B,由相同的主程序创建,都有ADO操作的相应属性和方法,
A对象是我不可见的(封装了),主程序创建B对象时传递一个int变量作为参数,但是我发现A,B没有继承关系,没有引用关系,但是B却可以访问A的数据。这是为什么呢?B访问的是A的没有保存在数据库中的数据。
B的定义中也没有接口。
...全文
43
15
打赏
收藏
两个没有继承关系,没有引用关系的对象可能如何通信?
现在有两个对象,A和B,由相同的主程序创建,都有ADO操作的相应属性和方法, A对象是我不可见的(封装了),主程序创建B对象时传递一个int变量作为参数,但是我发现A,B没有继承关系,没有引用关系,但是B却可以访问A的数据。这是为什么呢?B访问的是A的没有保存在数据库中的数据。 B的定义中也没有接口。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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成员,不需要任何关系。
什么是,类?
对象
? 它们之间的
关系
?
类 类(Class)是面向
对象
...
对象
具有状态,一个
对象
用数据值来描述它的状态。
对象
还有操作,用于改变
对象
的状态,
对象
及其操作就是
对象
的行为。
对象
实现了数据和操作的结合,使数据和操作封装于
对象
的统一体中。 类
组合、聚合、
继承
详解
大部分的初学者只知道java中
两个
类之间可以是
继承
与被
继承
的
关系
,可是事实上,类之间的
关系
大体上存在五种—
继承
(实现)、依赖、关联、聚合、组合。 接下来,简单的分析一下这些
关系
。
继承
(实现) 对于类来说...
面向
对象
编程三大特性------封装、
继承
、多态
两个
类若存在IS-A的
关系
就可以使用
继承
。,同时
继承
也为实现多态做了铺垫。 多态就是指程序中定义的
引用
变量所指向的具体类型和通过该
引用
变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个...
类和
对象
之间的
关系
?封装
继承
多态?
在面向
对象
的编程思想中把
对象
的属性和行为分别称为
对象
的属性和方法,是构成
对象
的
两个
主要因素;在编程中,
对象
的属性被存储在一些变量里;
对象
的行为则通过定义方法来实现。三大基本特征:封装,
继承
,多态。 ...
C++中的
继承
关系
C++中的
继承
关系
一、
继承
概念
继承
(inheritance)机制是面向
对象
程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。这样产生新的类,称派生类。
继承
呈现了面向
对象
...
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章