两道简单的选择题,请说明原因

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:58:37
12. 不能作为函数重载判断依据的是:(d)

A.参数个数 B。参数类型 C。函数名字 D。返回类型

13. 以下程序的输出结果是:(b)

#include <iostream.h>

void prt(int *x,int *y,int *z){

cout<<++*x<<","<<++*y<<","<<*z++<<endl;

}

int a=10,c=20,b=40;

void main(){

prt(&a,&b,&c); prt(&a,&b,&c);

}

A. 11,42,31 B。11,41,20 C。11,21,40 D。11,41,21
12,21,41 12,42,20 11,21,41 12,42,22
A. 11,42,31 B。11,41,20 C。11,21,40 D。11,41,21
12,21,41 12,42,20 11,21,41 12,42,22
是上下对应的

第一题: C和D都应该不是。对于C,如果名字都变了,这已经不算是重载了。对于D,你可以想象一个简单的问题,两个函数: int add(int ,int); 和 double add(int, int); 这时候程序这么调用 add(a, b); 那么编译器怎么知道去调用哪个版本呢?跟深层次的原因:C++在编译函数的时候,会重新生成一个函数名,包括了该函数名和其中的所有参数类型,比如上面两个函数编译之后的函数名可能就是:_add_int_int_。

第二题:前面两个a和b好理解,传入的是地址,所以每次调用都会改变a和b的值,主要在于C,这是一个运算符优先级的问题,*c++事实是这样的:*(c++),因而每次得到的都是c的值,而且没有改变。

11,41,20
12,42,20