社区
C语言
帖子详情
请问为什么构造函数和析构函数都必须声明在 public中?
zhaobong
2002-01-11 09:34:15
我想是不是因为用类定义变量后,在执行时会调用此类的构造函数和析构函数的缘故?
...全文
860
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++
构造函数
和
析构函数
(为什么要用和怎么用)
构造函数
构造函数
(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作 特点 函数名与类同名,无返回值(void都不能写),可以有参数,可以重载,可以有多个
构造函数
一旦自定义了
构造函数
,
必须
用其
中
一个自定义的
构造函数
来初始化对象 注意 通过malloc分配的对象不会调用
构造函数
,用new和(类 对象名这种方法)可以调用
构造函数
**错误结论:**默认情况下,编译器会为每一个类生成空的无参的
构造函数
正确理解:在某些特定的情况下,编译器才会为类生成空的无参的
构造函数
如当成员变量在类里已经
构造函数
、
析构函数
、多态、虚函数、纯虚函数、虚
析构函数
、拷贝
构造函数
、protected、private、
public
用来实现多态,允许基类的函数被实例化。通过在基类
中
声明
虚函数,并在派生类
中
进行重写,实现了在运行时根据对象的实际类型选择合适的函数实现。
C++
构造函数
、
析构函数
、拷贝
构造函数
原文链接:
构造函数
、
析构函数
、拷贝
构造函数
一、
构造函数
概念(作用): 用来在创建对象时,对对象进行初始化 特点
构造函数
无返回值,函数名与类名相同,
必须
存在于
public
中
构造函数
可以重载 不用来初始化static数据成员,因为static数据成员不属于类 默认
构造函数
(合成的
构造函数
) 如果没有在类
中
给出
构造函数
,编译器自动生成一个默认的
构造函数
(无参数、函数体为空) 当在类
中
手动给出
构造函数
时,默认的
构造函数
消失 编译器自动生成的默认的
构造函数
又称为“合成的默认构造.
为社么类的构造和
析构函数
是
public
的
引用百度用户:jeny_man的回答 你提出这个问题,说明你已经对c++有所思考了。 从语法上来讲,一个函数被
声明
为protected或者private,那么这个函数就不能从“外部”直接被调用了。 对于protected的函数,子类的“内部”的其他函数可以调用之。 而对于private的函数,只能被本类“内部”的其他函数说调用。 语法上就是这么规定的,你肯定也知道的咯。 那么为什么有时候将构造函...
构造函数
、
析构函数
声明
为私有、保护
构造函数
不为
public
时,已经不能从外部调用
构造函数
了,但是对象
必须
被构造,应该如何解决? 从语法上来讲,一个函数被
声明
为protected或者private,那么这个函数就不能从“外部”直接被调用了。 对于protected的函数,子类的“内部”的其他函数可以调用之。 而对于private的函数,只能被本类“内部”的其他函数调用。 使用场景: 继承使用:如果你不想让外面的用户直接构造一...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章