对象访问自己的指针成员问题
对象如何正确访问调用自己的指针成员,你看我的代码
// 复制构造函数.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;
}
menber是啥呀……
[解决办法]
删掉:
poinToInt = new int(copy1.menber1);//括号的参数表示初始化之
[解决办法]
读起来太费劲。建议发帖时格式化一下:发帖编辑窗口上面有语言种类选择。
[解决办法]
恩恩,代码可读性有点差, 看起来费劲...不过还好代码逻辑简单。
想输出对象的值就直接 *copy2.pointToInt 。 对指针解引用就行了....
[解决办法]
真蛋疼。虽然知道楼主只是在练手,但建议有目的一点,不要为了学某个语法/特性就编着法的用这个语法/特性,至少应该在需要用这个语法/特性的地方用啊。
[解决办法]
这设计...太糟糕了...
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吧