您的位置:首页 > 其它

继承虚函数&数组名做参数

2016-04-12 16:53 127 查看
#include<iostream>
using namespace std;

class Base
{
public:
virtual int foo(int x)
{
return x * 10;
}

int foo(char x[14])
{
return sizeof(x) + 10;
}
};

class Derived: public Base
{
int foo(int x)
{
return x * 20;
}

virtual int foo(char x[10])
{
return sizeof(x) + 20;
}
} ;

int main()
{
Derived stDerived;
Base *pstBase = &stDerived;

char x[10];
printf("%d\n", pstBase->foo(100) + pstBase->foo(x));

return 0;
}


在32位环境下,以上程序的输出结果是?正确答案: C

A.2000

B.2004

C.2014

D.2024

答案解析:

注:数组名做参数时会退化为指针

pstBase是一个指向基类Base的指针,指针里存的是Base的子类Derived对象stdDerived的地址,pstBase->foo(100)是通过虚函数机制调用Derived的int foo (int x)函数,所以返回的值为2000,;而pstBase->foo(x)调用的是Base类里的int foo(char x[14])函数,返回值为14。因此最后的结果为2014,其中在int foo(char x[14])这个函数中,sizeof(x)计算的是指向x[14]这个数组的常量指针x,大小为4字节(在32位系统中)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: