1 . 如果对于父类函数(virtual/非virtual),如果子类没有同名函数,则正常继承
2 . 对于父类函数(virtual、非virutal),子类有同名函数,无同型函数,则不能调用父类函数
3 . 对于父类函数(virtual、非virtual),如果有同型函数:
非virtual函数由指针类型决定调用哪个
virtual函数由指针指向的对象决定调用哪个(运行时决定)
class BaseT{
public:
void func(){
printf("BaseT: func\n");
}
void func1(){
printf("BaseT: func1\n");
}
virtual void func2(){
printf("BaseT: func2\n");
}
};
class SubTest : public BaseT{ //注意public要有
public:
void func1(){
printf("SubTest: func1\n");
}
void func2(){
printf("SubTest: func2\n");
}
};
int main()
{
SubTest *mSubTest = new SubTest();
mSubTest->func(); //非virtual , 且无同型 调用父类函数
mSubTest->func1(); //非virtual , 有同型 指针类型SubTest, 调用SubTest函数
mSubTest->func2(); //非virtual , 有同型 指针类型SubTest, 调用SubTest函数
delete mSubTest;
printf("=============\n");
BaseT *mSubTest1 = new SubTest();
mSubTest1->func(); // 非virtual , 且无同型 调用父类函数
mSubTest1->func1(); // 非virtual , 有同型 指针类型BaseT, 调用BaseT函数
mSubTest1->func2(); // virtual , 有同型 对象类型SubTest, 调用SubTest函数
}
运行结果
BaseT: func
SubTest: func1
SubTest: func2
=============
BaseT: func
BaseT: func1
SubTest: func2