对象访问自己的指针成员问题
对象如何正确访问调用自己的指针成员,你看我的代码
// 复制构造函数.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
class copyclass
{
public:
copyclass(int menber)
{
printf_s("调用默认构造函数\n");
menber1 = menber;
poinToInt = &menber1;
}
copyclass(const copyclass& copy1)
{
printf_s("调用复制构造函数\n");
poinToInt = new int(copy1.menber1);//括号的参数表示初始化之
//*poinToInt = copy1.menber1;
}
int menber1, *poinToInt;//int a, b, c;
//a = b + c;//类中不可出现执行语句,类里的成员函数才可以
protected:
private:
};
int _tmain(int argc, _TCHAR* argv[])
{
copyclass copy1(1), //调用构造函数
copy2 = copy1;//调用复制构造函数,不调用构造函数。
printf_s("copy1::menber1值是:%d\n用复制构造函数构造的对象COPY2的menber1值是:%d\n",copy1.menber1,copy2.poinToInt);
return 0;
}
我是想建立对象copy1,然后用copy1赋值给(copy2 = copy1),用复制构造函数copyclass(const copyclass& copy1)把copy1的指针成员copy.poinToInt也复制给copy2.poinToInt;过程是
copyclass(const copyclass& copy1)
{
printf_s("调用复制构造函数\n");
poinToInt = new int(copy1.menber1);//括号的参数表示初始化之
//*poinToInt = copy1.menber1;
}
可是用printf_s输出看值不对,代码
printf_s("copy1::menber1值是:%d\n用复制构造函数构造的对象COPY2的menber1值是:%d\n",copy1.menber1,copy2.poinToInt);
copy1.menber1应该等于才对啊
我试验过了printf输出copy2.poinToInt其实是poinToInt的地址,那么如何用类copy2正确访问*poinToInt????
C++ 类与指针
[解决办法]
print("%d", *copy2.pointToInt);
这样出来的就是值
但是楼主的这个程序有个内存泄露
而且copy2.member1跟copy1的没有关系
[解决办法]
copyclass(const copyclass& copy1)
{
printf_s("调用复制构造函数\n");
menber1 = copy1.menber1;
pointToInt = &menber1;
poinToInt = new int(copy1.menber1);//括号的参数表示初始化之
//*poinToInt = copy1.menber1;
}
copyclass(const copyclass& copy1)
{
printf_s("调用复制构造函数\n");
poinToInt = new int(copy1.menber1);
//你copy1的poinToInt都不是new的,为什么拷贝之后就变new了?
//如果原本就是new的话还好说,是个深拷贝。但自身成员的地址还要考虑深拷贝?而且有必要把自身成语再转成指针?
}
copy2 = copy1;//copy2哪里来的?你确定不是=运算符重载,是拷贝?
printf_s("……",copy1.menber1,copy2.poinToInt);//是*copy2.poinToInt吧