C++拷贝构造函数的问题,就是用一个类对象初始化另一个类对象时,会自动调用构造函数。 5
如果类的数据成员指针,当调用拷贝构造函数时,该指针的值是多少??请看下面的例子://定义了一个链表类template<classT>classLinkedList{pub...
如果类的数据成员指针,当调用拷贝构造函数时,该指针的值是多少??请看下面的例子:
//定义了一个链表类
template<class T>
class LinkedList
{
public:
//构造函数
LinkedList() ;
//拷贝构造函数
LinkedList(const LinkedList<T> &L) ;
//省略了一些函数
private:
Node<T> *front,*rear ;//指向表头和表尾的指针 //用于数据访问,插入和删除的指针
Node<T> *prevPtr,*currPtr ;
int size ; //表中元素的个数
int position ;
};
其中构造函数和拷贝构造函数的定义如下:
template<class T>//构造函数
LinkedList<T>::LinkedList()
{
front = rear = NULL ;
prevPtr = currPtr = NULL ;
size = 0 ;
position = -1 ;
}
template<class T>//拷贝构造函数
LinkedList<T>::LinkedList(const LinkedList<T> &L)
{
cout << "front: " << front << endl ;
cout << "rear: " << rear << endl ;
cout << "prevPtr: " << prevPtr << endl ;
cout << "currPtr: " << currPtr << endl ;
cout << "调用了拷贝构造函数" << endl ;
//首先判断L是否为空链表,如果是则返回
if (L.front == NULL)
return ;
Node<T> *p = L.front ;
while(p != NULL)//往当前表的表尾插入L的每个元素
{
InsertRear(p->data) ;//在表尾插入
p = p->NextNode() ;
}
prevPtr = NULL ;//在新表中重置prevPtr和currPtr
currPtr = front ;
cout << "position: " << position << endl ;
cout << "size: " << size << endl ;
for (int pos=0;pos!=position;pos++)
{
prevPtr = currPtr ;
currPtr = currPtr->NextNode() ;
}
}
int main()
{
LinkedList<int> L ;//定义链表对象L
/*
对链表对象L进行了赋值
*/
//利用链表对象L初始化对象K
LinkedList<T> K(L) ;//这里会自动调用拷贝构造函数
return 0 ;
}
程序编译没有问题,但是执行时有问题,执行的结果如下:
size: 10
Original list-->L:
42 92 7 36 70 33 4 5 71 69
front: CCCCCCCC
rear: CCCCCCCC
prevPtr: CCCCCCCC
currPtr: CCCCCCCC
调用了拷贝构造函数
问题:
为什么进入拷贝构造函数后,this指向的对象(不是对象L)的数据成员front、rear、prevPtr、currPtr的值是CCCCCCCC,不是NULL呢?因为构造函数初始化了这些值啊???求解释,困恼了很久啊!!!! 展开
//定义了一个链表类
template<class T>
class LinkedList
{
public:
//构造函数
LinkedList() ;
//拷贝构造函数
LinkedList(const LinkedList<T> &L) ;
//省略了一些函数
private:
Node<T> *front,*rear ;//指向表头和表尾的指针 //用于数据访问,插入和删除的指针
Node<T> *prevPtr,*currPtr ;
int size ; //表中元素的个数
int position ;
};
其中构造函数和拷贝构造函数的定义如下:
template<class T>//构造函数
LinkedList<T>::LinkedList()
{
front = rear = NULL ;
prevPtr = currPtr = NULL ;
size = 0 ;
position = -1 ;
}
template<class T>//拷贝构造函数
LinkedList<T>::LinkedList(const LinkedList<T> &L)
{
cout << "front: " << front << endl ;
cout << "rear: " << rear << endl ;
cout << "prevPtr: " << prevPtr << endl ;
cout << "currPtr: " << currPtr << endl ;
cout << "调用了拷贝构造函数" << endl ;
//首先判断L是否为空链表,如果是则返回
if (L.front == NULL)
return ;
Node<T> *p = L.front ;
while(p != NULL)//往当前表的表尾插入L的每个元素
{
InsertRear(p->data) ;//在表尾插入
p = p->NextNode() ;
}
prevPtr = NULL ;//在新表中重置prevPtr和currPtr
currPtr = front ;
cout << "position: " << position << endl ;
cout << "size: " << size << endl ;
for (int pos=0;pos!=position;pos++)
{
prevPtr = currPtr ;
currPtr = currPtr->NextNode() ;
}
}
int main()
{
LinkedList<int> L ;//定义链表对象L
/*
对链表对象L进行了赋值
*/
//利用链表对象L初始化对象K
LinkedList<T> K(L) ;//这里会自动调用拷贝构造函数
return 0 ;
}
程序编译没有问题,但是执行时有问题,执行的结果如下:
size: 10
Original list-->L:
42 92 7 36 70 33 4 5 71 69
front: CCCCCCCC
rear: CCCCCCCC
prevPtr: CCCCCCCC
currPtr: CCCCCCCC
调用了拷贝构造函数
问题:
为什么进入拷贝构造函数后,this指向的对象(不是对象L)的数据成员front、rear、prevPtr、currPtr的值是CCCCCCCC,不是NULL呢?因为构造函数初始化了这些值啊???求解释,困恼了很久啊!!!! 展开
2个回答
展开全部
你用的VC++编译的吧?VC的特点就是对于指针,如果没显示的初始化为null, 会默认指向地址为CCCCCCCC 的内存,你换成别的编译器实施就知道。
追问
进入拷贝构造函数时,系统应该会自动调用构造函数创建一个对象吧,这个对象的值就是初始化的值啊。那么指针的值是NULL啊。还有就是我试了下,在拷贝构造函数中将front、rear、prevPtr、currPtr的值显示的设为NULL。程序显示的结果还是CCCCCCCC啊。好像改变不了。如果不能改变的话,就不能够将链表对象L进行拷贝。
展开全部
BMX Extreme game
Today, I recommend a popular Sports Games (BMX Extreme game) to everyone,4399.com, hope you like it.
The BMX Extreme game description as:
BMX Extreme game.Make your best effort to earn points, you have one minute to perform as many tricks as you can.
Play link you can check here: BMX Extreme game,online golf games,
Or check here: http://www.funnygameonline.net/BMX-Extreme-game-95.html
Comments:
Other sites you might be interested:
3D fruit game
Today, I recommend a popular Sports Games (BMX Extreme game) to everyone,4399.com, hope you like it.
The BMX Extreme game description as:
BMX Extreme game.Make your best effort to earn points, you have one minute to perform as many tricks as you can.
Play link you can check here: BMX Extreme game,online golf games,
Or check here: http://www.funnygameonline.net/BMX-Extreme-game-95.html
Comments:
Other sites you might be interested:
3D fruit game
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询