C++重载的构造函数不能互相调⽤
java类⾥的重载构造函数可以互相调⽤,如下代码:
1public class TestConstructor {
2private int value;
3
4public TestConstructor(int value) {
5this.value = value;
6 System.out.println("constructor1:"+this);
7 }
8
9public TestConstructor() {
10this(10);
构造函数可以被重载11 System.out.println("constructor2:"+this);
12 }
13
14public static void main(String[] args) {
15 TestConstructor test = new TestConstructor();
16 System.out.println(test.value);
17 System.out.println(test);
18 }
19 }
代码执⾏结果是:
constructor1:TestConstructor@74a14482
constructor2:TestConstructor@74a14482
10
TestConstructor@74a14482
可见结果是预期的,对value赋值是成功的,且只创建了⼀个对象。
来看⼀下C++实现(头⽂件省略):
1 #include "testconstructor.h"
2 #include <QDebug>
3
4 TestConstructor::TestConstructor()
5 {
6// this(10);
7 TestConstructor(10);
8 qDebug()<<"constructor1:"<<this;
9 }
10
11 TestConstructor::TestConstructor(int value)
12 {
13this->value = value;
14 qDebug()<<"constructor2:"<<this;
15 }
1 #include "testconstructor.h"
2 #include <QDebug>
3
4int main(int argc, char *argv[])
5 {
6 TestConstructor *t = new TestConstructor();
7 qDebug()<<t->value;
8 qDebug()<<t;
9delete t;
10 }
代码执⾏结果是:
constructor2: 0x22fcf0
constructor1: 0xdadfb0
15574896
0xdadfb0
⼀⽅⾯,对value设置的值没有⽣效,另⼀⽅⾯,两个构造函数创建了两个不同的对象,说明C++不能像java那样构造函数之间互相调⽤。解决⽅法:
⼤多数构造函数互相调⽤的需求应该是有默认参数,在C++的函数声明中可以直接设置默认传参(java不⽀持默认参数),这样就不需要构造函数重载了:
TestConstructor(int value = 10);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论