C/C++/C#面试题精选(4)

问题(16:运行如下的C++代码,输出是什么?

class A

{

public:

   virtual void Fun(int number = 10)

   {

       std::cout << "A::Fun with number " << number;

   }

};

 

class B:public A

{

public:

   virtual void Fun(int number = 20)

   {

       std::cout << "B::Fun with number " << number;

   }

};

 

int main()

{

   B b;

   A &a = b;

   a.Fun();

}

答案输出B::Fun with number 10。由于a是一个指向B实例的引用,因此在运行的时候会调用B::Fun。但缺省参数是在编译期决定的。在编译的时候,编译器只知道a是一个类型a的引用,具体指向什么类型在编译期是不能确定的,因此会按照A::Fun的声明把缺省参数number设为10

           这一题的关键在于理解确定缺省参数的值是在编译的时候,但确定引用、指针的虚函数调用哪个类型的函数是在运行的时候。

问题(17:运行如下的C代码,输出是什么?

char* GetString1()

{

   char p[] = "Hello World";

   return p;

}

 

char* GetString2()

{

   char *p = "Hello World";

   return p;

}

 

 

int _tmain(int argc, _TCHAR* argv[])

{

   printf("GetString1 returns: %s. /n", GetString1());

   printf("GetString2 returns: %s. /n", GetString2());

 

   return 0;

}

答案

  • 0
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 25
    评论
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值