new TOraSession或者TComponent所有子类时的问题

tung_us 2008-08-21 05:02:42

我创建:

new TOraSession(TComponent* Owner);
new TOraSession(const TOraSession &);

第一行是指创建的组件属于谁谁
第二行是什么意思?该写什么?

TComponent的子类创建都是这个问题,在第二行该写自己的指针吗?这样
oo = new TOraSession(oo);
这样会产生异常。

高手请解释一下const TOraSession &是什么意思!

thx

...全文
95 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tung_us 2008-09-16
  • 打赏
  • 举报
回复


楼上的高手非常棒,谢谢啦!
jxw1987628 2008-09-05
  • 打赏
  • 举报
回复
那要看你的类是如何定义的

如果类里面public区域定义有无参数的构造函数如TOraSession()并有实现体,那么你调用

new TOraSession()就是合法的,否则编译器就是报调用未定义的函数Call of None Function!


只有第2个问题。他是根据参数来匹配的,和第1个问题相似

NULL其实就是(void*)0,它代表一个指向空的‘万能指针’,所以匹配那个参数为指针的构造函数

如果你是这样调用的

TOraSession *p=new TOraSession(NULL);//这个匹配指针参数的那个构造函数
TOraSession *q=new TOraSession(*p);//这个匹配参数为引用的那个构造函数
tung_us 2008-09-05
  • 打赏
  • 举报
回复


对于
new TOraSession(TComponent* Owner);
new TOraSession(const TOraSession &);
这两种构造我已经明白了。

还有最后一个问题,
在写构造函数的时候,为什么只有这两种形式,而没有new TOraSession(); 呢?
这种才是最常用的形式啊?
如果写new TOraSession(NULL);那么它是匹配new TOraSession(TComponent* Owner); 还是匹配new TOraSession(const TOraSession &); 呢?


对楼上高手的耐心表示感谢!!
tung_us 2008-08-28
  • 打赏
  • 举报
回复


这里是TOraSession的构造函数,他为什么还有引用过来一个TOraSession呢?
jxw1987628 2008-08-28
  • 打赏
  • 举报
回复
是啊,这个属于拷贝构造函数

namespace JXW
{
//pin
class CPin
{
public:
int iPinID;
int iOfNetID;
int iOfNailID;
int iOfPartID;
int iOfNailID_Update;
String strPinName;
String strExtPartName;
String strExtNetName;

public:
CPin();
CPin(const CPin& x);
virtual ~CPin();
virtual void Clear();
};


using namespace JXW;

///////////////////////////////////////////////////////////////
/// CPin
//////////////////////////////////////////////////////////////
void CPin::Clear()
{
iPinID=-1;
iOfNetID=-1;
iOfNailID=0;
iOfNailID_Update=-2008; //for update
iOfPartID=-1;
strPinName="";
strExtPartName="";
strExtNetName="";
}
CPin::CPin()
{
iPinID=-1;
iOfNetID=-1;
iOfNailID=0;
iOfNailID_Update=-2008;
iOfPartID=-1;
strPinName="";
strExtPartName="";
strExtNetName="";
}
CPin::CPin(const CPin& x)
{
iPinID=x.iPinID;
iOfNetID=x.iOfNetID;
iOfNailID=x.iOfNailID;
iOfPartID=x.iOfPartID;
iOfNailID_Update=x.iOfNailID_Update;
strPinName=x.strPinName;
strExtPartName=x.strExtPartName;
strExtNetName=x.strExtNetName;

}
CPin::~CPin()
{
//edit by man bu zhe
}



如果你还有什么不明白的,先看看C++类的构造函数这方面的书吧
jxw1987628 2008-08-27
  • 打赏
  • 举报
回复
你先理解下引用的概念吧

    
int a=100;
int& b=a; //b是a的一个别名而已,实际上b没有占用内存,a,b都是内存的同1个地方的值
b=99; //这里实际上把a的指给改变了,a变成99了
printf("%d",a);
getchar();


传递了1个引用,那么那里的TOraSession就是实际上传递过来的对象!
tung_us 2008-08-27
  • 打赏
  • 举报
回复


楼上说得很详细!THX

那么,第二行的引用过来的TOraSession是谁呢?我想问的是他的实际意义,在构造函数里面引用一个TOraSession是什么意思?

如果这里用NULL是可以的,那么又代表什么意思?
jxw1987628 2008-08-21
  • 打赏
  • 举报
回复
第一行是 创建的组建是属于Owner指针指向的对象

第2行 也是调用构造函数构造对象。只是构造函数的参数是一个const TOraSession &类型,这个是1个const引用,和指


针类似。它实际上是指传递进来的对象,加上const修饰符表示这个对象的成员数据是不允许在这个构造里被修改的!)

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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