亚洲视频精品_木耳av在线_成年人免费看_久久精品香蕉_激情国产精品_亚洲第一se情网站

您現在所在的位置:首頁 >學員就業 > 就業寶典 > 經典C++面試題,看看你會多少?(二)

經典C++面試題,看看你會多少?(二)

來源:奇酷教育 發表于:

題目(六):運行下列C++代碼,輸出什么?structPoint3D{intx;inty;intz;};int_tmain(intargc, _TCHAR* argv[]){Point3D* pPoint = NU

題目(六):運行下列C++代碼,輸出什么?

struct Point3D

{

        int x;

        int y;

        int z;

};

 

int _tmain(int argc, _TCHAR* argv[])

{

        Point3D* pPoint = NULL;

        int offset = (int)(&(pPoint)->z);

 

        printf("%d", offset);

        return 0;

}

答案:輸出8。由于在pPoint->z的前面加上了取地址符號,運行到此時的時候,會在pPoint的指針地址上加z在類型Point3D中的偏移量8。由于pPoint的地址是0,因此最終offset的值是8

&(pPoint->z)的語意是求pPoint中變量z的地址(pPoint的地址0z的偏移量8),并不需要訪問pPoint指向的內存。只要不訪問非法的內存,程序就不會出錯。

題目(七):運行下列C++代碼,輸出什么?

class A

{

public:

        A()

        {

                Print();

        }

        virtual void Print()

        {

                printf("A is constructed.\n");

        }

};

 

class B: public A

{

public:

        B()

        {

                Print();

        }

 

        virtual void Print()

        {

                printf("B is constructed.\n");

        }

};

 

int _tmain(int argc, _TCHAR* argv[])

{

        A* pA = new B();

        delete pA;

 

        return 0;

}

答案:先后打印出兩行:A is constructed. B is constructed. 調用B的構造函數時,先會調用B的基類及A的構造函數。然后在A的構造函數里調用Print。由于此時實例的類型B的部分還沒有構造好,本質上它只是A的一個實例,他的虛函數表指針指向的是類型A的虛函數表。因此此時調用的PrintA::Print,而不是B::Print。接著調用類型B的構造函數,并調用Print。此時已經開始構造B,因此此時調用的PrintB::Print

同樣是調用虛擬函數Print,我們發現在類型A的構造函數中,調用的是A::Print,在B的構造函數中,調用的是B::Print。因此虛函數在構造函數中,已經失去了虛函數的動態綁定特性。

題目(八):運行下列C#代碼,輸出是什么?

namespace ChangesOnString

{

    class Program

    {

        static void Main(string[] args)

        {

            String str = "hello";

            str.ToUpper();

            str.Insert(0, " WORLD");

 

            Console.WriteLine(str);

        }

    }

}

答案:輸出是hello。由于在.NET中,String有一個非常特殊的性質:String的實例的狀態不能被改變。如果String的成員函數會修改實例的狀態,將會返回一個新的String實例。改動只會出現在返回值中,而不會修改原來的實例。所以本題中輸出仍然是原來的字符串值hello

如果試圖改變String的內容,改變之后的值可以通過返回值拿到。用StringBuilder是更好的選擇,特別是要連續多次修改的時候。如果用String連續多次修改,每一次修改都會產生一個臨時對象,開銷太大。

題目(九):C++C#中,structclass有什么不同

答案:C++中,如果沒有標明函數或者變量是的訪問權限級別,在struct中,是public的;而在class中,是private的。

                C#中,如果沒有標明函數或者變量的訪問權限級別,structclass中都是private的。structclass的區別是:struct定義值類型,其實例在棧上分配內存;class定義引用類型,其實例在堆上分配內存。

題目(十):運行下圖中的C#代碼,輸出是什么

namespace StaticConstructor

{

    class A

    {

        public A(string text)

        {

            Console.WriteLine(text);

        }

    }

 

    class B

    {

        static A a1 = new A("a1");

        A a2 = new A("a2");

 

        static B()

        {

            a1 = new A("a3");

        }

 

        public B()

        {

            a2 = new A("a4");

        }

    }

 

    class Program

    {

        static void Main(string[] args)

        {

            B b = new B();

        }

    }

}

答案:打印出四行,分別是a1、a3a2、a4。

在調用類型B的代碼之前先執行B的靜態構造函數。靜態函數先初始化類型的靜態變量,再執行靜態函數內的語句。因此先打印a1再打印a3。接下來執行B b = new B(),即調用B的普通構造函數。構造函數先初始化成員變量,在執行函數體內的語句,因此先后打印出a2a4。

主站蜘蛛池模板: 国产日本视频 | 国产高清乱码又大又圆 | 青青草91视频 | 亚洲一区二区精品 | 精品国产一区二区三区www | 亚洲人成电影网站色mp4 | 一区两区三不卡 | 福利视频一二三在线视频免费观看 | 东方影库永久在线 | 久草视频免费 | 在线 | 国产精品99传媒a | 91正在播放极品白嫩在线观看 | 久久99欧美 | 亚洲五月综合网色九月色 | 欧美成人精品福利在线视频 | 一级成人毛片免费观看欧美 | 欧美人与动牲交a精品 | 国产视频一区在线播放 | 国产美女精品视频线免费播放软件 | 久久久亚洲欧洲国产 | 国产精品久久久久影院免费 | 中文字幕亚洲无线码在线一区 | 久久精品在这里 | 99热在线精品免费播放6 | 欧美蜜桃臀在线观看一区 | 日韩欧美亚州 | 欧美国产日韩久久久 | 激情内射亚洲一区二区三区 | 一级一级毛片免费播放 | 午夜免费观看福利片一区二区三区 | 免费一区二区三区在线视频 | 成年人免费在线观看网站 | 99久久久无码国产精品不卡 | 国产普通话自拍 | 牲欲强的熟妇农村老妇女 | 色欲av蜜桃一区二区三 | 精品视频一区二区观看 | 亚洲a图| 国产不卡网 | 国内精品视频一区 | av无码一区二区三区 |