C++11添加了很多新特性,使C++看上去更加的灵活和面向对象,其中新关键字default值得我们关注一下。
我们知道有时候当我们仅创建了有参构造函数后,如果你想调用无参构造函数编译是会报错的。因为一旦你自己定义了构造函数,系统的默认构造函数是被屏蔽的,也就是说此时是没有无参构造函数的,所以我们需要自己定义一个无参构造函数。但是现在在C++11中,如果我们仅定义了有参构造函数,可以通过default关键字让默认构造函数恢复。具体实现如下:
<span style="color:#000000"><code><span style="color:#000088 !important">class</span> CString
{
<span style="color:#000088 !important">char</span>* _str = <span style="color:#000088 !important">nullptr</span>;
<span style="color:#000088 !important">public</span>:
CString() = <span style="color:#000088 !important">default</span>; <span style="color:#880000 !important"><em>//恢复默认构造函数 </em></span>
CString(<span style="color:#000088 !important">const</span> <span style="color:#000088 !important">char</span>* pstr) : _str(<span style="color:#000088 !important">nullptr</span>) <span style="color:#880000 !important"><em>//自定义的有参构造</em></span>
{
UpdateString(pstr);
}
~CString()
{
<span style="color:#000088 !important">if</span> (_str)
<span style="color:#4f4f4f !important">free</span>(_str);
}
<span style="color:#000088 !important">void</span> UpdateString(<span style="color:#000088 !important">const</span> <span style="color:#000088 !important">char</span>* pstr) <span style="color:#000088 !important">throw</span>()
{
<span style="color:#000088 !important">if</span> (pstr == <span style="color:#000088 !important">nullptr</span>)
<span style="color:#000088 !important">return</span>;
<span style="color:#000088 !important">if</span> (_str)
<span style="color:#4f4f4f !important">free</span>(_str);
_str = (<span style="color:#000088 !important">char</span>*)<span style="color:#4f4f4f !important">malloc</span>(<span style="color:#4f4f4f !important">strlen</span>(pstr) + <span style="color:#006666 !important">1</span>);
<span style="color:#4f4f4f !important">strcpy</span>(_str,pstr);
}
<span style="color:#000088 !important">char</span>* GetStr() <span style="color:#000088 !important">const</span> <span style="color:#000088 !important">throw</span>()
{
<span style="color:#000088 !important">return</span> _str;
}
}; </code></span>