c++ telescoping constructor is NOT supported until c++11

Telescoping constructor: see Effective Java 2nd Edition Item 2

If you want to use telescoping constructor but your compiler does not support c++11 standards, you can use default parameter instead, see code snippets 'main.cpp', 'Box.h', 'Box.cpp'.

If your compiler supports c++11 standards, the syntax of telescoping is shown in code snippet 'Box2.h' and 'Box2.cpp', and you might need to use '-std=c++11' parameter when you are compiling your source code.

For now, I'd like to use default parameter.

main.cpp

 1 #include "Box.h"

 2 

 3 int main()

 4 {

 5     Box box;

 6     box.print();

 7     Box box2(1);

 8     box2.print();

 9     Box box3(1, 'A');

10     box3.print();

11     Box box4(1, 'A', 1.88);

12     box4.print();

13     return 0;

14 }

 

Box.h

 1 #ifndef BOX_H

 2 #define BOX_H

 3 

 4 class Box

 5 {

 6     public:

 7         Box(const int &_a = 0, const char &_b = 'M', const double &_c = 0.99);

 8         ~Box();

 9         void print();

10 

11     private:

12         int a;

13         char b;

14         double c;

15 };

16 

17 #endif // BOX_H

 

Box.cpp

 1 #include "Box.h"

 2 

 3 #include <iostream>

 4 

 5 using namespace std;

 6 

 7 Box::Box(const int &_a, const char &_b, const double &_c)

 8 : a(_a), b(_b), c(_c)

 9 {

10 

11 }

12 

13 Box::~Box()

14 {

15 

16 }

17 

18 void Box::print() {

19     cout << "a = " << a << ",b = " << b << ",c = " << c << endl;

20 }

Box2.h

 1 #ifndef BOX_H

 2 #define BOX_H

 3 

 4 class Box

 5 {

 6     public:

 7         Box(const int &_a, const char &_b, const double &_c);

 8         Box(const int &_a, const char &_b);

 9         Box(const int &_a);

10         Box();

11         ~Box();

12         void print();

13 

14     private:

15         int a;

16         char b;

17         double c;

18 };

19 

20 #endif // BOX_H

 

Box2.cpp

 1 #include "Box.h"

 2 

 3 #include <iostream>

 4 

 5 using namespace std;

 6 

 7 Box::Box(const int &_a, const char &_b, const double &_c)

 8 : a(_a), b(_b), c(_c)

 9 {

10 

11 }

12 

13 Box::Box(const int &_a, const char &_b)

14 : Box(_a, _b, 0.99)

15 {

16 

17 }

18 

19 Box::Box(const int &_a)

20 : Box(_a, 'M')

21 {

22 

23 }

24 

25 Box::Box()

26 : Box(0)

27 {

28 

29 }

30 

31 Box::~Box()

32 {

33 

34 }

35 

36 void Box::print() {

37     cout << "a = " << a << ",b = " << b << ",c = " << c << endl;

38 }

 

你可能感兴趣的:(Constructor)