类的赋值运算符

szn_409 2016-04-09 07:36:50

class CTest0
{
public:
CTest0()
{
p = new int[10]();
}

virtual ~CTest0()
{
delete []p;
}
CTest0* operator = (const CTest0* tem)
{
printf("CTest0* operator =\n");
if (this == tem) return this;
memcpy(this->p, tem->p, 40);
return this;
}

CTest0& operator = (const CTest0 &tem)
{
printf("CTest0& operator =\n");
if (this == &tem) return *this;
memcpy(this->p, tem.p, 40);
return *this;
}

public:
int *p;
};

int _tmain(int argc, _TCHAR* argv[])
{
{
CTest0 *T0_0 = new CTest0();
CTest0 *T0_1 = new CTest0();
T0_0 = T0_1; //并没有正确赋值
printf("\n");
}

{
CTest0 *T0_0 = new CTest0();
CTest0 *T0_1 = new CTest0();
T0_0->operator=(T0_1); //输出CTest0* operator = 正确赋值
printf("\n");
}

return 0;
}


如上代码 为什么第一次没有正确赋值
为什么一定要显示调用赋值运算符
...全文
199 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2016-04-10
  • 打赏
  • 举报
回复
第一种只是指针赋值,不会调用你的成员函数,因为全局就有指针赋值运算,需要写成第二种形式 如果需要对象赋值,写成:*T0_0 = *T0_1;
lm_whales 2016-04-10
  • 打赏
  • 举报
回复
CTest0* T0_1(&T0_0);已经正确赋值了,只是不是你想要的而已 T0_1 此时是&T0_0 的值 ,即T0_0的地址。 这才是 这个初始化语句的语义。 指针初始化的语义,就是用一个指针,初始化他, 包括指针常量,某个对象的地址,数组名等等 数组名,并不就是指针, 但是 C++要先去解析表达式,而不是看到数组名,就说他是啥。 解析表达式的时候,初始化指针的数组(给指针赋值的数组,等等情况下), 只能当指针用了,至于说隐式转换也好,数组名此时是指针也好。 他不过是解析表达式的结果而已。
renwotao2009 2016-04-09
  • 打赏
  • 举报
回复
拷贝构造和赋值操作符函数都是对对象进行的,不支持类指针类型,如果类指针类型,就必须明确调用
szn_409 2016-04-09
  • 打赏
  • 举报
回复
第二个问题漏贴了一段代码:


	CTest0(const CTest0& tem)
	{
		printf("CTest0&\n");
		p = new int[10]();
		if (this == &tem)	return;
		memcpy(this->p, tem.p, 40);
	}

szn_409 2016-04-09
  • 打赏
  • 举报
回复

class CTest0
{
public:
	CTest0()
	{
		p = new int[10]();
	}

	virtual ~CTest0()
	{
		delete []p;
	}
	CTest0(const CTest0* tem)
	{
		printf("CTest0*\n");
		if (this == tem)	return;
		p = new int[10]();
		memcpy(this->p, tem->p, 40);
	}
public:
	int *p;
};

int _tmain(int argc, _TCHAR* argv[])
{
	{
		CTest0 T0_0;
		CTest0 T0_1(T0_0);	//输出CTest0&		正确赋值
		printf("\n");
	}

	{
		CTest0 T0_0;
		CTest0* T0_1(&T0_0);   //没有正确赋值
		printf("\n");
	}
}
上述第二个也没有正确赋值,为什么?
第1章 PHP 5基础 1.1 简介 1.1.1 PHP是什么 1.1.2 初步认识PHP代码 1.2 PHP的安装 1.2.1 Linux下安装.Apache和PHP 1.2.2 Windows下安装Apache和PHP 1.3 PHP配置 1.3.1 PHP配置文件 1.3.2 PHP常用配置选项 1.3.3 加载扩展库 1.4 本章小结 第2章 网站开发语法基础 2.1 基本语法 2.2 数据型 2.2.1 布尔型 2.2.2 整型 2.2.3 浮点型 2.2.4 字符串 2.2.5 数组 2.2.6 对象 2.2.7 资源 2.2.8 NULL 2.2.9 型转换 2.3 变量 2.3.1 变量的赋值 2.3.2 预定义变量 2.3.3 变量作用域 2.3.4 可变变量 2.4 常量 2.4.1 自定义常量 2.4.2 魔术常量 2.5 表达式 2.6 运算符 2.6.1 算术运算符 2.6.2 字符串运算符 2.6.3 比较运算符 2.6.4 逻辑运算符 2.6.5 位运算符 2.6.6 赋值运算符 2.6.7 数组运算符 2.6.8 运算符 2.6.9 错误控制运算符 2.6.10 执行运算符 2.6.11 运算符的优先级 2.7 流程控制 2.7.1 if结构 2.7.2 switch结构 2.7.3 while循环 2.7.4 for循环 2.7.5 foreach语句 2.7.6 declare语句 2.7.7 exit和retunl语句 2.8 包含代码 2.9 本章小结 第3章 函数 3.1 用户自定义函数 3.1.1 函数调用与函数定义 3.1.2 递归函数 3.2 函数的参数 3.2.1 按值传递参数 3.2.2 通过引用传递 3.2.3 默认参数值 3.2.4 可变长度参数列表 3.3 函数返回值 第4章 与对象 第5章 字符串 第6章 数组 第7章 PHP高级应用技术 第8章 PHP模板 第9章 MySQL快速入门 第10章 MySQL数据库管理 第11章 MySQL5进阶 第12章 文章发布系统 第13章 电子商务系统

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧