C++/Class 2021. 3. 20. 17:19

상속과 패딩

  • 일반적인 구조체와 마찬가지로 패딩이 끼게 된다.

    • 패딩이 없는 예제 (int, float)

      #include <iostream>
      
      class Mother
      {
        int i_;
      
      public:
        Mother(const int & i_in = 0)
          : i_(i_in)
        {
          std::cout << "Mother construction\n";
        }
      };
      
      class Child : public Mother
      {
        float d_;
      
      public:
        Child()
          : d_(1.0), Mother(1024)
        {
          std::cout << "Child construction\n";
        }
      };
      
      int        main()
      {
        using namespace std;
      
        cout << sizeof(Mother) << endl;
        cout << sizeof(Child) << endl;
      }
      
      /* stdout
      4
      8
      */
    • 4바이트 패딩 예제 (int, double)

      #include <iostream>
      
      class Mother
      {
        int i_;
      
      public:
        Mother(const int & i_in = 0)
          : i_(i_in)
        {
          std::cout << "Mother construction\n";
        }
      };
      
      class Child : public Mother
      {
        double d_;
      
      public:
        Child()
          : d_(1.0), Mother(1024)
        {
          std::cout << "Child construction\n";
        }
      };
      
      int        main()
      {
        using namespace std;
      
        cout << sizeof(Mother) << endl;
        cout << sizeof(Child) << endl;
      }
      
      /* stdout
      4
      16
      */
    • 끝에 패딩이 4바이트 더 붙은 예제 (int, double, int)

      #include <iostream>
      
      class Mother
      {
        int i_;
      
      public:
        Mother(const int & i_in = 0)
          : i_(i_in)
        {
          std::cout << "Mother construction\n";
        }
      };
      
      class Child : public Mother
      {
        double d_;
        int    tmp_;
      
      public:
        Child()
          : d_(1.0), Mother(1024)
        {
          std::cout << "Child construction\n";
        }
      };
      
      int        main()
      {
        using namespace std;
      
        cout << sizeof(Mother) << endl;
        cout << sizeof(Child) << endl;
      }
      
      /* stdout
      4
      24
      */

'C++ > Class' 카테고리의 다른 글

C++ 함수 오버라이딩  (0) 2021.03.20
C++ 상속과 접근 지정자  (0) 2021.03.20
C++ 유도된 클래스들의 소멸 순서  (0) 2021.03.19
C++ 유도된 클래스들의 생성 순서  (0) 2021.03.19
C++ 상속 Teacher-Student 예제  (0) 2021.03.19