C++类成员函数继承

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

猜你喜欢

转载自blog.csdn.net/LHshooter/article/details/90355593
今日推荐