C + + overloaded constructors cannot call each other

The overloaded constructors in java classes can call each other, as follows:

 1 public class TestConstructor {
 2     private int value;
 3 
 4     public TestConstructor(int value) {
 5         this.value = value;
 6         System.out.println("constructor1:"+this);
 7     }
 8 
 9     public TestConstructor() {
10         this(10);
11         System.out.println("constructor2:"+this);
12     }
13 
14     public static void main(String[] args) {
15         TestConstructor test = new TestConstructor();
16         System.out.println(test.value);
17         System.out.println(test);
18     }
19 }

The code execution result is:

constructor1:TestConstructor@74a14482
constructor2:TestConstructor@74a14482
10
TestConstructor@74a14482

The result is expected, the value assignment is successful, and only one object is created.

 

 

Take a look at the C + + implementation (header file omitted):

 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 {
13     this->value = value;
14     qDebug()<<"constructor2:"<<this;
15 }
 1 #include "testconstructor.h"
 2 #include <QDebug>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     TestConstructor *t = new TestConstructor();
 7     qDebug()<<t->value;
 8     qDebug()<<t;
 9     delete t;
10 }

The code execution result is:

constructor2: 0x22fcf0

constructor1: 0xdadfb0

15574896

0xdadfb0 

On the one hand, the value set to value does not take effect. On the other hand, two constructors create two different objects, indicating that C + + cannot call each other like java.

resolvent:

Most constructors should call each other with default parameters. In the function declaration of C + +, you can directly set the default parameters (java does not support default parameters), so there is no need to overload the constructors:

TestConstructor(int value = 10);

Tags: C++ Java

Posted on Wed, 01 Apr 2020 03:29:10 -0700 by bluebutterflyofyourmind