#include "mainwindow.h" #include "ui_mainwindow.h" #include "c.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); test (); } MainWindow::~MainWindow() { delete ui; } #define SHOW(x) \ { \ QTreeWidgetItem * item = new QTreeWidgetItem; \ int n = (char *) & v.x - (char *) & v; \ QString s = QString (#x) + " size " + QString::number (sizeof (v.x)) + \ ", offset " + QString::number (n); \ item->setText (0, s); \ top->addChild (item); \ } #define SIMPLE(x) \ { \ QTreeWidgetItem * item = new QTreeWidgetItem; \ int n = 2*(x); \ QString s = "simple " + QString::number (n); \ item->setText (0, s); \ top->addChild (item); \ } void MainWindow::test () { QTreeWidgetItem * t = new QTreeWidgetItem (); t->setText (0, "C pointer size " + QString::number (sizeof (C*))); ui->treeWidget->addTopLevelItem (t); { QTreeWidgetItem * top = new QTreeWidgetItem (); top->setText (0, "C size " + QString::number (sizeof (C))); ui->treeWidget->addTopLevelItem (top); C v; SHOW (x) SHOW (y) SHOW (z) } { QTreeWidgetItem * top = new QTreeWidgetItem (); top->setText (0, "D size " + QString::number (sizeof (D))); ui->treeWidget->addTopLevelItem (top); D v; SHOW (x) SHOW (y) SHOW (z) // SHOW (a) // SHOW (b) // SHOW (c) SHOW (w) } { D * d = new D (); C * c = d; int p = (char *) c - (char *) d; QTreeWidgetItem * u = new QTreeWidgetItem (); u->setText (0, "C position in D is " + QString::number (p)); ui->treeWidget->addTopLevelItem (u); } { Z * z = new Z (); D * d = z; E * e = z; int p = (char *) d - (char *) z; QTreeWidgetItem * u = new QTreeWidgetItem (); u->setText (0, "D position in Z is " + QString::number (p)); ui->treeWidget->addTopLevelItem (u); p = (char *) e - (char *) z; u = new QTreeWidgetItem (); u->setText (0, "E position in Z is " + QString::number (p)); ui->treeWidget->addTopLevelItem (u); C * c = d; c = z; p = (char *) c - (char *) d; u = new QTreeWidgetItem (); u->setText (0, "C position in D in Z is " + QString::number (p)); ui->treeWidget->addTopLevelItem (u); c = e; p = (char *) c - (char *) e; u = new QTreeWidgetItem (); u->setText (0, "C position in E in Z is " + QString::number (p)); ui->treeWidget->addTopLevelItem (u); } }