class A //包含虚函数的类
{
public:
virtual void func1()
{}
virtual void func2()
{}
};
class B//空类
{};
class C //包含成员函数不包含成员变量的类
{
void fun()
{}
};
void Test1()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
}
typedef void(*FUNC) ();
//int*VTavle = (int*)(*(int*)&a)
//传参完成后就可打印出对应的信息。
void PrintVTable(int* VTable)
{
cout << " 虚表地址>" << VTable << endl;
for (int i = 0; VTable[i] != 0; ++i)
{
printf(" 第%d个虚函数地址 :0X%x,->", i, VTable[i]);
FUNC f = (FUNC)VTable[i];
f();
}
cout << endl;
}
class A
{
public:
virtual void func1()
{
cout << "A::func1" << endl;
}
virtual void func2()
{
cout << "A::func2" << endl;
}
public:
int _a;
};
class B : public A
{
public:
virtual void func3()
{
cout << "B::func3" << endl;
}
virtual void func4()
{
cout << "B::func4" << endl;
}
public:
int _b;
};
void Test1()
{
B b;
b._a = 1;
b._b = 2;
int* VTable = (int*)(*(int*)&b);
PrintVTable(VTable);
}
class A
{
public:
virtual void func1()
{
cout << "A::func1" << endl;
}
virtual void func2()
{
cout << "A::func2" << endl;
}
public:
int _a;
};
class B : public A
{
public:
virtual void func1()
{
cout << "B::func1" << endl;
}
virtual void func3()
{
cout << "B::func3" << endl;
}
public:
int _b;
};
class A
{
public:
virtual void func1()
{
cout << "A::func1" << endl;
}
virtual void func2()
{
cout << "A::func2" << endl;
}
public:
int _a;
};
class B
{
public:
virtual void func3()
{
cout << "B::func1" << endl;
}
public:
int _b;
};
class C : public A , public B
{
//覆盖A::func1()
virtual void func1()
{
cout << "C::func1()"<<endl;
}
virtual void func4()
{
cout << "C::func4()" << endl;
}
public:
int _c;
};
class A
{
public:
virtual void func1()
{
cout << "A::func1" << endl;
}
public:
int _a;
};
class B : public A
{
public:
virtual void func2()
{
cout << "B::func2" << endl;
}
public:
int _b;
};
class C : public A
{
virtual void func3()
{
cout << "C::func3()" << endl;
}
public:
int _c;
};
class D : public B , public C
{
virtual void func2()
{
cout << "D::fun2()" << endl;
}
virtual void func4()
{
cout << "D::fun4()" << endl;
}
public:
int _d;
};
void Test1()
{
D d;
d.B::_a = 1;
d.C::_a = 2;
d._b = 3;
d._c = 4;
d._d = 5;
int* VTable = (int*)(*(int*)&d);
PrintVTable(VTable);
}
class A
{
public:
virtual void func1()
{
cout << "A::func1()" << endl;
}
virtual void func2()
{
cout << "A::func2()" << endl;
}
public:
int _a;
};
class B : virtual public A//虚继承A,覆盖func1()
{
public:
virtual void func1()
{
cout << "B::func1()" << endl;
}
virtual void func3()
{
cout << "B::func3()" << endl;
}
public:
int _b;
};
class C : virtual public A //虚继承A,覆盖func1()
{
virtual void func1()
{
cout << "C::func1()" << endl;
}
virtual void func3()
{
cout << "C::func3()" << endl;
}
public:
int _c;
};
class D : public B , public C//虚继承B,C,覆盖func1()
{
virtual void func1()
{
cout << "D::func1()" << endl;
}
virtual void func4()
{
cout << "D::func4()" << endl;
}
public:
int _d;
};
typedef void(*FUNC) ();
void PrintVTable(int* VTable)
{
cout << " 虚表地址>" << VTable << endl;
for (int i = 0; VTable[i] != 0; ++i)
{
printf(" 第%d个虚函数地址 :0X%x,->", i, VTable[i]);
FUNC f = (FUNC)VTable[i];
f();
}
cout << endl;
}
void Test1()
{
D d;
d.B::_a = 1;
d.C::_a = 2;
d._b = 3;
d._c = 4;
d._d = 5;
cout <<"sizeof(A) = "<< sizeof(A) << endl;
cout << "sizeof(B) = " << sizeof(B) << endl;
cout << "sizeof(C) = " << sizeof(C) << endl;
//打印d的虚函数表
int* VTable = (int*)(*(int*)&d);
PrintVTable(VTable);
//打印C的虚函数表
VTable = (int*)*(int*)((char*)&d + sizeof(B)-sizeof(A));
PrintVTable(VTable);
//打印A的虚函数表
VTable = (int*)*(int*)((char*)&d + sizeof(B)+sizeof(C)-2*sizeof(A)+4);
PrintVTable(VTable);
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有