#include <iostream>
using namespace std;
class A
{
char A[100];
};
class B:public A
{
char B[100];
};
class C:public A
{
char C[100];
};
class D:public B,public C
{
char D[100];
};
class E:public virtual A
{
char E[100];
};
class F:public virtual B
{
char F[100];
};
template<typename T,int N>
void printArrLength(T (&C)[N])
{
cout << "C[] spare mem space is " << sizeof(C) << endl;
cout << "C[] length is " << N << endl;
cout << "The array typebyte is " << sizeof(C)/N << endl;
}
struct CBaseClass1
{
CBaseClass1(size_t n):m_val(n) {}
public:
size_t m_val;
};
struct CSubClassV1:public virtual CBaseClass1
{
CSubClassV1(size_t n):CBaseClass1(n) {}
};
struct CSubClassV2:public virtual CBaseClass1
{
CSubClassV2(size_t n):CBaseClass1(n) {}
};
struct CDiamondClass1:public CSubClassV1,public CSubClassV2
{
CDiamondClass1(size_t n):CBaseClass1(n),CSubClassV1(n),CSubClassV2(n) {}
};
struct CDiamondSubClass1:public CDiamondClass1
{
CDiamondSubClass1(size_t n):CBaseClass1(n),CDiamondClass1(n) {}
};
void fa() { cout << "hello fa" << endl; }
void fb() { cout << "hello fb" << endl; }
void fc() { cout << "hello fc" << endl; }
typedef void (*funcptr)(void);
void new2DArray(int x,int y)
{
int ** p=new int*[y];
for(int i=0;i<y;i++)
p[i]=new int[x];
int count=0;
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
p[i][j]=count++;
for(int i=0;i<x;i++)
{
for(int j=0;j<y;j++)
cout << p[i][j] << " ";
cout << endl;
}
}
int main()
{
cout << "sizeof(A) " << sizeof(A) << endl;
cout << "sizeof(B) " << sizeof(B) << endl;
cout << "sizeof(C) " << sizeof(C) << endl;
cout << "sizeof(D) " << sizeof(D) << endl;
cout << "sizeof(E) " << sizeof(E) << endl;
cout << "sizeof(F) " << sizeof(F) << endl;
D* pd = new D;
C* pc = dynamic_cast<C*>(pd);
B* pb = dynamic_cast<B*>(pd);
cout << (int)(void*)pc << endl;
cout << (int)(void*)pb << endl;
cout << (int)(void*)pc - (int)(void*)pb << endl;
int p[]={1,2,3,4,5};
printArrLength(p);
funcptr fp;
char choosefunc;
cin >> choosefunc;
switch(choosefunc)
{
case 'a':
fp=&fa;
break;
case 'b':
fp=&fb;
break;
case 'c':
fp=fc;
break;
default:
break;
}
(*fp)();
new2DArray(4,5);
return 0;
}