发生多态的一种情况

时间:2022-03-11 20:55:36
class Base {
public:
    Base(int j) : i(j) {}
    virtual~Base() {}
    void func1() {
        i *= 10;
        func2(); 
        //this指针调用func2(),this指针是&(调用func1()的对象)或调用func1的指针,
        //因此该指针调用func2有可能发生多态
    }
    int getValue() {
        return i;
    }
protected:
    virtual void func2() {
        i++;
    }
protected:
    int i;
};
class Child : public Base {
public:
    Child(int j) : Base(j) {}
    void func1() {
        i *= 100;
        func2();
    }
protected:
    void func2() {
        i += 2;
    }
};
int main() {
    Base * pb = new Child(1);
    pb->func1();
    //Base指针pb在func1()中调用func2()时发生多态
    cout << pb->getValue() << endl; delete pb;
}

 因此,输出结果为12。