code0.cpp 热身一下C++, 无继承:
#include <iostream>
using namespace std;
class A
{
public:
	int x;
};
class B
{
public:
	int x;
};
int main()
{
	cout << sizeof(A) << endl; // 4
	cout << sizeof(B) << endl; // 4
	A a;
	printf("%p\n", &a.x);     // 0013FF7C
	printf("%p\n", &a.A::x);  // 0013FF7C
	B b;
	printf("%p\n", &b.x);     // 0013FF78
	printf("%p\n", &b.B::x);  // 0013FF78
	return 0;
}
code1.cpp, 简单继承:
#include <iostream>
using namespace std;
class A
{
public:
	int x;
};
class B : public A
{
};
int main()
{
	cout << sizeof(A) << endl; // 4
	cout << sizeof(B) << endl; // 4
	A a;
	printf("%p\n", &a.x);     // 0013FF7C
	printf("%p\n", &a.A::x);  // 0013FF7C
	B b;
	printf("%p\n", &b.x);     // 0013FF78
	printf("%p\n", &b.B::x);  // 0013FF78
	printf("%p\n", &b.A::x);  // 0013FF78
	return 0;
}
code2.cpp继承
#include <iostream>
using namespace std;
class A
{
public:
	int x;
};
class B : public A
{
public:
	int x;
};
int main()
{
	cout << sizeof(A) << endl; // 4
	cout << sizeof(B) << endl; // 8
	A a;
	printf("%p\n", &a.x);     // 0013FF7C
	printf("%p\n", &a.A::x);  // 0013FF7C
	B b;
	printf("%p\n", &b.x);     // 0013FF78
	printf("%p\n", &b.B::x);  // 0013FF78
	printf("%p\n", &b.A::x);  // 0013FF74   //可见, B自己有两份x
	return 0;
}
       code3.cpp, 将code2.cpp改为无继承等价形式:
#include <iostream>
using namespace std;
class A
{
public:
	int x;
};
class B
{
public:
	int AAAx;
	int x;
};
int main()
{
	cout << sizeof(A) << endl; // 4
	cout << sizeof(B) << endl; // 8
	A a;
	printf("%p\n", &a.x);     // 0013FF7C
	printf("%p\n", &a.A::x);  // 0013FF7C
	B b;
	printf("%p\n", &b.x);     // 0013FF78
	printf("%p\n", &b.B::x);  // 0013FF78
	printf("%p\n", &b.AAAx);  // 0013FF74   //可见, code2.cpp中的成员变量继承的效果实际上类似于直接拷贝代码
	return 0;
}
code4.cpp, 看看无继承的函数
#include <iostream>
using namespace std;
class A
{
public:
	void test(){}
};
class B
{
public:
	void test(){}
};
int main()
{
	cout << sizeof(A) << endl; // 1
	cout << sizeof(B) << endl; // 1
	A a;
	printf("%p\n", a.test);     // 00401131
	printf("%p\n", a.A::test);  // 00401131
	B b;
	printf("%p\n", b.test);     // 004010D7
	printf("%p\n", b.B::test);  // 004010D7
	return 0;
}
code5.cpp 看看函数继承:
#include <iostream>
using namespace std;
class A
{
public:
	void test(){}
};
class B : public A
{
};
int main()
{
	cout << sizeof(A) << endl; // 1
	cout << sizeof(B) << endl; // 1
	A a;
	printf("%p\n", a.test);     // 0040112C
	printf("%p\n", a.A::test);  // 0040112C
	B b;
	printf("%p\n", b.test);     // 0040112C
	printf("%p\n", b.B::test);  // 0040112C
	printf("%p\n", b.A::test);  // 0040112C  
	return 0;
}
code6.cpp函数继承
#include <iostream>
using namespace std;
class A
{
public:
	void test(){}
};
class B : public A
{
public:
	void test(){}
};
int main()
{
	cout << sizeof(A) << endl; // 1
	cout << sizeof(B) << endl; // 1
	A a;
	printf("%p\n", a.test);     // 00401131
	printf("%p\n", a.A::test);  // 00401131
	B b;
	printf("%p\n", b.test);     // 004010D7
	printf("%p\n", b.B::test);  // 004010D7
	printf("%p\n", b.A::test);  // 00401131  //这里居然是00401131, 要理解
	return 0;
}
可见, 在继承中, 成员变量的继承类似于“拷贝”, 成员函数的继承类似于“共用”。