一點小細節

#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;



class Parent
{
    public:
    void checkOut(){outPut();cout<<testNum<<endl;}
    virtual void outPut(){ cout<<"output from parent"<<endl;}
    void setTestNum(int num){testNum = num;}
      int testNum;
    private:
};

class Deprive:public Parent
{
    public:
    void outPut(){ cout<<"output from Deprived"<<endl;}
    private:
};

int main()
{

    Parent p;
    Deprive d;
    p.setTestNum(10);
    d.setTestNum(100);

    p.checkOut();
    d.checkOut();

    system("pause");
    return 0;
}
輸出:
output from parent 10
output from parent 100
/*
由於outPut不是虛擬函數,因此對於outPut遵循的是類域的名稱解析方法。這裏的解析步驟大致如下:

1。先在void Parent::checkOut()的內圍域中查找outPut,沒有;
2。由於調用的checkOut函數是Parent類域內的,因此到Parent類域中查找outPut,此時找到一個outPut,就調用它了。
*/
若將outPut();改爲virtual 則結果正確.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章