继承虚函数&数组名做参数
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位系统中)。
相关文章推荐
- centos 安装jdk
- 欧拉函数
- iOS中的initialize与load两个类方法简单理解
- UITextField的总结
- NDK开发之c++调用java
- G711编解码(G711与PCM类型互转)
- 工厂模式(2)
- android Home键监听
- (视图)初步学习
- 算法模型大全
- app审核提交 注意事项
- 每天编程小题目(oneDay):求每个月兔子总数
- 轨迹记忆
- 剑指offer系列之33:第一个只出现一次的字符
- Java 多线程处理任务的封装
- [PHP实例] PHP多文件上传实现
- java 学习总结(二) 类的接口、继承与多态
- Tomcat结构分析
- 搜索—Problem_1004-Toxophily
- jQuery.fn.serialize 阅读