首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-09 
请教一个Template模式中出现的继承问题classAbstract{public:virtual~Abstract(){}voidOperation(){DoFirs

请教一个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叫做 覆盖

热点排行