社区
C语言
帖子详情
请问为什么构造函数和析构函数都必须声明在 public中?
zhaobong
2002-01-11 09:34:15
我想是不是因为用类定义变量后,在执行时会调用此类的构造函数和析构函数的缘故?
...全文
776
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++
中
构造函数
和
析构函数
常见面试题?
构造函数
和
析构函数
常见面试题?
构造函数
和
析构函数
常见面试题?1、永远不要在
构造函数
或
析构函数
中
调用虚函数2、为什么
构造函数
不能定义为虚函数3、为什么
析构函数
可以定义为虚函数4、
构造函数
的执行顺序?
析构函数
的执行顺序?5、
构造函数
的执行顺序?
析构函数
的执行顺序?参考
构造函数
和
析构函数
常见面试题? 1、永远不要在
构造函数
或
析构函数
中
调用虚函数 #include<iostream> using namespace std; class Base {
public
: Base() { Fun
c++
构造函数
和
析构函数
一、
构造函数
和
析构函数
的特点
构造函数
和
析构函数
是一种特殊的公有成员函数,每一个类都有一个默认的
构造函数
和
析构函数
;
构造函数
在类定义时由系统自动调用,
析构函数
在类被销毁时由系统自动调用;
构造函数
的名称和类名相同,一个类可以有多个
构造函数
,只能有一个
析构函数
。不同的
构造函数
之间通过参数个数和参数类型来区分; 我们可以在
构造函数
中
给类分配资源,在类的
析构函数
中
释放对应的资源。 二、不带参数的
构造函数
C++类在创建时,系统会默认创建一个不带参数的
构造函数
,我们可以重新定义这个
构造函数
。默认
构造函数
在类被
C++
中
构造函数
和
析构函数
是否可以是虚函数,为什么?
构造函数
和
析构函数
是否可以是虚函数,为什么? 1. 为什么
构造函数
不能为虚函数? 虚函数的调用需要虚函数表指针,而该指针存放在对象的内容空间
中
;若
构造函数
声明
为虚函数,那么由于对象还未创建,还没有内存空间,更没有虚函数表地址用来调用虚函数——
构造函数
了。 2. 为什么
析构函数
可以为虚函数,如果不设为虚函数可能会存在什么问题? 首先
析构函数
可以为虚函数,而且当要使用基类指针或引用调用子类时,最好将基类的
析构函数
声明
为虚函数,否则可以存在内存泄露的问题。 举例说明: 子类B继承自基类A;A *p = new B
C++
构造函数
和
析构函数
详解
C++
中
用
构造函数
和
析构函数
来初始化和清理对象,这两个函数将会被编译器自动调用。对象的初始化和清理是非常重要的,如果我们不提供
构造函数
与
析构函数
,编译器会自动提供两个函数的空实现。............
C++ 类(
构造函数
和
析构函数
)
文章概述
构造函数
和
析构函数
的由来?
构造函数
和
析构函数
的基本语法 C++编译器构造析构方案 PK 对象显示初始化方案
构造函数
的分类以及调用 默认的
构造函数
构造函数
调用规则
构造函数
和
析构函数
的总结
构造函数
和
析构函数
的由来 类的数据成员不能在类的
声明
时候初始化,为了解决这个问题? 使用
构造函数
处理对对象的初始化。
构造函数
是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而...
C语言
70,034
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章