• <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年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345


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

            常用鏈接

            留言簿(94)

            隨筆分類(649)

            隨筆檔案(505)

            相冊(cè)

            BCB

            Crytek

            • crymod
            • Crytek's Offical Modding Portal

            Game Industry

            OGRE

            other

            Programmers

            Qt

            WOW Stuff

            搜索

            •  

            積分與排名

            • 積分 - 917349
            • 排名 - 14

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            /* 這類看著熟悉不?林銳大哥書上的,嘿嘿,好多公司都考啊! 大家給挑挑錯(cuò)誤,改進(jì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=一樣判斷自賦值及釋放原來的內(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?????//?釋放原來的內(nèi)存
            48?????delete?[]?m_data;
            49?
            50?????int?length?=?strlen(other.m_data);?/*?雖然m_data是private,但因?yàn)槭窃赟tring的成員函數(shù)里,故沒問題?*/
            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 七星重劍 閱讀(4888) 評(píng)論(15)  編輯 收藏 引用 所屬分類: 面試筆試

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

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

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

            我去征途筆試的時(shí)候,就有這個(gè)operator().面試我的那大哥說,other.m_data是不行的,因?yàn)閙_data是private的,我說但是這是在String類的成員函數(shù)內(nèi),other也是String對(duì)象。他仍然堅(jiān)持并讓我回家的時(shí)候測(cè)試一下,我猶豫了,說那就用other()代替other.m_data。我回來測(cè)試了一下other.m_data沒問題。  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答 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類的筆試題及解答 2006-07-18 16:22 阿來
            @有風(fēng)
            你是在VC6里面的編譯得吧?

            我用的是 visual studio 2003  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答 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類的筆試題及解答 2006-07-23 15:11 阿來
            @有風(fēng)
            你加上 #include <stdio.h> // printf()是不是包含在這個(gè)頭文件中?

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

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

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

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

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

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

            《高質(zhì)量》上應(yīng)該是錯(cuò)把operator寫成operate了吧?operator 是運(yùn)算符的意思  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答 2006-10-27 10:23 沐楓
            operator=存在一個(gè)異常安全問題。
            假設(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類的筆試題及解答 2007-05-23 21:39 秒大刀
            當(dāng)時(shí)公司來西安筆試也考這題目了  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答[未登錄] 2007-05-23 22:45 阿來
            @秒大刀
            暈,你小伙兒怎么知道我博客的?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答[未登錄] 2007-09-14 15:12 Jeff
            "不能讓新對(duì)象的m_data為NULL", 為什么?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答 2007-09-14 23:58 重劍
            @Jeff
            能為NULL嗎?  回復(fù)  更多評(píng)論
              
            # re: 關(guān)于String類的筆試題及解答 2008-09-06 13:05 秒大刀
            字符串永遠(yuǎn)都是C++中的熱門話題  回復(fù)  更多評(píng)論
              
            手机看片久久高清国产日韩| 国内精品久久人妻互换| 欧美成a人片免费看久久| 四虎影视久久久免费观看| 久久精品无码一区二区WWW| 91久久婷婷国产综合精品青草| 亚洲乱亚洲乱淫久久| 久久99久久99精品免视看动漫| AAA级久久久精品无码片| 久久亚洲AV无码精品色午夜| 亚洲一区中文字幕久久| 日本强好片久久久久久AAA| 久久久无码精品午夜| 韩国无遮挡三级久久| 久久国产亚洲高清观看| 久久这里的只有是精品23| 99久久国产亚洲高清观看2024| 久久婷婷五月综合97色一本一本| 国内精品伊人久久久久网站| 久久久久国产精品| 久久天天躁狠狠躁夜夜96流白浆| 久久久这里只有精品加勒比| 久久强奷乱码老熟女| 日本免费久久久久久久网站| 精品国产乱码久久久久久1区2区 | 国产欧美久久久精品| 亚洲中文字幕无码久久精品1| 久久成人18免费网站| 国产成人精品久久综合| 久久伊人精品青青草原高清| 久久精品水蜜桃av综合天堂| 久久久久国产精品三级网| 激情五月综合综合久久69| 国产精久久一区二区三区| 青青草原综合久久| 久久精品国产91久久综合麻豆自制| 97久久天天综合色天天综合色hd| 久久国产精品一国产精品金尊| 性高湖久久久久久久久| 成人国内精品久久久久一区| 青青草国产精品久久|