//内存单元地址分配、构造 的顺序与继承的顺序有关
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
int m_a;
~A()
{
cout << "~~A" << endl;
}
};
class A1 :virtual public A
{
public:
int m_a1;
A1(int a1)
{
m_a1 = a1;
cout << "A1" << endl;
}
~A1()
{
cout << "~~A1" << endl;
}
};
class A2 :virtual public A
{
public:
int m_a2;
A2(int a2)
{
m_a2 = a2;
cout << "A2" << endl;
}
~A2()
{
cout << "~~A2" << endl;
}
};
class C :public A1,public A2
{
public:
int m_c;
C(int c) : A1(c), A2(c)
{
m_c = c;
cout << "CCCCCCCCC" << endl;
}
~C()
{
cout << "~~CCCCCCCCC" << endl;
}
};
int main()
{
C c1(1);
cout << sizeof(c1) << endl;
cout << "&c1 = " << &c1 << endl;
cout << "&c1.A1::m_a " << &c1.A1::m_a << endl;
cout << "&c1.m_a1 = " << &c1.m_a1 << endl;
cout << "&c1.A2::m_a " << &c1.A2::m_a << endl;
cout << "&c1.m_a2 = " << &c1.m_a2 << endl;
cout << "&c1.m_c = " << &c1.m_c << endl;
//虚继承就是把 父类里的变量的地址分配 往后放, 先分配自己的地址
cout << "虚继承就是把 父类里的变量的地址分配 往后放, 先分配自己的地址" << endl;
cout << "&c1.m_a1 = " << &c1.m_a1 << endl;
cout << "&c1.m_a2 = " << &c1.m_a2 << endl;
cout << "&c1.m_c = " << &c1.m_c << endl;
cout << "&c1.A1::m_a " << &c1.A1::m_a << endl;
cout << "&c1.A2::m_a " << &c1.A2::m_a << endl;
//对应的虚继承在其最前面分配一个指针(占四个字节) 指向 虚继承来的变量地址(在最后面)
system("pause");
return 0;
}
#include <iostream>
using namespace std;
class A
{
private:
int m_a;
public :
A()
{
cout << "A constuctor" << endl;
}
void print()
{
cout << "AAAAAAAAA" << endl;
}
};
class B :public A
{
private:
int m_b;
public:
B()
{
cout << "B constuctor" << endl;
}
void print()
{
cout << "BBBBBBBB" << endl;
}
};
int main()
{
A a1;
B b1;
a1 = b1;
A *p1 = new A;//父类指针指向父类对象
A *p2 = new B;//父类指针只爱想子类对象(向下转型)
p2->print();
B *p3 = new B;//子类指针指向子类对象
system("pause");
return 0;
}