再请问一个问题咯,麻烦咯麻烦咯#includeusing namespace std;class Baseclass{public:void Fun1() {cout

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 15:21:32

再请问一个问题咯,麻烦咯麻烦咯#includeusing namespace std;class Baseclass{public:void Fun1() {cout
再请问一个问题咯,麻烦咯麻烦咯
#includeusing namespace std;class Baseclass{public:void Fun1() {cout

再请问一个问题咯,麻烦咯麻烦咯#includeusing namespace std;class Baseclass{public:void Fun1() {cout
#include <iostream>  
using namespace std;

class Baseclass {
public:
    void Fun1() {
        cout << "Fun1() in Baseclass is called!" << endl;
    }
    virtual void Fun2() {
        cout <<"Fun2() in Baseclass is called!" << endl;
    }
};

class derivedclass : public Baseclass {
public :
    void Fun1() {
        cout << "Fun()1 in derivedclass is called!" << endl;
    }
    void Fun2() {
        cout<< "Fun()2 in derivedclass is called!" << endl;
    }
};

int main(){
    derivedclass d;
    Baseclass *pb = &d;
    Baseclass b;

    pb->Fun1();
    pb->Fun2();
    return 0;
}
因为 pb 是声明为基类 Baseclass 的指针,所以通过它调用 Fun1 时,调用了基类的函数.
而因为基类中加了 virtual 声明 Fun2 是虚函数,在派生类中又重写了该虚函数,实现了对基类虚函数的覆盖.当基类指针指向派生类的对象时,对虚函数的调用就会调用了派生类的函数而不是基类的函数.这是面向对象中的多态性的体现.