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

一个简单的形参赋值有关问题,其他大神门给个解释

2013-03-29 
一个简单的形参赋值问题,其他大神门给个解释不太明白其中的原理,请解释下。我直接上代码了class base{void

一个简单的形参赋值问题,其他大神门给个解释
不太明白其中的原理,请解释下。我直接上代码了

class base
{
   void func(int i = 10){printf("value = %d \n", i);};
}

class child:public base
{
   void func(int i = 20){printf("value = %d \n", i);};
}

void main()
{
   base* pTmp = new child();
   pTmp->func();
}

为什么输出结果是: value = 10 , 按理来讲 应该是执行child类的func, 为何输出却是10,而非20? 形参赋值?重写接口
[解决办法]
因为不是virtual函数,所以直接调用基类的版本。基类版本默认参数是10,所以输出10。
即使在void func之前加入virtual关键字结果也不是20。因为默认参数是在编译期间由编译器自动加上的,编译器选择的时候,看到的是基类的默认参数值,所以即使调用子类的版本(加virtual之后),结果还是10。
[解决办法]
1.函数不是虚函数
2.即使是虚函数,缺省参数是静态绑定的,在调用处传递的还是10

热点排行