继承调用函数关系
Code
class A
{
public:
void TestA();
virtual void VirtualFun();
void Fun();
};
class B : public A //B是A的子类
{
public:
void TestB();
virtual void VirtualFun();
void Fun();
};
void A::Fun()
{
printf("A::Fun\n");
}
void A::VirtualFun()
{
printf("A::VirtualFun\n");
}
void A::TestA()
{
Fun();
VirtualFun();
}
void B::Fun()
{
printf("B::Fun\n");
}
void B::VirtualFun()
{
printf("B::VirtualFun\n");
}
void B::TestB()
{
Fun();
VirtualFun();
}
int main(int argc, char* argv[])
{
A a ;
B b ;
A * pA = NULL ;
B * pB = NULL ;
//实验子项一:A类的对象
printf("实验子项一:A类的对象\n");
a.Fun();
a.VirtualFun() ;
printf("----end---\n\n");
//实验子项二:B类的对象
printf("实验子项二:B类的对象\n");
b.Fun();
b.VirtualFun() ;
printf("----end---\n\n");
//实验子项三:A类的指针指向A类
printf("实验子项三:A类的指针指向A类\n");
pA = &a ;
pA->Fun() ;
pA->VirtualFun() ;
printf("----end---\n\n");
//实验子项四:B类的指针指向B类
printf("实验子项四:B类的指针指向B类\n");
pB = &b ;
pB->Fun() ;
pB->VirtualFun() ;
printf("----end---\n\n");
//实验子项五:A类的指针指向B类
printf("实验子项五:A类的指针指向B类\n");
pA = &b ;
pA->Fun() ;
//!!!输出B的VirtualFun();
pA->VirtualFun();
printf("----end---\n\n");
//实验子项六:A类的函数
printf("实验子项六:A类的函数\n");
a.TestA();
printf("----end---\n\n");
//实验子七:B类的函数
printf("实验子七:B类的函数\n");
b.TestB();
printf("----end---\n\n");
//实验子八:B类从A继承的函数
printf("实验子八:B类从A继承的函数\n");
//!!!输出A的Fun()和B的VirtualFun();
b.TestA();
printf("----end---\n\n");
return 0;
}
class A
{
public:
void TestA();
virtual void VirtualFun();
void Fun();
};
class B : public A //B是A的子类
{
public:
void TestB();
virtual void VirtualFun();
void Fun();
};
void A::Fun()
{
printf("A::Fun\n");
}
void A::VirtualFun()
{
printf("A::VirtualFun\n");
}
void A::TestA()
{
Fun();
VirtualFun();
}
void B::Fun()
{
printf("B::Fun\n");
}
void B::VirtualFun()
{
printf("B::VirtualFun\n");
}
void B::TestB()
{
Fun();
VirtualFun();
}
int main(int argc, char* argv[])
{
A a ;
B b ;
A * pA = NULL ;
B * pB = NULL ;
//实验子项一:A类的对象
printf("实验子项一:A类的对象\n");
a.Fun();
a.VirtualFun() ;
printf("----end---\n\n");
//实验子项二:B类的对象
printf("实验子项二:B类的对象\n");
b.Fun();
b.VirtualFun() ;
printf("----end---\n\n");
//实验子项三:A类的指针指向A类
printf("实验子项三:A类的指针指向A类\n");
pA = &a ;
pA->Fun() ;
pA->VirtualFun() ;
printf("----end---\n\n");
//实验子项四:B类的指针指向B类
printf("实验子项四:B类的指针指向B类\n");
pB = &b ;
pB->Fun() ;
pB->VirtualFun() ;
printf("----end---\n\n");
//实验子项五:A类的指针指向B类
printf("实验子项五:A类的指针指向B类\n");
pA = &b ;
pA->Fun() ;
//!!!输出B的VirtualFun();
pA->VirtualFun();
printf("----end---\n\n");
//实验子项六:A类的函数
printf("实验子项六:A类的函数\n");
a.TestA();
printf("----end---\n\n");
//实验子七:B类的函数
printf("实验子七:B类的函数\n");
b.TestB();
printf("----end---\n\n");
//实验子八:B类从A继承的函数
printf("实验子八:B类从A继承的函数\n");
//!!!输出A的Fun()和B的VirtualFun();
b.TestA();
printf("----end---\n\n");
return 0;
}