读书人

请问一个Template模式中出现的继承有关

发布时间: 2012-02-09 18:22:27 作者: rapoo

请教一个Template模式中出现的继承问题
class Abstract{
public:
virtual ~Abstract(){
}
void Operation(){
DoFirst();
}
protected:

#if 0 //这里不太明白:(
virtual void DoFirst(){
cout < < "Base " < < endl;
}
#else
void DoFirst(){
cout < < "Base " < < endl;
}
#endif

};

class Concrete1:public Abstract
{
protected:
void DoFirst(){
cout < < "C1-first " < < endl;
}
};


int main(int argc, char* argv[])
{
Concrete1 C1;
C1.Operation();

system( "pause ");
return 0;
}

//////////////////
上面#if 0的地方,
我在main函数中声明的是子类对象,我觉得不管基类的
DoFirst()是否为Virtual,C1.Operation()都应该调用子类的DoFirst(),
可是结果跟virtual有关系. 如果virtual则调用到了基类的DoFirst().
请教一下为什么??

另外是否无论有无Virtual, 子类这都叫override行为??

先谢谢各位赐教!

[解决办法]
#if 0 这个应该是个宏定义判断语句,意思就是当定义了啥宏的时候执行那个语句

加了virtual和不加区别很大,这个就要明白虚拟函数和普通函数的区别在于,基类指针指向派生类的时候,函数不会被覆盖.
[解决办法]
#if 0
这里面的代码将会被注释
#endif

[解决办法]
有virtual叫做override
没有virtual叫做 覆盖

读书人网 >C++

热点推荐