#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 10output from parent 100
/*
由于outPut不是虚拟函数,因此对于outPut遵循的是类域的名称解析方法。这里的解析步骤大致如下:
1。先在void Parent::checkOut()的内围域中查找outPut,没有;
2。由于调用的checkOut函数是Parent类域内的,因此到Parent类域中查找outPut,此时找到一个outPut,就调用它了。
*/
若将outPut();改为virtual 则结果正确.