读书人

一段关于构造函数的代码不解解决方案

发布时间: 2012-05-22 18:18:54 作者: rapoo

一段关于构造函数的代码,不解

C/C++ code
EMapEditSchedule(const EMapEditSchedule &);      //(1)const EMapEditSchedule & operator = (const EMapEditSchedule &);   //(2)explicit EMapEditSchedule(size_t max_step = 20)    //(3)        : m_cnt(0), m_maxCMD(max_step)    {        m_cmd = m_cmdList.begin();    }

既然已经定义了显示构造函数(3),为什么还要声明(1)?还有(2)的重载并没有定义,是有什么原因吗?

[解决办法]
1. 1和3是重载关系,它们的参数类型是不同的
2. 2是操作符=的重载声明
3. 所有声明的函数1和3,应该会在别的地方(比如某个cpp文件中)有实现
[解决办法]
explicit EMapEditSchedule(size_t max_step = 20) 加explicit是为了防止size_t隐式地向EMapEditSchedule转换

[解决办法]
看样子,1和2没有定义,是作者不想,或者不认为这类型的对象可以复制,即复制构造和赋值操作,这样写可以防止出现错误代码,因为链接就会报错,而不用等到运行时莫名其妙。

也可以将1和2做私有权限,编译时就可以检测到。

读书人网 >C++

热点推荐