• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
BeyondTechnology
博客园    首页    新随笔    联系   管理    订阅  订阅

为什么会是这样的输出结果

#include<iostream>
using namespace std;

class Base
{
public:
 virtual void g( int i = 10 )
 {
  cout << i << endl;
 };
};

class Derived: public Base
{
public:
 void g( int i = 20 )
 {
  cout << "Derived::g() " << i << endl;
 }
};

int main()
{
 Base*   pb = new Derived;
 pb->g();
 delete pb;
 return 0;
}

输出结果:

Derived::g() 10

Why?

C++提供简单的处理办法,给形参一个默认值,这样形参就不必一定要从实参取值了。

实参与形参的结合是从左至右顺序进行的,第1个实参必须与第1个形参结合,第2个实参必须与第2个形参结合……,因此指定默认值的参数必须放在形参表列中的最右端,否则出错。

声明函数时已对形参给出了默认值,而在定义函数时又对形参给出默认值,有的编译系统会给出“重复指定默认值”的报错信息,而有的编译系统对此不报错,甚至允许在声明时和定义时给出的默认值不同,此时编译系统以先遇到的为准。由于函数声明在函数定义之前,因此以声明时给出的默认值为准,而忽略定义函数时给出的默认值。

  对于虚函数,编译系统将在编译时刻根据被调用函数的对象的类型决定默认形参的值。

posted @ 2010-09-24 20:19  BeyondTechnology  阅读(274)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3