为节省大家宝贵时间,我把代码彻底简化了(比如成员全声明为public),只留下问题。这段代码作为头文件可直接粘贴进MFC程序运行(需加上函数调用)。我想不明白的是:为什么将一个好端端的对象Add进CArray之后,取出来就变成一个像刚new出来似的崭新的对象了?毕竟我已经定义拷贝构造函数和重载=运算符了啊……即使将模板类写成CArray<MyClass, MyClass&>,结果仍然不正确。只好求助大家了。谢谢!#include <afxtempl.h>
class MyClass
{
public:
int num; MyClass() { } // 构造函数
MyClass(MyClass &myclass) { num = myclass.num; } // 拷贝构造函数
MyClass operator=(MyClass &myclass) // =运算符重载
{
MyClass temp;
temp.num = myclass.num;
return temp;
}
};void ShowExcel()
{
CArray<MyClass, MyClass> result;
MyClass myclass;
myclass.num = 1234;
result.Add(myclass);
MyClass obj = result.GetAt(0); // obj.num == 0, 而不是 1234.
}
class MyClass
{
public:
int num; MyClass() { } // 构造函数
MyClass(MyClass &myclass) { num = myclass.num; } // 拷贝构造函数
MyClass operator=(MyClass &myclass) // =运算符重载
{
MyClass temp;
temp.num = myclass.num;
return temp;
}
};void ShowExcel()
{
CArray<MyClass, MyClass> result;
MyClass myclass;
myclass.num = 1234;
result.Add(myclass);
MyClass obj = result.GetAt(0); // obj.num == 0, 而不是 1234.
}
改为 CArray<MyClass, MyClass&> result;
试试
CArray::GetAt(2)
CArray::GetAt(3)
CArray::GetAt(4)
CArray::GetAt(6)
……………………
……………………
……………………
他们的意义是什么啊?
求教下小弟