Commit d2e095ca994667cfb6810ef2a8f4dbff93b5d29d

Authored by Grzegorz Jabłoński
1 parent b7d3599e

Added satellite.cpp with example of layout of complex class hierarchy

Showing 1 changed file with 76 additions and 0 deletions
examples10/satellite.cpp 0 → 100644
  1 +#include <iostream>
  2 +using namespace std;
  3 +
  4 +struct Task
  5 +{
  6 + int next_event_time;
  7 + void execute(){};
  8 + virtual void get_debug(){ cout << "Task" << endl;};
  9 + virtual int f(int){};
  10 +};
  11 +
  12 +struct Displayed
  13 +{
  14 + int x;
  15 + int y;
  16 + int z;
  17 + int rotx;
  18 + int roty;
  19 + int rotz;
  20 + virtual void draw(){};
  21 + virtual void get_debug(){cout << "Displayed" << endl;};
  22 + double f(double){};
  23 +};
  24 +
  25 +
  26 +struct Satellite : public Task, public Displayed
  27 +{
  28 + double uplink_frequency;
  29 + double downlink_frequency;
  30 + void transmit();
  31 + using Displayed::f;
  32 + using Task::f;
  33 + virtual void get_debug(){cout << "Satellite" << endl;};
  34 +};
  35 +
  36 +
  37 +struct Test {
  38 + int a;
  39 + double b;
  40 +};
  41 +
  42 +
  43 +int main()
  44 +{
  45 + cout << sizeof(Task) << endl;
  46 + cout << sizeof(Displayed) << endl;
  47 + cout << sizeof(Satellite) << endl;
  48 +
  49 + Satellite s;
  50 + Satellite* sptr = &s;
  51 +
  52 + cout << (char*)(&(sptr->next_event_time)) - (char*)sptr << endl;
  53 + cout << (char*)(&(sptr->x)) - (char*)sptr << endl;
  54 + cout << (char*)(&(sptr->rotz)) - (char*)sptr << endl;
  55 + cout << (char*)(&(sptr->uplink_frequency)) - (char*)sptr << endl;
  56 +
  57 +
  58 + cout << offsetof(Test, b) << endl;
  59 +
  60 + Task* tptr = sptr;
  61 + Displayed* dptr = sptr;
  62 +
  63 + cout << sptr << "," << tptr << "," << dptr << endl;
  64 +
  65 + return 1;
  66 +
  67 + tptr -> get_debug();
  68 + dptr -> get_debug();
  69 +
  70 + sptr -> get_debug();
  71 +
  72 + sptr -> f(1);
  73 + return 0;
  74 +}
  75 +
  76 +
... ...