• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 505  文章 - 1034  trackbacks - 0
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456


            子曾經(jīng)曰過(guò):編程無(wú)他,唯手熟爾!

            常用鏈接

            留言簿(94)

            隨筆分類(lèi)(649)

            隨筆檔案(505)

            相冊(cè)

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 912004
            • 排名 - 14

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            /* 這類(lèi)看著熟悉不?林銳大哥書(shū)上的,嘿嘿,好多公司都考啊! 大家給挑挑錯(cuò)誤,改進(jìn)一下.順便解答一下我的疑問(wèn) */
            ?1
            ?class?String
            ?2?{
            ?3?public:
            ?4?????String(const?char?*str?=?NULL);????//?普通構(gòu)造函數(shù)
            ?5?????String(const?String?&other);????????//?拷貝構(gòu)造函數(shù)
            ?6?????~String(void);????????????????????????//?析構(gòu)函數(shù)
            ?7?????String?&?operator?=(const?String?&other);????//?賦值函數(shù)
            ?8?????const?char*?operator()(void)?const;
            ?9?private:
            10?????char??????*m_data;????????????????//?用于保存字符串
            11?};
            12?
            13?
            14?String::~String(void)
            15?{
            16?????delete[]?m_data;
            17?}
            18?
            19?String::String(const?char*?str)
            20?{
            21?????if(NULL?==?str)
            22?????{
            23?????????//?不能讓新對(duì)象的m_data為NULL
            24?????????m_data?=?new?char[1];
            25?????????*m_data?=?'\0';
            26?????}????
            27?????else
            28?????{
            29?????????int?length?=?strlen(str);
            30?????????m_data?=?new?char[length?+?1];
            31?????????strcpy(m_data,?str);
            32?????}
            33?}
            34?
            35?String::String(const?String&?other)?/*?因?yàn)槭切聵?gòu)造一個(gè)對(duì)象,所以不需要像operator=一樣判斷自賦值及釋放原來(lái)的內(nèi)存?*/
            36?{
            37?????int?length?=?strlen(other.m_data);
            38?????m_data?=?new?char[length?+?1];
            39?????strcpy(m_data,?other.m_data);
            40?}
            41?
            42?String&?String::operator?=(const?String&?other)
            43?{
            44?????//?判斷自賦值
            45?????if(this?==?&other)
            46?????????return?*this;
            47?????//?釋放原來(lái)的內(nèi)存
            48?????delete?[]?m_data;
            49?
            50?????int?length?=?strlen(other.m_data);?/*?雖然m_data是private,但因?yàn)槭窃赟tring的成員函數(shù)里,故沒(méi)問(wèn)題?*/
            51?????m_data?=?new?char[length?+?1];
            52?????strcpy(m_data,?other.m_data);
            53?
            54?????return?*this;
            55?
            56?}
            57?
            58?const?char?*?String::operator()()?const
            59?{
            60?????return?(const?char*)m_data;
            61?}
            62
            63?int?_tmain(int?argc,?_TCHAR*?argv[])
            64?{
            65?????String?str("hello");
            66?????String?str1?=?str;?/*?這兒調(diào)用的是copy?constructor,非?operator=,?why??*/
            67?????printf("%s\n",?str1);
            68?
            69?????const?char*?str2?=?str();
            70?????printf("%s\n",?str2);
            71?
            72?????return?0;
            73?}
            posted on 2006-07-13 22:21 七星重劍 閱讀(4875) 評(píng)論(15)  編輯 收藏 引用 所屬分類(lèi): 面試筆試

            FeedBack:
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-14 09:24 沐楓
            operator = 不是異常安全的。
            string不需要operator()操作。

            String str1 = str;//調(diào)用拷貝構(gòu)造函數(shù)
            這個(gè)聽(tīng)說(shuō)是C++標(biāo)準(zhǔn)規(guī)定的。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-15 02:00 阿來(lái)
            @沐楓
            >operator = 不是異常安全的。

            大哥再說(shuō)得清楚點(diǎn),呵呵。
            >string不需要operator()操作。

            我去征途筆試的時(shí)候,就有這個(gè)operator().面試我的那大哥說(shuō),other.m_data是不行的,因?yàn)閙_data是private的,我說(shuō)但是這是在String類(lèi)的成員函數(shù)內(nèi),other也是String對(duì)象。他仍然堅(jiān)持并讓我回家的時(shí)候測(cè)試一下,我猶豫了,說(shuō)那就用other()代替other.m_data。我回來(lái)測(cè)試了一下other.m_data沒(méi)問(wèn)題。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-18 09:31 有風(fēng)
            下面是我在VC里編譯上面的源碼時(shí)提示的錯(cuò)誤:

            --------------------Configuration: String - Win32 Debug--------------------
            Compiling...
            String.cpp
            D:\Chandi\C++學(xué)習(xí)\String.cpp(4) : error C2065: 'NULL' : undeclared identifier
            D:\Chandi\C++學(xué)習(xí)\String.cpp(4) : error C2440: 'default argument' : cannot convert from 'int' to 'const char *'
            Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
            D:\Chandi\C++學(xué)習(xí)\String.cpp(21) : error C2446: '==' : no conversion from 'const char *' to 'int'
            This conversion requires a reinterpret_cast, a C-style cast or function-style cast
            D:\Chandi\C++學(xué)習(xí)\String.cpp(21) : error C2040: '==' : 'int' differs in levels of indirection from 'const char *'
            D:\Chandi\C++學(xué)習(xí)\String.cpp(29) : error C2065: 'strlen' : undeclared identifier
            D:\Chandi\C++學(xué)習(xí)\String.cpp(31) : error C2065: 'strcpy' : undeclared identifier
            D:\Chandi\C++學(xué)習(xí)\String.cpp(63) : error C2061: syntax error : identifier '_TCHAR'
            D:\Chandi\C++學(xué)習(xí)\String.cpp(67) : error C2065: 'printf' : undeclared identifier
            Error executing cl.exe.

            String.obj - 8 error(s), 0 warning(s)
              回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-18 16:22 阿來(lái)
            @有風(fēng)
            你是在VC6里面的編譯得吧?

            我用的是 visual studio 2003  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-19 15:36 有風(fēng)
            恩。
            加了下面兩句后,還是用兩個(gè)ERROR。
            #include<iostream.h>
            #include<string.h>


            --------------------Configuration: String - Win32 Debug--------------------
            Compiling...
            String.cpp
            String.cpp(63) : error C2061: syntax error : identifier '_TCHAR'
            String.cpp(67) : error C2065: 'printf' : undeclared identifier
            Error executing cl.exe.  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-23 15:11 阿來(lái)
            @有風(fēng)
            你加上 #include <stdio.h> // printf()是不是包含在這個(gè)頭文件中?

            把 int _tmain(int argc, _TCHAR* argv[]) 換成 int main() 好了

            你再試試  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-28 11:29 有風(fēng)
            @阿來(lái)

            65 String str("hello");
            66 String str1 = str; /* 這兒調(diào)用的是copy constructor,非operator=, why? */

            關(guān)于你上面的疑問(wèn),你試著讀讀林銳大哥的《高質(zhì)量C++編程指南》里的這段話(huà):

            拷貝構(gòu)造函數(shù)和賦值函數(shù)非常容易混淆,常導(dǎo)致錯(cuò)寫(xiě)、錯(cuò)用。拷貝構(gòu)造函數(shù)是在對(duì)象被創(chuàng)建時(shí)調(diào)用的,而賦值函數(shù)只能被已經(jīng)存在了的對(duì)象調(diào)用。以下程序中,第三個(gè)語(yǔ)句和第四個(gè)語(yǔ)句很相似,你分得清楚哪個(gè)調(diào)用了拷貝構(gòu)造函數(shù),哪個(gè)調(diào)用了賦值函數(shù)嗎?
            String a(“hello”);
            String b(“world”);
            String c = a; // 調(diào)用了拷貝構(gòu)造函數(shù),最好寫(xiě)成 c(a);
            c = b; // 調(diào)用了賦值函數(shù)
            本例中第三個(gè)語(yǔ)句的風(fēng)格較差,宜改寫(xiě)成String c(a) 以區(qū)別于第四個(gè)語(yǔ)句。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-28 11:37 有風(fēng)
            另外:
            關(guān)于String類(lèi)的賦值函數(shù):
            String & operator =(const String &other); // 賦值函數(shù)
            為什么在《高質(zhì)量C++編程指南》里,他是這樣寫(xiě)的:
            String & operate =(const String &other); // 賦值函數(shù)

            operate跟operator有什么區(qū)別?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-07-29 14:02 阿來(lái)
            @有風(fēng)
            大哥解答了我好久的疑問(wèn)啊,感激涕零!
            > operate跟operator有什么區(qū)別?

            《高質(zhì)量》上應(yīng)該是錯(cuò)把operator寫(xiě)成operate了吧?operator 是運(yùn)算符的意思  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2006-10-27 10:23 沐楓
            operator=存在一個(gè)異常安全問(wèn)題。
            假設(shè),執(zhí)行到new char[]時(shí),發(fā)生異常,這時(shí),原有的內(nèi)容已經(jīng)被delete掉了。這時(shí),operator=扔出異常,同時(shí),原有的對(duì)象已經(jīng)不能用了。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2007-05-23 21:39 秒大刀
            當(dāng)時(shí)公司來(lái)西安筆試也考這題目了  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答[未登錄](méi) 2007-05-23 22:45 阿來(lái)
            @秒大刀
            暈,你小伙兒怎么知道我博客的?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答[未登錄](méi) 2007-09-14 15:12 Jeff
            "不能讓新對(duì)象的m_data為NULL", 為什么?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2007-09-14 23:58 重劍
            @Jeff
            能為NULL嗎?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類(lèi)的筆試題及解答 2008-09-06 13:05 秒大刀
            字符串永遠(yuǎn)都是C++中的熱門(mén)話(huà)題  回復(fù)  更多評(píng)論
              
            久久综合久久自在自线精品自| 久久99国产精品久久| 亚洲欧美另类日本久久国产真实乱对白| 亚洲成人精品久久| 青青热久久国产久精品 | 午夜精品久久久久久毛片| 久久综合九色综合网站| 人妻少妇久久中文字幕| 国内精品久久国产大陆| 久久天天躁狠狠躁夜夜2020老熟妇| 一本色综合久久| 久久99国产精品99久久| 亚洲国产成人久久一区WWW| 日韩久久久久久中文人妻| AA级片免费看视频久久| 2021最新久久久视精品爱| 国产欧美一区二区久久| 伊人久久精品影院| 国产精品久久久久久久久鸭| 久久人人爽人人澡人人高潮AV| 亚洲精品国精品久久99热一 | 亚洲人成无码网站久久99热国产| 国产成年无码久久久免费| 99久久国产综合精品网成人影院| 久久久精品国产免大香伊 | 亚洲另类欧美综合久久图片区| 性欧美丰满熟妇XXXX性久久久| 精品久久人人做人人爽综合| 欧美午夜精品久久久久免费视| 久久久久久亚洲精品无码| 99久久婷婷国产综合亚洲| 久久人做人爽一区二区三区| 国产精品内射久久久久欢欢 | 久久亚洲精品无码观看不卡| 狠狠色丁香久久婷婷综合五月| 久久中文字幕精品| 久久人人超碰精品CAOPOREN | 色妞色综合久久夜夜| 久久福利片| 亚洲一区中文字幕久久 | 伊人久久国产免费观看视频|