面试训练海涛56题

问题(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指向的地址相同。它在内存中只有一个拷贝


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值