小
小唐
Unregistered / Unconfirmed
GUEST, unregistred user!
我对“动态创建对象”不太懂,以下是我对Clone()这个成员函数的理解,
如有不对的地方,请批评指正。
Date *Date::Clone()
{
Date * pNew=new Date;
//这一句书上说叫“动态创建对象”,
//我对这个概念不懂,我的理解是
//就是在内存中申请一块空间并将指针pNew指向这个空间
//的首地址。
*pNew=*this;
//这一句给上面申请到的空间赋值(对象),
//从而实现克隆对象的目的
return pNew;
//返回(申请到的已经被赋了值(对象)的内存空间的首地址)
}
如果我以上的理解是对的,那么下面这两条我就又不懂了:
Date *pDate=new Date
pDate->SetDate(1994,11,3);
//我的疑问:
//指针pDate已经指向了内存中的一块新的区域,
//那块区域还没有内容(不知是不是没有内容?)
//,为什么可以用"->"呢?
=========================================================================
下面是网上的文章:
指向类的指针
指针在类中的操作要格外小心,你可以用如下的办法定义一个类:
class MyClass
{
public:
int m_Number;
char m_Character;
};
接着你就可以定义一个MyClass 类的变量了:
MyClass thing;
你应该已经知道怎样去定义一个指针了吧:
MyClass *thing;
接着你可以分配个内存空间给它:
(“接着你可以分配个内存空间给它”,这句话是什么意思呀???)
(下面这个语句不懂啊,我也可以说是指针指向了个动态创建的对象,可是,
这个动态创建的对象MyClass又是什么呢,有人说这个MyClass只是一个申请
到的内存空间而已,并没有内容,不知这种说法对不对?。还有,倒底是动
态创建的“对象”还是动态创建的“类”啊?我现在越来越糊涂了)
thing = new MyClass;
注意,问题出现了。你打算怎样使用这个指针呢,通常你可能会写'thing.m_Number',但是thing是类吗,不,它是一个指向类的指针,它本身并不包含一个叫m_Number的变量。所以我们必须用另一种方法:就是把'.'(点号)换成 -> ,来看下面的例子:
class MyClass
{
public:
int m_Number;
char m_Character;
};
void main()
{
MyClass *pPointer;
pPointer = new MyClass;
pPointer->m_Number = 10;
pPointer->m_Character = 's';
delete pPointer;
}
如有不对的地方,请批评指正。
Date *Date::Clone()
{
Date * pNew=new Date;
//这一句书上说叫“动态创建对象”,
//我对这个概念不懂,我的理解是
//就是在内存中申请一块空间并将指针pNew指向这个空间
//的首地址。
*pNew=*this;
//这一句给上面申请到的空间赋值(对象),
//从而实现克隆对象的目的
return pNew;
//返回(申请到的已经被赋了值(对象)的内存空间的首地址)
}
如果我以上的理解是对的,那么下面这两条我就又不懂了:
Date *pDate=new Date
pDate->SetDate(1994,11,3);
//我的疑问:
//指针pDate已经指向了内存中的一块新的区域,
//那块区域还没有内容(不知是不是没有内容?)
//,为什么可以用"->"呢?
=========================================================================
下面是网上的文章:
指向类的指针
指针在类中的操作要格外小心,你可以用如下的办法定义一个类:
class MyClass
{
public:
int m_Number;
char m_Character;
};
接着你就可以定义一个MyClass 类的变量了:
MyClass thing;
你应该已经知道怎样去定义一个指针了吧:
MyClass *thing;
接着你可以分配个内存空间给它:
(“接着你可以分配个内存空间给它”,这句话是什么意思呀???)
(下面这个语句不懂啊,我也可以说是指针指向了个动态创建的对象,可是,
这个动态创建的对象MyClass又是什么呢,有人说这个MyClass只是一个申请
到的内存空间而已,并没有内容,不知这种说法对不对?。还有,倒底是动
态创建的“对象”还是动态创建的“类”啊?我现在越来越糊涂了)
thing = new MyClass;
注意,问题出现了。你打算怎样使用这个指针呢,通常你可能会写'thing.m_Number',但是thing是类吗,不,它是一个指向类的指针,它本身并不包含一个叫m_Number的变量。所以我们必须用另一种方法:就是把'.'(点号)换成 -> ,来看下面的例子:
class MyClass
{
public:
int m_Number;
char m_Character;
};
void main()
{
MyClass *pPointer;
pPointer = new MyClass;
pPointer->m_Number = 10;
pPointer->m_Character = 's';
delete pPointer;
}