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

来源:互联网 发布:淘宝优惠券怎么做兼职 编辑:程序博客网 时间:2024/05/17 22:22
#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位系统中)。

0 0
原创粉丝点击