C++ Tutorial/Operators statements/sizeof

Материал из C\C++ эксперт
Версия от 10:30, 25 мая 2010; Admin (обсуждение | вклад) (1 версия: Импорт контента...)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Demonstrate sizeof.

#include <iostream> 
using namespace std; 
 
int main() 
{ 
  char ch; 
  int i; 
 
  cout << sizeof ch << " "; // size of char 
  cout << sizeof i << " ";  // size of int 
  cout << sizeof (float) << " "; // size of float 
  cout << sizeof (double) << " "; // size of double 
 
  return 0; 
}
1 4 4 8

Object sizes

#include <iostream>
using std::cout;
using std::endl;
class Box {
  public:
    Box() :length(1.0), width(1.0), height(1.0), pMaterial("new") {}
    
    int totalSize() {
      return sizeof(length) + sizeof(width) + sizeof(height) + sizeof(pMaterial
);
    }
  private:
    char* pMaterial;
    double length;
    double width;
    double height;
};
int main() {
  Box box;
  Box boxes[10];
  cout << endl            << "The data members of a Box object occupy "
       << box.totalSize() << " bytes.";
  cout << endl           << "A single Box object occupies "
       << sizeof (Box) << " bytes.";
  cout << endl           << "An array of 10 Box objects occupies "
       << sizeof(boxes)  << " bytes."
       << endl;
  return 0;
}
The data members of a Box object occupy 28 bytes.
A single Box object occupies 32 bytes.
An array of 10 Box objects occupies 320 bytes.

sizeof a class

/* The following code example is taken from the book
 * "C++ Templates - The Complete Guide"
 * by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
 *
 * (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
#include <iostream>
class EmptyClass {
};
int main()
{
    std::cout << "sizeof(EmptyClass): " << sizeof(EmptyClass)
              << "\n";
}
sizeof(EmptyClass): 1

sizeof a union

#include<iostream.h>
union u_tag{
   int i;
   double d;
}u={88};
struct s_tag{
    int i;
       double d;
}s={66,1.234};
int main()
{
    int size;
       size=sizeof(union u_tag);
    cout<<"sizeof(union u_tag)="<<size<<endl;
    u.i=100;
       cout<<"u.i="<<u.i<<endl;
       u.d=1.2345;
       cout<<"u.d="<<u.d<<endl;
       size=sizeof(u.d);
       cout<<"sizeof(u.d)="<<size<<endl;
       cout<<"s.i="<<s.i<<endl;
       cout<<"s.d="<<s.d<<endl;
       size=sizeof(struct s_tag);
       cout<<"sizeof(struct s_tag)="<<size<<endl;
}
sizeof(union u_tag)=8
u.i=100
u.d=1.2345
sizeof(u.d)=8
s.i=66
s.d=1.234
sizeof(struct s_tag)=16

Use sizeof operator on an array name: returns the number of bytes in the array

#include <iostream>
using std::cout;
using std::endl;
int main()
{
   double array[ 20 ];
   cout << "The number of bytes in the array is " << sizeof( array );
   return 0;
}
The number of bytes in the array is 160

Using the sizeof operator for base class and derived class

#include <iostream>
#include <ostream>
class base {};
class derived : public base {};
int main()
{
  using namespace std;
  cout << sizeof(base)  << "\n";      
  cout << sizeof(derived)  << "\n";   
  base b[3];
  
  cout << sizeof(b) << "\n";          
  derived d[5];
  cout << sizeof(d) << "\n";          
}
1
1
3
5