关闭

C/C++/C#面试题精选(2)

发表于:2011-3-16 10:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:何海涛    来源:51Testing软件测试网采编

#
DotNet

  题目(11):运行下图中的C#代码,输出是什么?

namespace StringValueOrReference
{
    class Program
    {
        internal static void ValueOrReference(Type type)
        {
            String result = "The type " + type.Name;
 
            if (type.IsValueType)
                Console.WriteLine(result + " is a value type.");
            else
                Console.WriteLine(result + " is a reference type.");
        }
 
        internal static void ModifyString(String text)
        {
            text = "world";
        }
 
        static void Main(string[] args)
        {
            String text = "hello";
 
            ValueOrReference(text.GetType());
            ModifyString(text);
 
            Console.WriteLine(text);
        }
    }
}

  答案:输出两行。第一行是The type String is reference type. 第二行是hello。类型String的定义是public sealed class String {...},既然是class,那么String就是引用类型。

  在方法ModifyString里,对text赋值一个新的字符串,此时改变的不是原来text的内容,而是把text指向一个新的字符串"world"。由于参数text没有加ref或者out,出了方法之后,text还是指向原来的字符串,因此输出仍然是"hello".

  题目(12):运行下图中的C++代码,输出是什么?

#include <iostream>
 
class A
{
private:
        int n1;
        int n2;
public:
        A(): n2(0), n1(n2 + 2)
        {
        }
 
        void Print()
        {
                std::cout << "n1: " << n1 << ", n2: " << n2 << std::endl;
        }
};
 
int _tmain(int argc, _TCHAR* argv[])
{
        A a;
        a.Print();
 
        return 0;
}

  答案:输出n1是一个随机的数字,n2为0。在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化n1,而初始n1的参数n2还没有初始化,是一个随机值,因此n1就是一个随机值。初始化n2时,根据参数0对其初始化,故n2=0。

51/512345>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号