Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177141
  • 博文数量: 37
  • 博客积分: 1367
  • 博客等级: 中尉
  • 技术积分: 465
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-06 17:41
文章分类

全部博文(37)

文章存档

2015年(1)

2012年(17)

2011年(10)

2010年(1)

2009年(8)

我的朋友

分类: C/C++

2012-03-14 15:10:15

虚拟函数和缺省实参
  1. #include <iostream>
  2.  
  3. class base
  4. {
  5. public:
  6.     virtual int foo( int ival = 1024 )
  7.     {
  8.         cout < "base::foo() -- ival: " < ival < endl;
  9.         return ival;
  10.     }
  11.     // ...
  12. };
  13.  
  14. class derived : public base
  15. {
  16. public:
  17.     virtual int foo( int ival = 2048 )
  18.     {
  19.         cout << "derived::foo() -- ival: " << ival << endl;
  20.         return ival;
  21.     }
  22.     // ...
  23. };

  24. int main()
    {
        derived *pd = new derived;
        base *pb = pd;

        int val = pb->foo();
        cout << "main() : val through base: "
             << val << endl;

        val = pd->foo();
        cout << "main() : val through derived: "
             << val << endl;
    }



编译运行上面的代码,将输出:
derived::foo() -- ival: 1024
main() : val through base: 1024
 
derived::foo() -- ival: 2048
main() : val through derived: 2048

 在这两个调用中,foo() 的派生类实例被正确调用,这是因为foo() 调用的真正实例是
在运行时刻根据pd和pb指向的实际类型决定的;然而传递给foo() 的缺省实参不是在运行
时刻决定的,而是在编译时刻根据被调用函数的对象的类型决定的,当通过pb调用foo() 时,
缺省实参中base::foo()的声明决定为1024, 当通过pd调用foo() 时,缺省实参由derived::foo()
的声明决定为2048

阅读(1172) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~