社区
C语言
帖子详情
请问为什么构造函数和析构函数都必须声明在 public中?
zhaobong
2002-01-11 09:34:15
我想是不是因为用类定义变量后,在执行时会调用此类的构造函数和析构函数的缘故?
...全文
685
17
打赏
收藏
请问为什么构造函数和析构函数都必须声明在 public中?
我想是不是因为用类定义变量后,在执行时会调用此类的构造函数和析构函数的缘故?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
其实,是对象产生后马上调用该函数
这个调用过程是编译器自动加上的,你可以看看生成的汇编代码
c++
构造函数
和
析构函数
一、
构造函数
和
析构函数
的特点
构造函数
和
析构函数
是一种特殊的公有成员函数,每一个类都有一个默认的
构造函数
和
析构函数
;
构造函数
在类定义时由系统自动调用,
析构函数
在类被销毁时由系统自动调用;
构造函数
的名称和类名相同,一个类可以有多个
构造函数
,只能有一个
析构函数
。不同的
构造函数
之间通过参数个数和参数类型来区分; 我们可以在
构造函数
中
给类分配资源,在类的
析构函数
中
释放对应的资源。 二、不带参数的
构造函数
C++类在创建时,系统会默认创建一个不带参数的
构造函数
,我们可以重新定义这个
构造函数
。默认
构造函数
在类被
构造函数
和
析构函数
能否
声明
为虚函数?
构造函数
不能
声明
为虚函数,
析构函数
可以
声明
为虚函数,而且有时是
必须
声明
为虚函数。 不建议在
构造函数
和
析构函数
里面调用虚函数。
构造函数
不能
声明
为虚函数的原因是: 解释一:所谓虚函数就是多态情况下只执行一个。而从继承的概念来讲,总是要先构造父类对象,然后才能是子类对象。如果
构造函数
设为虚函数,那么当你在构造父类的
构造函数
时就不得不显示的调用构造。还有一个原因就是为了防错,试想如果你
C++
中
构造函数
和
析构函数
常见面试题?
构造函数
和
析构函数
常见面试题?
构造函数
和
析构函数
常见面试题?1、永远不要在
构造函数
或
析构函数
中
调用虚函数2、为什么
构造函数
不能定义为虚函数3、为什么
析构函数
可以定义为虚函数4、
构造函数
的执行顺序?
析构函数
的执行顺序?5、
构造函数
的执行顺序?
析构函数
的执行顺序?参考
构造函数
和
析构函数
常见面试题? 1、永远不要在
构造函数
或
析构函数
中
调用虚函数 #include<iostream> using namespace std; class Base {
public
: Base() { Fun
C++ 类(
构造函数
和
析构函数
)
文章概述
构造函数
和
析构函数
的由来?
构造函数
和
析构函数
的基本语法 C++编译器构造析构方案 PK 对象显示初始化方案
构造函数
的分类以及调用 默认的
构造函数
构造函数
调用规则
构造函数
和
析构函数
的总结
构造函数
和
析构函数
的由来 类的数据成员不能在类的
声明
时候初始化,为了解决这个问题? 使用
构造函数
处理对对象的初始化。
构造函数
是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而...
C++
构造函数
和
析构函数
详解
C++
中
用
构造函数
和
析构函数
来初始化和清理对象,这两个函数将会被编译器自动调用。对象的初始化和清理是非常重要的,如果我们不提供
构造函数
与
析构函数
,编译器会自动提供两个函数的空实现。............
C语言
69,368
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章