社区
C++ 语言
帖子详情
C++类有两个构造函数,相互调用,怎么写?
lcb
2011-10-12 03:17:01
ClassTest::ClassTest() {
m_name="test";
}
ClassTest::ClassTest(char* filename) {
ClassTest();
}
两个构造函数,无参数的那个实现一些基础功能。有参数的那个执行时同样要实现ClassTest()已经实现了的功能,要怎么写?我上面这样写好像会引起一些内存错误。
...全文
586
13
打赏
收藏
C++类有两个构造函数,相互调用,怎么写?
ClassTest::ClassTest() { m_name="test"; } ClassTest::ClassTest(char* filename) { ClassTest(); } 两个构造函数,无参数的那个实现一些基础功能。有参数的那个执行时同样要实现ClassTest()已经实现了的功能,要怎么写?我上面这样写好像会引起一些内存错误。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
星羽
2011-10-13
打赏
举报
回复
[Quote=引用 7 楼 vilnies 的回复:]
额外写一个Init()函数不就简单多了。
[/Quote]
这么做可以,不少工程都是这么干的,一个init 一个destroy
星羽
2011-10-13
打赏
举报
回复
ClassTest::ClassTest(char* filename) {
ClassTest(); // 这其实是构造了个临时对象= =
}
ri_aje
2011-10-13
打赏
举报
回复
[Quote=引用 8 楼 mingliang1212 的回复:]
ClassTest::ClassTest(char* filename) {
ClassTest tmp;
...
this->swap(tmp);//这个swap是自己定义的交换资源用的函数。
}
[/Quote]
这个主意不好,swap 通常要求需要交换的两个对象都是构造完全的,在 this 的构在函数里,this 本身还是一个正在构造的对象。
only_lonely
2011-10-12
打赏
举报
回复
C++11才能像初始化列表一样调用构造函数吧?
为什么不把两个构造函数间的类似代码抽象到一个inline的函数中呢?
zzhen201
2011-10-12
打赏
举报
回复
建立一个私有的初始化函数就可以了吧,
iamnobody
2011-10-12
打赏
举报
回复
ClassTest::ClassTest(char* filename) {
ClassTest tmp;
...
this->swap(tmp);//这个swap是自己定义的交换资源用的函数。
}
vilnies
2011-10-12
打赏
举报
回复
额外写一个Init()函数不就简单多了。
jhzlf
2011-10-12
打赏
举报
回复
构造函数调用构造函数?
你那么写会产生一个临时变量
不建议这么写,公共部分提出来作为一个单独的函数多好
非要写用2楼的。。。
pengzhixi
2011-10-12
打赏
举报
回复
你还打算相互调用?然后陷入死循环?
ri_aje
2011-10-12
打赏
举报
回复
在 C++03 中无法实现,C++11 中增加了一个 delegate constructor 的概念,用起来就像初始化列表一样,你的编译器要是支持 C++11 的这个特性,可以试一下,否则没办法。
pengzhixi
2011-10-12
打赏
举报
回复
你在第2个构造函数里面调用第一个构造函数来构造一个临时对象是干什么呢?
阿白hhh
2011-10-12
打赏
举报
回复
用初始化列表调用
iamnobody
2011-10-12
打赏
举报
回复
应该不会吧:
ClassTest::ClassTest(char* filename) {
this->ClassTest();
}
C++
中可以在
构造函数
中
调用
另一个
构造函数
吗?
今天在面试的时候,
写
了一个类,自己在另一个
构造函数
中
调用
了另一个
构造函数
,面试官说,这样不行吧,你回去查查。 后来回来一查,果然我
写
的有问题。下面一篇文章
写
的很好详细,我这里转过来,原文来自这里:http://www.cnblogs.com/chio/archive/2007/10/20/931043.html --------从这里开始转载--------- 题目如下:问下列代码的打印结果
c++
中
构造函数
的
相互
调用
c++
中
构造函数
的
相互
调用
构造函数
调用
规则
默认情况下,
C++
编译器至少给类添加3个函数 1、默认
构造函数
(无参,函数体 为空); 2、默认析构函数(无参,函数体 为空); 3、默认拷贝
构造函数
,对属性进行值拷贝。
构造函数
调用
规则如下: 1、如果用户定义有参
构造函数
,
C++
不再提供默认无参
构造函数
,但会提供默认拷贝
构造函数
; 2、如果用户定义拷贝
构造函数
,
C++
不会再提供其他
构造函数
。
C++
学习笔记-----在一个
构造函数
中
调用
另一个
构造函数
在
构造函数
中
调用
另一个
构造函数
如果一不注意就会有无限递归的危险,而且
构造函数
的参数的不同也决定了
调用
的不同,所以特意总结了一下哪些形式的
调用
时允许的: 首先假设
构造函数
调用
时参数都是外部的变量,而不是一个常量。 第一种,也是
C++
11支持的一种
调用
方式。在函数的初始化列表中
调用
另一个
构造函数
: int b = 2; class Test { public: Test() : Test(b)
C++
:派生类的默认
构造函数
和拷贝
构造函数
调用
基类
构造函数
的机制(含程序验证)
C++
:派生类的默认
构造函数
和拷贝
构造函数
调用
基类
构造函数
的机制(含程序验证) 1、如果基类定义了不带参数的默认
构造函数
,则编译器为派生类自动生成的默认
构造函数
会
调用
基类的默认
构造函数
。 2、如果基类定义了拷贝
构造函数
,则编译器为派生类自动生成的拷贝
构造函数
同样会
调用
基类的拷贝
构造函数
。 3、如果基类定义了带参数的
构造函数
,派生类没有定义任何带参数的
构造函数
,则不能直接
调用
基类的带参
构造函数
,程序编译不通过。
C++ 语言
64,676
社区成员
250,490
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章