请问为什么构造函数和析构函数都必须声明在 public中?

zhaobong 2002-01-11 09:34:15
我想是不是因为用类定义变量后,在执行时会调用此类的构造函数和析构函数的缘故?
...全文
685 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
LLnju 2002-03-18
  • 打赏
  • 举报
回复
VC6 有这个BUG,析构函数不能是 private 的,但VC7可以。
alafeng 2002-03-18
  • 打赏
  • 举报
回复
同意FOXMIKE ,TOO!!!
LLnju 2002-03-18
  • 打赏
  • 举报
回复
同意 foxmike(我们的故事爱就爱到值得) ,想怎么定义就怎么定义
baifeng 2002-01-13
  • 打赏
  • 举报
回复
关注
foxmike 2002-01-13
  • 打赏
  • 举报
回复
构造函数并不一定要被声明为public的呀,出于某种设计原因也可以将它设为private.
zhaobong 2002-01-13
  • 打赏
  • 举报
回复
你用的是什么编译器?
lak47 2002-01-13
  • 打赏
  • 举报
回复
构造函数和析构函数都可以声明为private,我就这样用过,我想限制我的类的实例只能由特定的函数或类生成,于是我就把类的构造和析构函数声明为private,把想生成这个类的实例的函数或类声明为这个类的友元,在到我的要求
Soft21 2002-01-13
  • 打赏
  • 举报
回复
大家好啊,关注
movingboy 2002-01-12
  • 打赏
  • 举报
回复
把构造函数声明为private的用法,hyqryq说得比较清楚了;把析构函数声明为private就不太寻常了。(MEC++我还没看呢)想想这样一个例子:ClassB继承自ClassA,如果ClassA的析构函数为private,则ClassB析构时无法调用ClassA的析构函数,于是ClassB就无法完全释放,这会造成内存泄漏及其他一些不可预知的后果。
hyqryq 2002-01-11
  • 打赏
  • 举报
回复
不要用 VC , VC 对 standard C++ 的支持很差, (这就是垄断的恶果呀)
我记得我以前用 VC 也通不过编译, 不过 GNU C++ 可以.

换个编译器用用吧......................




zhaobong 2002-01-11
  • 打赏
  • 举报
回复
我刚刚在VC++6.0中编程试过了,将构造函数和析构函数同时放在private中,编译的过程中VC只对析构函数指出错误,明确说明析构函数不能在private中,而没有对构造函数提出疑问。说明构造函数可以声明为private或者public,但是析构函数只能声明为public。
hyqryq 2002-01-11
  • 打赏
  • 举报
回复
其实思想不过是通过访问控制限制对象在全局接口的生成, 构造一个
专用的接口, 通过专用的接口对对象进行生成和访问..................
hyqryq 2002-01-11
  • 打赏
  • 举报
回复
一个简单singleton例子:

http://www.csdn.net/Develop/read_article.asp?id=10707

在 <<more effective C++ >>中, 有关于counting object
的详细论述.

如果把构造函数声明为 protect 型的话, 那么他就起了一个抽象类的
作用.

亦可以把析构函数定义为 private, 也有特殊的用处, 你还是
看看<<more effective C++ >>吧.
cBeginner 2002-01-11
  • 打赏
  • 举报
回复
构造函数声明在public中是因为可以被外部调用,比如:

class A{
int age;
public:
A(int Age){
age = Age;
cout << "age = " << age;
}
};

void main(void){
A a;
a(25);
}

如果这个构造函数(重载构造)声明在private或protect中的话,那外部就不能调用它了。构造函数用不上的话,那……呵呵
hyqryq 2002-01-11
  • 打赏
  • 举报
回复
不一定呦, 如果你不想让这个类生成实例或想控制它的实例数量的话, 当然可以把他们定义在private中.

很多面向对象的技术就是用这种方法来实现, 例如 singleton, counting object
...........



greening 2002-01-11
  • 打赏
  • 举报
回复
构造函数本来主要是用来给private的变量赋初值用的,不把构造函数声明在public中,当然就不可以给private赋值了。再说,不把构造函数声明在public中,外部就不能够调用它了,就失去了它的作用,几乎就没什么用了。析构函数也同理。
cnss 2002-01-11
  • 打赏
  • 举报
回复
其实,是对象产生后马上调用该函数

这个调用过程是编译器自动加上的,你可以看看生成的汇编代码

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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