53 lines
1.1 KiB
C++
53 lines
1.1 KiB
C++
|
#include <iostream>
|
||
|
|
||
|
class Base1 {
|
||
|
virtual void func() {}
|
||
|
char ch;
|
||
|
// int val;
|
||
|
};
|
||
|
|
||
|
class Base2 {
|
||
|
virtual void func() {}
|
||
|
// char ch;
|
||
|
int val;
|
||
|
};
|
||
|
|
||
|
class Base3 {
|
||
|
// virtual void func() {}
|
||
|
char ch;
|
||
|
// int val;
|
||
|
// double val;
|
||
|
};
|
||
|
|
||
|
class Base4 {
|
||
|
// virtual void func() {}
|
||
|
// char ch;
|
||
|
int val;
|
||
|
// double val;
|
||
|
};
|
||
|
class Derived : public Base1, public Base2, public Base3, public Base4 {
|
||
|
virtual void func() {}
|
||
|
double val;
|
||
|
};
|
||
|
|
||
|
int main() {
|
||
|
Derived d1;
|
||
|
Derived* pd1 = &d1;
|
||
|
Base1* pb1 = &d1;
|
||
|
Base2* pb2 = &d1;
|
||
|
Base3* pb3 = &d1;
|
||
|
Base4* pb4 = &d1;
|
||
|
|
||
|
std::cout << "notice how those casts are performed according to member alignments" << std::endl;
|
||
|
std::cout << pd1 << std::endl
|
||
|
<< pb1 << std::endl
|
||
|
<< pb2 << std::endl
|
||
|
<< pb3 << std::endl
|
||
|
<< pb4 << std::endl;
|
||
|
|
||
|
std::cout << sizeof(Derived) << std::endl
|
||
|
<< sizeof(Base1) << std::endl
|
||
|
<< sizeof(Base2) << std::endl
|
||
|
<< sizeof(Base3) << std::endl
|
||
|
<< sizeof(Base4) << std::endl;
|
||
|
}
|