#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 則結果正確.