面试训练海涛56题

来源:互联网 发布:f313战斗机知乎 编辑:程序博客网 时间:2024/04/28 13:14

问题(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();}

思路;开始一眼看出这题很基本当然 虽然是a是 A类的引用,但是确指向的是类B。这里a.Fun()由于是虚函数 通过虚函数指针在虚函数表里面找到 fun函数

             所以输出B:Fun with number没有问题,但是至于函数里面的形式参数的话,我就拿不准了。

            海涛日志里面分析的十分透彻,应该输出10

           为什么你,涛哥里面说 因为缺省参数实在编译期间处理的,编译期间 A a是A类,但在运行中,虚函数动态的指向B类的fun函数,但是number的值为10

          因此 输出

B::Fun with number  10
运行如下的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;}
数组p[]为函数的局部变量,退出函数空间立即回收

*p是字符串常量存放在常量数据区,为全局的

因此 GetString1 returns:一串乱码

         GetString2 returns:Hello World

问题(19)运行下图中C代码,输出的结果是什么

int _tmain(int argc, _TCHAR* argv[]){    char str1[] = "hello world";    char str2[] = "hello world";     char* str3 = "hello world";    char* str4 = "hello world";     if(str1 == str2)        printf("str1 and str2 are same.\n");    else        printf("str1 and str2 are not same.\n");     if(str3 == str4)        printf("str3 and str4 are same.\n");    else        printf("str3 and str4 are not same.\n");     return 0;}

str1,str2为数组 要为其分配存储空间,当然地址不同

“hello world”为字符串常量,存放在常量数据区,当然*str3,和*str4指向的地址相同。它在内存中只有一个拷贝


原创粉丝点击