构造函数和析构函数可以是私有或保护的吗?
我的书稿还对流行的教科书存在的一些问题进行了探讨,笔者相信,连教科书都会出现的问题一定具有探讨的必要。
在书稿中隐去了发生问题的教科书的名字,但是在博客文章中我将指出这些书的名字。
孟威、刘慧宁、机工版、ISBN:7-111-08318-0;78页“构造函数应声明为公有函数”,83页第3行“它(指析构函数)也是公有的函数”
有教科书云:“构造函数应声明为公有函数”、“它(指析构函数)也是公有的函数”。我们因此产生疑问,构造函数和析构函数可以是私有或保护的吗?答案是肯定的,请看系统头文件iostream.h里的一段代码:
class _CRTIMP iostream : public istream, publicostream {
public:
iostream(streambuf*);
virtual ~iostream();
protected:
iostream();
iostream(constiostream&);
:
private:
iostream(ios&);
iostream(istream&);
iostream(ostream&);
};
其实,如果一个构造函数仅仅是在成员函数里生成对象时用到,则它就可以定义成私有或保护的,如下例:
#include <iostream.h>
class Test{
private:
int num;
Test(double d){ num=d; };
// ~Test(){};//系统报错
public:
Test(intn){ num=n; };
~Test(){};
voidInnerCreate();
};