C++初学者提问!
我从书上看到有如下代码:
class cat
{
public:
cat( );
cat(const cat&);
int getage( ) const {return *itsage;}
int getweight( ) const {return *itsweight;}
private:
int* itsage;
int* itsweight;
};
cat::cat( )
{
itsage=new int;
itsweight=new int;
*itsage=5;
*itsweight=9;
}
cat::cat(const cat& rhs)
{
itsage=new int;
itsweight=new int;
*itsage=rhs.getage( ); //?
*itsweight=rhs.getweight( ); //?
}
int main( )
{
略
}
问题:1.在复制构造函数中的形参被定义为常量引用,既然是常量,那怎么能为指针重新分配内存呢?那不是改变了指针变量的值了吗?是书上错了还是我理解错了?
2.假设问题1书上是对的,既然对象rhs的两个指针已经分配了新的内存,那么函数rhs.getage( )和rhs.getweight( )怎么还能获得原来对象拷贝的值然后再赋给rhs的两个指针呢???
真是百思不得其解
问题点数:30、回复次数:3Top
1 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-11-22 17:01:53 得分 2
两个对象Top
2 楼leizhengdeng(权为妞妞所用,利为妞妞所谋)回复于 2001-11-22 17:05:09 得分 1
main()
{
cat rhs;
cat cat2(rhs);
//cat2.cat(const &rhs)里面new的是cat2的成员变量,不是rhs的,rhs根本没变
//
}
Top
3 楼bdsc()回复于 2001-11-22 17:10:22 得分 27
*itsage=rhs.getage( );
拷贝构造,意思是在建造新的一个对象(用一个已经存在的对象)
this(正在生成的对象) 不是 rhs(已经存在的对象)
应该这样理解: this->(*itsage) = rhs.getage();
问题1清楚了,问题2就明白了。Top




