类对象成员的初始化

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /**
  4. * 类对象成员初始化
  5. * */
  6. class StudentID {
  7. public:
  8. int getID() {
  9. return value;
  10. }
  11. StudentID(int id=0) {
  12. value = id;
  13. printf("student id: %d\n", value);
  14. }
  15. ~StudentID() {
  16. printf("destruct id: %d\n", value);
  17. }
  18. private:
  19. int value;
  20. };
  21. class Student {
  22. char name[20];
  23. StudentID id;
  24. public:
  25. Student(char *pName="noName", int ssID = 0): id(ssID) {
  26. printf("construct student %s\n", pName);
  27. strncpy(name, pName, sizeof(name));
  28. name[sizeof(name)-1] = '\0';
  29. // StudentID(ssID); // 错误,实际上定义了一个对象成员,但是之前已经调用了默认的构造函数了
  30. }
  31. ~Student() {
  32. printf("destruct name %s id: %d\n", name, id.getID());
  33. }
  34. void display() {
  35. printf("student name:%s id: %d\n", name, id.getID());
  36. }
  37. };
  38. int main() {
  39. char name[20] = "console";
  40. Student s(name, 2019);
  41. s.display();
  42. return 0;
  43. }

类对象成员的构造顺序

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /**
  4. * 类对象成员的构造顺序
  5. * */
  6. class A {
  7. int a;
  8. public:
  9. A(int i) {
  10. a = i;
  11. printf("construct A a=%d\n", a);
  12. }
  13. };
  14. class B {
  15. int b;
  16. public:
  17. B(int i) {
  18. b = i;
  19. printf("construct B b=%d\n", b);
  20. }
  21. };
  22. class C {
  23. A a1, a2;
  24. B b1, b2;
  25. public:
  26. C(int i1, int i2, int i3, int i4) :b1(i1), a1(i2), b2(i3), a2(i4) {
  27. }
  28. };
  29. int main() {
  30. C x(1, 2, 3, 4);
  31. return 0;
  32. }

输出顺序应该是声明顺序,而不是构造函数中初始化列表的顺序
2 4 1 3