ͨÐÅ£¬µçÐÅ£¬»¥ÁªÍø¼¼ÊõÂÛ̳
·¢Ð»°Ìâ
´òÓ¡

£Ã£«£«ÓïÑÔ³£¼ûÎÊÌâ½â´ð<Ò»>

ËùÐèÔĶÁȨÏÞ 1

£Ã£«£«ÓïÑÔ³£¼ûÎÊÌâ½â´ð<Ò»>

£Ã£«£«ÓïÑÔ³£¼ûÎÊÌâ½â´ð£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½
£½£½£½£½£½£½£½£½£½£½£½


                             £Ã£«£«ÓïÑÔ³£¼ûÎÊÌâ½â´ð
                    £¨USENET comp.lang.c++ µÄ FAQ ÎļþÖÐÒ룩



      Ô­×÷ÕߣºMarshall Cline (cline@cheetah.ece.clarkson.edu)
                             (cline@parashift.com)
      ÖÐÒëÕߣºÒ¶±üÕÜ (william@tiger.cis.nctu.edu.tw)

      Ô­Îļþ£ºUSENET comp.lang.c++ FAQ, Jan 31, 1996.

    °æÈ¨ÉùÃ÷£ºÍêÈ«ÒÀÕÕÔ­×÷Õß Marshall Cline ì¶´ËÎļþÖÐËùʾ֮°æÈ¨ÊÂÏî
              £¨Çë¼ûÏÂÎÄÖ® "COPYRIGHT" ²¿·Ý£©¡£
              ÈçÓû¶Ô±¾ÖÐÒëÎļþ×÷ÊÚȨÊÂÏîÖ®ÍâµÄ´¦Àí£¬ÇëÏÈÇ¢±¾ÒëÕß¡£

    ÔðÈÎÊÂÏÍêÈ«±ÈÕÕÔ­×÷Õß Marshall Cline ì¶´ËÎļþÖÐËùʾ֮ÉùÃ÷ÊÂÏî
              £¨Çë¼ûÏÂÎÄÖ® "NO WARRANTY" ²¿·Ý£©¡£

    ÖÐÒëÊÂÏ±ÊÕßË価Á¦Ê¹´ËÖÐÒëÎļþºÏºõÐÅ¡¢´ïµÄÒªÇ󣬵«ÈÔ¿ÖÓÐδ´þÖ®´¦£¬
              ¹ÊÓÐÈκγöÈëÖ®´¦£¬ÇëÒÔÔ­ÎÄΪ׼¡£
              ÈκαÊÕßΪÖÐÒë¡¢Ú¹ÊÍËùÐè¶ø¼Ó×¢µÄµØ·½£¬¶¼ÒÔ ¡¾Òë×¢¡¿ ·ûºÅ
              ±êʾ³öÀ´¡£

    ±¾ÒëÎÄλÖãºÒÔ URL (Uniform Resource Locator) ¸ñʽ˵Ã÷¡£
      FTP Óû§£º
         ftp://ftp.cis.nctu.edu.tw/Documents/News/C-faq/c-cppfaq.zip
      WWW Óû§£º
         ftp://ftp.cis.nctu.edu.tw/Documents/News/C-faq/Index.html
      ¸÷´ó BBS µÄ programming ¾«»ªÇøÒ²¿ÉÄÜÊÕ¼£¬µ«ÒÔǰÊöµØµã×îС£
      ¶ûáá£¬ËæÔ­ÎļþÖ®ÐÂ°æ¶øÒ춯ʱ£¬»áÔÚ news:tw.bbs.comp.language ·¢²¼¡£

    <¸½> ±¾ÎļþÖÐÒëµÄÊÚȨ£º

    --- --- --- --- ---  Quote Begin  --- --- --- --- ---
    From cline@cheetah.ece.clarkson.edu Mon Oct 10 11:56:59 1994
    Return-Path: <cline@cheetah.ece.clarkson.edu>
    Received: from cheetah.ece.clarkson.edu by cis.nctu.edu.tw (4.1/SMI-4.1)
            id AA18895; Mon, 10 Oct 94 11:56:46 CST
    Received: by cheetah.ece.clarkson.edu (4.1/SMI-4.1)
            id AA06374; Sun, 9 Oct 94 23:59:49 EDT
    Date: Sun, 9 Oct 94 23:59:49 EDT
    From: cline@cheetah.ece.clarkson.edu (Marshall Cline)
    Message-Id: <9410100359.AA06374@cheetah.ece.clarkson.edu>
    To: is80001@cis.nctu.edu.tw
    In-Reply-To: William Yeh's message of Sat, 24 Sep 94 10:31:48 CST
            <9409240231.AA20537@cissun51.cis.nctu.edu.tw>
    Subject: "C++ FAQ" book from Addison-Wesley
    Reply-To: cline@sun.soe.clarkson.edu (Marshall Cline)
    Status: OR

    >Date: Sat, 24 Sep 94 10:31:48 CST
    >From: is80001@cis.nctu.edu.tw (William Yeh)
    >Newsgroups: comp.lang.c++
    >X-Newsreader: TIN [version 1.2 PL2]
    >
    >Hi,
    >
    >  We, students at Department of Computer & Information Science, enjoy
    >your electronic-formed C++ FAQ very much.  We'd like to translate it
    >into our native Chinese for those having difficulty to read English
    >articles.
    >
    >  The translated article is meant to be used as an electronic document
    >on Internet, and not for commercial use.  We, therefore, ask for your
    >grants for this translation.
    >
    >  Regards.
    >
    >student at cis.nctu.edu.tw
    >--
    >-- -- -- -- -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- -- -- -- -- --
    > William Yeh                        | E-mail address:
    >                                    |   is80001@cis.nctu.edu.tw
    > Dept. of Computer & Info. Science  |   u8023001@cc.nctu.edu.tw
    > National Chiao-Tung University,    |   william.bbs@bbs.cis.nctu.edu.tw
    > Hsinchu, Taiwan, R.O.C.            |
    >-- -- -- -- -- -- -- -- -- -- -- --  -- -- -- -- -- -- -- -- -- -- -- --

    That sounds like a wonderful idea.
    Permission granted.
    M.
    --- --- --- --- ---  Quote End  --- --- --- --- ---



    ¡¾ÖÐÒë¶ÔÕÕ±í¡¿

      µ×ÏÂÁгö±¾ÎijöÏÖµÄרÓÐÃû´Ê¡¢ÆäËûÖØÒªµÄ´Ê¶ù£¬ÓëÒëÕß²ÉÓõÄÖÐÒ룬ÊÓÉÏÏÂ
      ÎÄÇé¿ö£¬ËüÃÇÒ²¿ÉÄÜ»áÓÐÁ½ÖÖÒÔÉϵÄÒëÃû¡£¿ÉÄܵϰ£¬À¨ºÅÖÐÒ²»á¸½ÉÏһЩÆä
      ËûÊé¼®ÎÄÕÂÖг£¼ûµÄÒë·¨¡£

        abstraction             ³éÏó»¯.
        access                  ´æÈ¡.
        access function         ´æÈ¡º¯Êý.
        alias                   ±ðÃû.
        argument                ÒýÊý.
        arity                   ÔªÊý.
        assignment              É趨.
        associativity           ½áºÏÂÉ.
        base class              »ùµ×Àà±ð.
        binding                 Ïµ½á.
        call                    ºô½Ð.
        class                   Àà±ð¡¢Îï¼þÀà±ð.
        composition             ³É·Ý¡¢Áã¼þ.
        constructor             ½¨¹¹×Ó£¨½¨¹¹Ôª£©.
        container               ÈÝÆ÷.
        container class         ÈÝÆ÷Àà±ð.
        data member             ×ÊÁϳÉÔ±.
        declaration             Ðû¸æ                            <Ãû´Ê>.
        declare                 Ðû¸æ                            <¶¯´Ê>.
        default                 Ô¤Éè¡¢ÄÚ¶¨.
        define                  ¶¨Òå                            <¶¯´Ê>.
        definition              ¶¨Òå                            <Ãû´Ê>.
        dereference             ½â²ÎÓᢽâ²Î¿¼.
        derive                  ÑÜÉú.
        destructor              ½â¹¹×Ó£¨½â¹¹Ôª£©.
        dispatch                ·ÖÅÉ¡¢º¯Êý·ÖÅÉ.
        dynamic                 ¶¯Ì¬.
        encapsulation           ·â×°¡¢·â×°ÐÔ.
        exception               ÀýÍâ¡¢ÀýÍâ×´¿ö£¨Òì³££©.
        exception handling      ÀýÍâ´¦Àí.
        explicit                Ã÷ÏԵġ¢ÍâÏԵĠ                 <ÐÎÈÝ´Ê>.
        expression              ÔËËãʽ.
        friend                  â·°é.
        function                º¯Êý.
        genericity              ·ºÐÍ.
        header file             ±êÍ·µµ£¨ÒýÈëµµ¡¢º¬À¨µµ£©.

        hide                    ÕÚ±Î.
        hierarchy               ½×²ã.
        identity                ¸öÌåʶ±ð.
        implement               Êµ×÷                            <¶¯´Ê>.
        implementation          ʵ×÷                            <Ãû´Ê>.
        inherit                 ¼Ì³Ð                            <¶¯´Ê>.
        inheritance             ¼Ì³Ð                            <Ãû´Ê>.
        inline                  ÐÐÄÚ£¨ÁÐÄÚ¡¢ÄÚǶ£©.
        inspector               ²éѯ×Ó.
        instance                °¸Àý¡¢ÊµÌ壨ִÐиöÌ壩.
        instantiate             °¸Àý»¯¡¢ÊµÌ廯                  <¶¯´Ê>.
        instantiation           °¸Àý                            <Ãû´Ê>.
        keyword                 ¹Ø¼ü×Ö¡¢±£Áô×Ö.
        mangle                  Ç©Ãû±àÂë                        <¶¯´Ê>.
        mangling                Ç©Ãû±àÂë                        <Ãû´Ê>.
        member                  ³ÉÔ±.
        member function         ³ÉÔ±º¯Êý.
        member object           ³ÉÔ±Îï¼þ.
        method                  ÔË×÷·½·¨¡¢ÔËËã·½·¨.
        module                  Ä£×é.
        multiple inheritance    ¶àÖØ¼Ì³Ð.
        mutator                 ¸ü¶¯×Ó.
        object                  Îï¼þ£¨¸öÌ壩.
        OO                      Îï¼þµ¼Ïò£¨¸öÌåµ¼Ïò£©.
        OOP                     Îï¼þµ¼Ïò³ÌʽÉè¼Æ.
        operator                ÔËËã×Ó.
        overload                ¶àÔØ£¨¹ýºÉ¡¢¸ºÔØ£©              <¶¯´Ê>.
        overloading             ¶àÔØ£¨¹ýºÉ¡¢¸ºÔØ£©              <Ãû´Ê>.
        override                ¸²¸Ç¡¢¸Äд.
        parameter               ²ÎÊý.
        persistence             ³ÖÐøÐÔ£¨ÓÀÐøÐÔ¡¢³Ö¹ÌÐÔ£©        <Ãû´Ê>.
        persistent object       ³ÖÐøÐÔÎï¼þ.
        pointer                 Ö¸±ê.
        polymorphism            ¶àÐÍ£¨Í¬ÃûÒìʽ£©.
        precedence              ÓÅÏÈÐò.
        pretty printer          ÃÀ±à¹¤¾ß.
        private                 Ë½ÓÐ.
        protected               ±£»¤.
        prototype               Ô­ÐÍ¡¢º¯ÊýÔ­ÐÍ£¨³ûÐÍ£©.
        public                  ¹«¹²¡¢¹«ÓÐ.
        pure virtual function   ´¿ÐéÄ⺯Êý.
        reference               ²Î¿¼¡¢²Î¿¼Öµ.
        relation                ¹ØÏµ.
        return value            ´«»ØÖµ.
        semantics               ÓïÒâ.
        signature               Ç©Ãû¡¢ÐÍ̬ǩÃû.
        smart pointer           ´ÏÃ÷µÄÖ¸±ê.
        specialization          ÌØÒ컯¡¢ÌØÊ⻯.
        statement               ³ÂÊö¡¢Ö¸ÁָÊö£©.
        static                  ¾²Ì¬.
        structure               ½á¹¹¡¢¼Ç¼.
        subclass                ×ÓÀà±ð¡¢×Ó´úÀà±ð.
        subtype                 ×ÓÐͱð¡¢×ÓÐÍ̬.
        superclass              ¸¸Àà±ð¡¢Ç×´úÀà±ð.
        syntax                  Óï·¨¡¢ÎÄ·¨.
        template                Ñù°æ£¨Ä£°æ£©.
        throw                   ¶ª³ö.
        type                    ÐÍ̬¡¢Ðͱð.
        virtual                 ÐéÄâ.
        virtual function        ÐéÄ⺯Êý.


    ¡¾ÖÐÒë°æ±¾Ò춯¼Í¼¡¿

    85.02. ¶ÔÕûƪÒëÎÄ×ö±È½Ï¶àÒ»µãµÄÐÞÊΡ£

    84.05. ÐÞÊÎЩ method Ïà¹ØµÄÒëÃû¡£

    84.03. ÐÞÊÎЩ persistence¡¢instance Ïà¹ØµÄÒëÃû¡£

    84.01. һЩÒëÎÄÐÞÊΡ¢Ôö¼Ó´ËÖÐÒëÎļþµÄ ftp ÆÜÉí´¦ËµÃ÷¡£
           ½«¸²¸Ç (override) ÓëÕڱΠ(hide) ¶þ´Ê¸üÃ÷ÏÔµØÇø·Ö¿ªÀ´¡£
           ¶Ô¡¸´ÏÃ÷µÄÖ¸±ê¡¹(smart pointer) ¼ÓÒ»µãÚ¹ÊÍ¡£

    83.12. һЩÒëÎÄÐÞÊΡ¢½« "method" ͳһÒëΪ¡¸ÔËËã·½·¨¡¹¡£

    83.11. µÚÒ»´Î·¢²¼£¬Ô­ÔØì¶½»´ó×Ê¿ÆÏµ¿¯¡¸×ÊѶÈËÔ°µØ¡¹¡£


    µ×ϾÍÊÇ´Ë USENET comp.lang.C++ FAQ ÎļþµÄÕýÎÄ¡£



£½£½ £Ð£á£ò£ô £±£¯£´  £½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½



¡¾Òë×¢¡¿Ô­ÎļþÒòƪ·ù¹ý³¤£¬ÔÚ·¢²¼Ê±¾ÍÒÑ·Ö³ÉËÄ·Ý¡£

comp.lang.c++ Frequently Asked Questions list (with answers, fortunately).
Copyright (C) 1991-96 Marshall P. Cline, Ph.D.
Posting 1 of 4.


1/96 ¸üУº
* ¹Øì¶»Ö¸´ fron.soe.clarkson.edu µÄ anonymous ftp ·½Ê½ÈÔÎÞÏÂÎÄ¡£
* ±¾Ô·Ýûʲ÷á±ä¶¯¡£

9/95 ¸üУº
* ¼ÓÈë FAQ 41£ºÒÔ±äÊý×öΪ¶àάÕóÁеĵÚһά¶È¡£
* ¼ÓÈë FAQ 123£º¹Øì¶ "Numerical Recipes" µÄ³Ìʽ¡£
* ¼ÓÈëµÚ 20 ½Ú ("³Ìʽ¿â")¡£ÄÚÈÝ»¹ºÜÉÙ£¬µ«×ÜÊǸö¿ª¶Ë¡£
* ÐÞÕý FAQ 30 µÄ´íÎó£¨ÉÙÁË "i" ±äÊý£©¡£
* ¼ÓÈë FAQ 124£ºÊ¹Óö¯Ì¬Á¬½áÒÔ±ÜÃâ¹ýì¶ÅÓ´óµÄÖ´Ðеµ¡£
* ¼ÓÈë FAQ 32£ºÏëÔÚ binary ģʽÏ "reopen" cin ¼° cout µÄÎÊÌâ¡£
* ¼ÓÈë ftp ANSI/ISO Committee Draft µÄ×ÊѶ (FAQ 7)¡£

7/95 ¸üУº
* СµØ·½£¨³ýÁËÏÂÃæ»áÌáµ½µÄ FTP µØµãµÄ±ä¶¯Ö®Í⣩¡£

6/95 ¸üУº
* ¸üÕý¶©ÔÄ ANSI-C++ Draft µÄµç×ÓÓʵÝÐÅÏä¡£
* Ìí¼Ó¹Øì¶¸¡µãÔËËãµÄ FAQ [Phil Staite ËùÌáµÄ]¡£
* Ìí¼Ó¹Øì¶¶àάÕóÁÐµÄ FAQ [Doug Shapter ËùÌáµÄ]¡£
* Ìí¼Ó¹Øì¶ÖжϷþÎñ³£Ê½ (ISR)£¬ÒÔ¼°Ö¸Ïò³ÉÔ±º¯ÊýµÄÖ¸±êÖ® FAQ¡£
* ÖØÅŹØì¶¡¸Óà 'new' À´ÅäÖÃijЩÀà±ðµÄÎï¼þ¡¹FAQ µÄλÖá£

5/95 ¸üУº
* һЩÓï¾äÐÞÊΡ£

4/95 ¸üУº
* Ìí¼Ó BC++ Windows ·½Ãæ³£¼ûµÄÎÊÌâ¡£
* ¸ü¸Ä NIHCL µÄ ftp λַ¡£
* Ìí¼Ó½âÊÍ£º"ARM" ´ú±í "Annotated Reference Manual"¡£

3/95 ¸üУº
* Ìí¼Ó¹Øì¶ "delete this" µÄÎÊÌâ¡£
* Ìí¼ÓÁ½Ôò¹Øì¶ iostreams Óë eof µÄÎÊÌâ¡£
* ¸üÕýЩ Gnu emacs µÄ "c-mode" ºÍ "cc-mode" µÄÏîÄ¿¡£


1/95 ¸üУº
* ´ËÎļþµÄÖÐÒë°æ³öÀ´ÁË£»µ×ÏÂÔÙÏêÊöÖ®¡£

12/94 ¸üУº
* Ìí¼Ó¹Øì¶ STL µÄ FAQ£¨·ÅÔÚ #115£©¡£
* Ìí¼Ó¹Øì¶Ç©Ãû±àÂëµÄ FAQ£¨·ÅÔÚ #119£©¡£
* ¸üÕý¡¸¡º³É·Ý¡»Ó롺˽Óм̳С»Ö®±È½Ï¡¹ÕâÏî FAQ ÀïÃæµÄһЩ´ò×Ö´íÎó¡£
* ¸üÕýһЩƴ×Ö´íÎó¡£

11/94 ¸üУº
* ¼ÓÈ롸FAQ Ê项ºÍ¡¸FAQ Îļþ¡¹µÄÇø±ð×ÊѶ¡£
* ÆäËû×ÖÃæÉϵÄÐÞÊΡ£

10/94 ¸üУº
* ÐÞÕýһЩ´ò×Ö´íÎó¡£

9/94 ¸üУº
* Ò»µãÎÄ×ÖÉϵÄÐÞÊΡ£

8/94 ¸üУº
* ¼ÓÈë "typeid" ºÍ "dynamic_cast" µÄй涨¡£
* ¼ÓÈë "mutable" ºÍ "const_cast" µÄй涨¡£
* ÖØÐ´´ó²¿·ÝµÄ»Ø´ð²¿·Ý£¬Ê¹Æä¸üÒ»ÖÂЩ¡£
* Ô­ÎĵÄÒýºÅ¸ÄΪ "..." ¶ø²»ÊÇ `...' »ò ``...'' ¡£
* ÓгÌʽÂëÀý×ÓµÄÄÇÒ»ÐÐÒÔ TAB ÆðÍ·£»ÆäËûÐÐÔò·ñ¡£
   ¡¾Òë×¢¡¿±¾ÖÐÒë°æÒÔ 8 ¸öÓ¢ÎĿհ××ÖÔª´úÌæ TAB¡£
* ËùÓж«Î÷¶¼±à¼­¹ýÁË£»µ½´¦¶¼ÓÐС¸ü¶¯¡£


=======================
¡ö¡õ µÚ£±½Ú£ºÄÚÈݽéÉÜ
=======================

        DOCUMENT:    Frequently-Asked-Questions for comp.lang.c++
        REVISION:    Jan 31, 1996

        Îļþ²»µÈì¶Êé±¾£ºÕâ·Ý C++ FAQ ÎļþºÍ¡¸FAQ Ê项ÊDz»Ò»ÑùµÄ¡£¡°FAQ Ê顱
                  ("C++ FAQs", Addison-Wesley, 1995) ÊÇÕâÆªÎļþµÄÎå±¶´ó¡£
                  µ×ÏÂÓиüÏêϸµÄ½éÉÜ¡£

        AUTHOR:      Marshall P. Cline, Ph.D.
                     Paradigm Shift, Inc.
                     One Park St. / Norwood, NY  13668
                     voice: 315-353-6100
                     fax:   315-353-6110
                     email: cline@parashift.com

        COPYRIGHT:   Copyright (C), 1991-96 Marshall P. Cline, Ph.D.
                     Permission to copy all or part of this work is granted,
                     provided that the copies are not made or distributed
                     for resale (except a nominal copy fee may be charged),
                     and provided that the AUTHOR, COPYRIGHT, & NO WARRANTY
                     sections are retained verbatim and are displayed
                     conspicuously.  If anyone needs other permissions that
                     aren't covered by the above, please contact the author.

        NO WARRANTY: THIS WORK IS PROVIDED ON AN "AS IS" BASIS.  THE AUTHOR
                     PROVIDES NO WARRANTY WHATSOEVER, EITHER EXPRESS OR
                     IMPLIED, REGARDING THE WORK, INCLUDING WARRANTIES WITH
                     RESPECT TO ITS MERCHANTABILITY OR FITNESS FOR ANY
                     PARTICULAR PURPOSE.

        °æÈ¨ÉùÃ÷£ºCopyright (C), 1991-96 Marshall P. Cline, Ph.D.
                  ¸´ÖƱ¾ÎļþÈ«²¿»ò²¿·ÝµÄÄÚÈÝ£¬ÈôºÏºõÏÂÊöÖîÏîÒªÇó£¬ÔòÔÊÐíÖ®

                  £º²»µÃΪתÊÛ֮ĿµÄ¶øÖÆ×÷»ò´«²¥Èκθ´ÖÆÆ·£¨µ«¿ÉË÷È¡ÃûÒåÉÏ
                  µÄ´«²¥ÊÖÐø·Ñ£©£¬²¢ÇÒ×÷ÕßÀ¸¡¢°æÈ¨ÉùÃ÷¼°ÔðÈÎÊÂÏîµÄ²¿·Ý£¬Òª
                  Ò»×Ö²»Â©µØ¡¢ÐÑÄ¿µØÏÔʾ³öÀ´¡£ÈôÄúÐèÒª´Ë´¦Î´Ìá¼°µÄÊÚȨÊÂÏî
                  £¬ÇëÇ¢±¾×÷Õß¡£

        ÔðÈÎÊÂÏÕâ·ÝÎļþÊǹ©Äú²Î¿¼Óõġ£¶Ôì¶±¾×÷Æ·¿ÉÄÜÔì³ÉµÄÓªÀûÐÔ¡¢»òÈÎ
                  ºÎÌØÊⳡºÏÊÊÓÃÐÔÖ®±£ÕÏ£¬×÷Õ߸Ų»¸ºÔ𣬲»ÂÛÊÇ·ñÔøÃ÷°×µØÖ¸
                  ³ö»ò°µÊ¾¡£

          ¡¾Òë×¢¡¿ÉÏÊöµÄ¡¸°æÈ¨ÉùÃ÷¡¹Ó롸ÔðÈÎÊÂÏÒëÎÄ£¬½ö¹©²Î¿¼£¬Ò»ÇÐÇëÒÔ
                  Ô­ÎÄΪ׼¡£ÒëÕß¶ÔËüÃÇÒà¸Å²»¸ºÔð¡­¡­ ;->

        ÎļþÈ¡µÃ·½·¨£º  ¾ÉµÄ FTP µØµã²»ÄÜÓÃÁË¡£ÎÒÕýÔÚѰÕÒеĵص㣬
                        ÇëÃÜÇÐ×¢ÒâϸöÔµÄÕâ¸öµØ·½¡£
                        Çë²»Òª¼ÄÐÅÀ´ÍƼöеĵص㣨ÎÒµÄÐÅÏä»á±¬ÂúµÄ

          ¡¾Òë×¢¡¿Ì¨ÍåʹÓÃÕߣ¬Çëµ½ÒÔϵص㣬»òÆä AFS client È¡µÃ£º
                  ftp://NCTUCCCA.edu.tw/USENET/FAQ/comp/lang/c++/FAQ*

        ÆäËû×ÊѶ£ºcomp.lang.c FAQ ÿ¸öÔ¶¼»á³öÏÖÔÚ¸ÃÌÖÂÛÇøÖУ¬
                  ¸ÃÎļþµÄά»¤ÕßÊÇ Steve Summit (scs@eskimo.com) ¡£

        ÖÐÎÄ·­Ò룺Óà "Big5" ÄÚÂ루ÔŲ́Íå×î¹ãΪʹÓÃµÄ 16 λԪÖÐÎÄÄÚÂ룩´¢´æ
                  µÄÖÐÎÄÒëÎÄ£¬¿ÉÓà anonymous ftp µ½ÒÔϵصãÈ¡µÃ£º
             ftp://ftp.cis.nctu.edu.tw/Documents/News/C-faq/c-cppfaq.zip

=================================
¡ñ 1A£º¡¸FAQ Ê项Ó롸FAQ Îļþ¡¹
=================================

Addison-Wesley Òѳö°æÁËÓÉ Cline Óë Lomow ºÏÖøµÄ "C++ FAQs" (1995, ISBN
0-201-58958-3) Ò»Ê飬Ðí¶àÈ˶ԸÃÊéºÍÕâÆªÎļþµÄ¹ØÏµ¸Ðµ½ºÃÆæ£¬Ò»Ð©Ã»¿´¹ý¸ÃÊé
µÄÈË£¬Ò²µ£Ðı¾ÎÄÊÇ·ñ»áºÍËüÏàͬ¡£´Ë´¦½«»Ø´ðÕâЩÎÊÌâ¡£

¡¸FAQ Ê项£¨ì¶ Oct. 94 ÉÏÊУ©´óÌåÉϺͱ¾ÎĵĹÛÄîÒ»Ö£¬µ«¸ÃÊéԼΪ±¾Îĵģµ±¶
´ó£¬»¹°üÀ¨ÁËÊýǧÔò½»»¥²Î¿¼×ÊѶ¡¢²Î¿¼×ÊÁÏ¡¢Ë÷ÒýÏîÄ¿£¬¼°Ðí¶àµÄ³ÌʽÀý×Ó¡£

=============
¡ñ 1B£ºÄ¿Â¼
=============

========== POSTING #1 ==========

µÚ£±½Ú£ºÄÚÈݽéÉÜ
----------------
¡Ñ1A£º¡¸FAQ Ê项Ó롸FAQ Îļþ¡¹
¡Ñ1B£ºÄ¿Â¼
¡Ñ1C£ºÊõÓï¼°³£ÓõÄËõд

µÚ£²½Ú£ºÎÒ¸ÃÈçºÎ²ÎÓëÌÖÂÛ£¿£¨·¢ÐÅ֮ǰÇëÎñ±ØÒ»¶Á£©
------------------------------------------------
Q1£ºÎÒ¸ÃÔÚÄĸöÌÖÂÛÇøÖз¢ÎÊ£¿
Q2£ºÎÒ¸ÃÔõ÷áÌá³ö¡¸ÎҵijÌʽÓÐ벡¡¹µÄÎÊÌâÄØ£¿

µÚ£³½Ú£ºÖÜÔâµÄ¡¢¹ÜÀíÉϵÄÊÂÏî
----------------------------
Q3£ºÊ²÷áÊÇ OOP£¿Ê²÷áÊÇ C++£¿
Q4£ºC++ µÄÓŵãÊÇʲ÷᣿
Q5£ºË­ÔÚÓà C++£¿
Q6£ºÓÐÈκΠC++ ±ê×¼»¯·½°¸ÔÚ½øÐÐÂð£¿
Q7£º¸Ãµ½ÄÄÀïË÷È¡×îÐ嵀 ANSI-C++ ±ê×¼²Ý°¸£¿
Q8£ºC++ ¶Ô ANSI-C »ØËÝÏàÈÝÂð£¿
Q9£º¶à¾Ã²ÅÄÜѧ»á C++£¿


µÚ£´½Ú£ºC++ µÄ»ù´¡
------------------
Q10£ºÊ²÷áÊÇÀà±ð£¨class£©£¿
Q11£ºÊ²÷áÊÇÎï¼þ£¨object£©£¿
Q12£ºÊ²÷áÊDzο¼£¨reference£©£¿
Q13£ºÈç¹ûÉ趨ijֵ¸ø²Î¿¼»áÔõ÷áÑù£¿
Q14£ºÔõÑù²ÅÄܽ«²Î¿¼¸ÄÉè³É±ðµÄÎï¼þ£¿
Q15£ººÎʱ¸ÃÓòο¼£¬ºÎʱÓÖ¸ÃÓÃÖ¸±ê£¿
Q16£ºÐÐÄÚº¯ÊýÊÇ×öʲ÷áµÄ£¿

µÚ£µ½Ú£º½¨¹¹×Ӻͽ⹹×Ó
----------------------
Q17£º½¨¹¹×Ó£¨constructor£©ÊÇ×öʲ÷áµÄ£¿
Q18£ºÔõÑù²ÅÄÜÈý¨¹¹×Óºô½ÐÁíÒ»¸öͬ´¦Ò»ÊҵĽ¨¹¹×Ó£¿
Q19£º½â¹¹×Ó£¨destructor£©ÊÇ×öʲ÷áµÄ£¿

µÚ£¶½Ú£ºÔËËã×Ó¶àÔØ
------------------
Q20£ºÔËËã×Ó¶àÔØ£¨operator overloading£©ÊÇ×öʲ÷áµÄ£¿
Q21£ºÄÄЩÔËËã×Ó¿ÉÒÔ£¯²»Äܱ»¶àÔØ£¿
Q22£ºÔõÑù×öÒ»¸ö "**"¡¸´Î·½¡¹ÔËËã×Ó£¿

µÚ£·½Ú£ºâ·°é
------------
Q23£ºâ·°é£¨friend£©ÊÇʲ÷᣿
Q24£º¡¸â·°é¡¹Î¥·´ÁË·â×°ÐÔÂð£¿
Q25£ºâ·°éº¯ÊýµÄÓÅȱµã£¿
Q26£º¡¸â·°é¹ØÏµÎ޼̳м°µÝÒÆÐÔ¡¹ÊÇʲ÷áÒâ˼£¿
Q27£ºÓ¦¸ÃÌæÀà±ðÐû¸æ¸ö³ÉÔ±º¯Êý£¬»¹ÊÇⷰ麯Êý£¿

µÚ£¸½Ú£ºÊäÈ룯Êä³ö£º<iostream.h> ºÍ <stdio.h>
---------------------------------------------
Q28£º¸ÃÔõÑùÌæ "class Fred" ÌṩÊä³ö¹¦ÄÜ£¿
Q29£ºÎªÊ²÷áÎÒ¸ÃÓà <iostream.h> ¶ø²»ÊÇÒÔǰµÄ <stdio.h>£¿
Q30£ºÎªÊ²÷áÎÒ´¦ÀíÊäÈëʱ£¬»á³¬¹ýµµ°¸µÄ½áβ£¿
Q31£ºÎªÊ²÷áÎҵijÌʽִÐÐÍêµÚÒ»´Î»ØÈ¦áᣬ»á¶ÔÊäÈëµÄÒªÇó²»¼ÓÀí²Ç£¿
Q32£ºÔÚ DOS ¼° OS/2 µÄ binary ģʽÏ£¬ÒªÔõÑùÀ´ "reopen" cin ¼° cout£¿

========== POSTING #2 ==========

µÚ£¹½Ú£º×ÔÓɼÇÒäÌå¹ÜÀí
----------------------
Q33£º"delete p" »áɾȥ "p" Ö¸±ê£¬»¹ÊÇËüÖ¸µ½µÄ×ÊÁÏ£¬"*p" £¿
Q34£ºÎÒÄÜ "free()" µôÓÉ "new" ÅäÖõ½µÄ¡¢"delete" µôÓÉ "malloc()" ÅäÖõ½µÄ
     ¼ÇÒäÌåÂð£¿
Q35£ºÎªÊ²÷á¸ÃÓà "new" ¶ø²»ÊÇÀÏ×ÖºÅµÄ malloc() £¿
Q36£ºÎªÊ²÷á C++ ²»Ìæ "new" ¼° "delete" ´îÅä¸ö "realloc()" £¿
Q37£ºÎÒ¸ÃÔõÑùÅäÖã¯ÊÍ·ÅÕóÁУ¿
Q38£ºÍòÒ»ÎÒÍüÁ˽« "[]" ÓÃÔÚ "delete" ÓÉ "new Fred[n]" ÅäÖõ½µÄÕóÁУ¬»á·¢Éú
     Ê²÷áÊ£¿
Q39£º³ÉÔ±º¯Êý×ö "delete this" µÄ¶¯×÷ÊǺϷ¨µÄ£¨²¢ÇÒÊǺõģ©Âð£¿
Q40£ºÎÒ¸ÃÔõ÷áÓà new À´ÅäÖöàάÕóÁУ¿
Q41£ºC++ Äܲ»ÄÜ×öµ½ÔÚÖ´ÐÐʱÆÚ²ÅÖ¸¶¨ÕóÁеij¤¶È£¿
Q42£ºÔõÑùÈ·±£Ä³Àà±ðµÄÎï¼þ¶¼ÊÇÓà "new" ½¨Á¢µÄ£¬¶ø·ÇÇøÓò»òÕûÌ壯¾²Ì¬±äÊý£¿

µÚ£±£°½Ú£º³ý´íÓë´íÎó´¦Àí
------------------------
Q43£ºÔõÑù´¦Àí½¨¹¹×ӵĴíÎó£¿
Q44£ºÈç¹û½¨¹¹×ӻᶪ³öÀýÍâµÄ»°£¬¸ÃÔõ÷á´¦ÀíËüµÄ×ÊÔ´£¿

µÚ£±£±½Ú£ºConst ÕýÈ·ÐÔ
----------------------
Q45£ºÊ²÷áÊÇ "const correctness"£¿
Q46£ºÎÒ¸ÃÔçÒ»µã»¹ÊÇÍíÒ»µãÈö«Î÷Óг£ÊýÕýÈ·ÐÔ£¿
Q47£ºÊ²÷áÊÇ¡¸const ³ÉÔ±º¯Êý¡¹£¿
Q48£ºÈôÎÒÏëÔÚ "const" ³ÉÔ±º¯ÊýÄÚ¸üÐÂÒ»¸ö¡¸¿´²»¼ûµÄ¡¹×ÊÁϳÉÔ±£¬¸ÃÔõ÷á×ö£¿
Q49£º"const_cast" »á²»»áɥʧ×î¼Ñ»¯µÄ¿ÉÄÜ£¿

µÚ£±£²½Ú£º¼Ì³Ð
--------------
Q50£º¡¸¼Ì³Ð¡¹¶Ô C++ À´ËµºÜÖØÒªÂð£¿
Q51£ººÎʱ¸ÃÓü̳У¿
Q52£ºÔõÑùÔÚ C++ ÖбíÏÖ³ö¼Ì³Ð£¿
Q53£º°ÑÑÜÉúÀà±ðµÄÖ¸±êתÐͳÉÖ¸ÏòËüµÄ»ùµ×£¬¿ÉÒÔÂð£¿
Q54£ºDerived* --> Base* ÊÇÕý³£µÄ£»ÄÇΪʲ÷á Derived** --> Base** Ôò·ñ£¿
Q55£ºÑÜÉúÀà±ðµÄÕóÁС¸²»ÊÇ¡¹»ùµ×µÄÕóÁУ¬ÊÇ·ñ±íʾÕóÁв»ºÃ£¿

¡Ñ12A£º¼Ì³Ð£­£­ÐéÄ⺯Êý
Q56£ºÊ²÷áÊÇ¡¸ÐéÄâ³ÉÔ±º¯Êý¡¹£¿
Q57£ºC++ ÔõÑùͬʱ×öµ½¶¯Ì¬Ïµ½áºÍ¾²Ì¬Ðͱð£¿
Q58£ºÑÜÉúÀà±ðÄÜ·ñ½«»ùµ×Àà±ðµÄ·ÇÐéÄ⺯Êý¸²¸Ç£¨override£©¹ýÈ¥£¿
Q59£º"Warning: Derived::f(int) hides Base::f(float)" ÊÇʲ÷áÒâ˼£¿

¡Ñ12B£º¼Ì³Ð£­£­Ò»ÖÂÐÔ
Q60£ºÎÒ¸ÃÕÚ±ÎסÓÉ»ùµ×Àà±ð¼Ì³ÐÀ´µÄ¹«¹²³ÉÔ±º¯ÊýÂð£¿
Q61£ºÔ²ÐÎ "Circle" ÊÇÒ»ÖÖÍÖÔ² "Ellipse" Âð£¿
Q62£º¶Ô¡¸Ô²ÐÎÊÇ£¯²»ÊÇÒ»ÖÖÍÖÔ²¡¹ÕâÁ½ÄÑÎÊÌ⣬ÓÐûÓÐÆäËû˵·¨£¿

¡Ñ12C£º¼Ì³Ð£­£­´æÈ¡¹æÔò
Q63£ºÎªÊ²÷áÑÜÉúµÄÀà±ðÎÞ·¨´æÈ¡»ùµ×µÄ "private" ¶«Î÷£¿
Q64£º"public:"¡¢"private:"¡¢"protected:" µÄ²î±ðÊÇ£¿
Q65£ºµ±ÎҸıäÁËÄÚ²¿µÄ¶«Î÷£¬ÔõÑù±ÜÃâ×ÓÀà±ð±»ÆÆ»µ£¿

¡Ñ12D£º¼Ì³Ð£­£­½¨¹¹×ÓÓë½â¹¹×Ó
Q66£ºÈô»ùµ×Àà±ðµÄ½¨¹¹×Óºô½ÐÒ»¸öÐéÄ⺯Êý£¬ÎªÊ²÷áÑÜÉúÀà±ð¸²¸ÇµôµÄÄǸöÐéÄ⺯
     ÊýÈ´²»»á±»ºô½Ðµ½£¿
Q67£ºÑÜÉúÀà±ðµÄ½â¹¹×ÓÓ¦¸ÃÍâÏԵغô½Ð»ùµ×µÄ½â¹¹×ÓÂð£¿

¡Ñ12E£º¼Ì³Ð£­£­Private Óë protected ¼Ì³Ð
Q68£º¸ÃÔõ÷á±í´ï³ö¡¸Ë½Óм̳С¹(private inheritance)£¿
Q69£º¡¸Ë½Óм̳С¹ºÍ¡¸³É·Ý¡¹(composition) ÓжàÀàËÆ£¿
Q70£ºÎұȽϸÃÓÃÄÄÒ»ÖÖ£º³É·Ý»¹ÊÇ˽Óм̳У¿
Q71£ºÎÒÓ¦¸ÃÓÃÖ¸±êתÐÍ·½·¨£¬°Ñ¡¸Ë½ÓС¹ÑÜÉúÀà±ðת³ÉËüµÄ»ùµ×Âð£¿
Q72£º±£»¤¼Ì³Ð (protected inheritance) ºÍ˽Óм̳ÐÓкιØÁ¬£¿
Q73£º"private" ºÍ "protected" µÄ´æÈ¡¹æÔòÊÇʲ÷᣿

µÚ£±£³½Ú£º³éÏ󻯣¨abstraction£©
-------------------------------
Q74£º·ÖÀë½éÃæÓëʵ×÷ÊÇ×öʲ÷áÓõģ¿
Q75£ºÔÚ C++ ÀÎÒ¸ÃÔõÑù·ÖÀë½éÃæÓëʵ×÷£¨Ïñ Modula-2 ÄÇÑù£©£¿
Q76£ºABC ("abstract base class") ÊÇʲ÷᣿
Q77£º¡¸´¿ÐéÄ⡹(pure virtual) ³ÉÔ±º¯ÊýÊÇʲ÷᣿
Q78£ºÔõÑùÌæÕû¸öÀà±ð½×²ãÌṩÁÐÓ¡µÄ¹¦ÄÜ£¿
Q79£ººÎʱ¸Ã°Ñ½â¹¹×ÓŪ³É virtual£¿
Q80£ºÐéÄ⽨¹¹×Ó (virtual constructor) ÊÇʲ÷᣿

========== POSTING #3 ==========

µÚ£±£´½Ú£º³Ìʽ·ç¸ñÖ¸µ¼
----------------------
Q81£ºÓÐÈÎºÎºÃµÄ C++ ³Ìʽд×÷µÄ±ê×¼Âð£¿
Q82£º³Ìʽ׫д±ê×¼ÊDZØÒªµÄÂð£¿ÓÐËü¾Í¹»ÁËÂð£¿
Q83£ºÎÒÃǵÄ×éÖ¯¸ÃÒÔÒÔÍù C µÄ¾­ÑéÀ´¾ö¶¨³Ìʽ׫д±ê×¼Âð£¿
Q84£ºÎÒ¸ÃÔÚº¯ÊýÖмä»òÊÇ¿ªÍ·À´Ðû¸æÇøÓò±äÊý£¿
Q85£ºÄÄÒ»ÖÖԭʼµµÃüÃû¹ßÀý×îºÃ£¿ "foo.C"? "foo.cc"? "foo.cpp"?
Q86£ºÄÄÒ»ÖÖ±êÍ·µµÃüÃû¹ßÀý×îºÃ£¿ "foo.H"? "foo.hh"? "foo.hpp"?
Q87£ºC++ ÓÐûÓÐÏñ lint ÄÇÑùµÄÖ¸µ¼Ô­Ôò£¿

µÚ£±£µ½Ú£ºSmalltalk ³ÌʽÕßѧϰ C++ Ö®Ô¿
---------------------------------------
Q88£ºÎªÊ²÷á C++ µÄ FAQ ÓÐÒ»½ÚÌÖÂÛ Smalltalk£¿ÕâÊÇÓÃÀ´¹¥»÷ Smalltalk µÄÂð£¿
Q89£ºC++ ºÍ Smalltalk µÄ²î±ðÔÚÄÄ£¿
Q90£ºÊ²÷áÊÇ¡¸¾²Ì¬Ðͱ𡹣¿ËüºÍ Smalltalk ÓжàÏàËÆ£¯²»Ïñ£¿
Q91£º¡¸¾²Ì¬Ðͱð¡¹Ó롸¶¯Ì¬Ðͱð¡¹ÄÄÒ»ÖֱȽÏÊÊºÏ C++£¿
Q92£ºÔõÑù·Ö±æÄ³¸ö C++ Îï¼þ³Ìʽ¿âÊÇ·ñÊôì¶¶¯Ì¬ÐͱðµÄ£¿
Q93£ºÔÚ C++ ÀïÔõÑùÓü̳У¿ËüºÍ Smalltalk Óкβ»Í¬£¿
Q94£ºSmalltalk/C++ ²»Í¬µÄ¼Ì³Ð£¬ÔÚÏÖʵÀïµ¼ÖµĽá¹ûÊÇʲ÷᣿
Q95£ºÑ§¹ý¡¸´¿ÖÖ¡¹µÄ OOPL Ö®áá²ÅÄÜѧ C++ Âð£¿
Q96£ºÊ²÷áÊÇ NIHCL£¿µ½ÄÄÀïÄõ½Ëü£¿

µÚ£±£¶½Ú£º²Î¿¼ÓëÊýÖµÓïÒâ
------------------------
Q97£ºÊ²÷áÊÇÊýÖµÒÔ¼°²Î¿¼ÓïÒ⣿ÄÄÒ»ÖÖÔÚ C++ Àï×îºÃ£¿
Q98£º¡¸ÐéÄâ×ÊÁÏ¡¹ÊÇʲ÷᣿Ôõ÷áÑù£¯ÎªÊ²÷á¸ÃÔÚ C++ ÀïʹÓÃËü£¿
Q99£ºÐéÄâ×ÊÁϺͶ¯Ì¬×ÊÁÏÓкβî±ð£¿
Q100£ºÎÒ¸ÃÕý³£µØÓÃÖ¸±êÀ´ÅäÖÃ×ÊÁϳÉÔ±£¬»¹ÊǸÃÓḳɷݡ¹(composition)£¿
Q101£º¶¯Ì¬ÅäÖóÉÔ±Îï¼þÓÐÈý¸öЧÂÊÒòËØ£¬ËüÃǵÄÏà¶Ô´ú¼ÛÊǶàÉÙ£¿
Q102£º"inline virtual" µÄ³ÉÔ±º¯ÊýÕæµÄ»á±» "inline" Âð£¿
Q103£º¿´ÆðÀ´ÎÒ²»Ó¦¸ÃÓòο¼ÓïÒâÁË£¬ÊÇÂð£¿
Q104£º²Î¿¼ÓïÒâЧÂʲ»¸ß£¬ÄÇ÷áÎÒÊÇ·ñÓ¦¸ÃÓô«Öµºô½Ð£¿

========== POSTING #4 ==========

µÚ£±£·½Ú£ººÍ C Á¬½á£¯ºÍ C µÄ¹ØÏµ
--------------------------------
Q105£ºÔõÑù´Ó C++ Öкô½Ð C µÄº¯Êý "f(int,char,float)"£¿
Q106£ºÔõÑù²ÅÄܽ¨Ò»¸ö C++ º¯Êý "f(int,char,float)"£¬ÓÖÄܱ» C ºô½Ð£¿
Q107£ºÎªÊ²÷á linker ÓÐÕâÖÖ´íÎóѶϢ£ºC/C++ º¯Êý±» C/C++ º¯Êýºô½Ðµ½£¿
Q108£º¸ÃÔõ÷á°Ñ C++ Àà±ðµÄÎï¼þ´«¸ø£¯´«×Ô C µÄº¯Êý£¿
Q109£ºC µÄº¯ÊýÄܲ»ÄÜ´æÈ¡ C++ Àà±ðµÄÎï¼þ×ÊÁÏ£¿
Q110£ºÎªÊ²÷áÎÒ×ܾõµÃ C++ ÈÃÎÒ¡¸Àë»úÆ÷¸üÔ¶ÁË¡¹£¬²»Ïñ C ÄÇÑù£¿

µÚ£±£¸½Ú£ºÖ¸Ïò³ÉÔ±º¯ÊýµÄÖ¸±ê
----------------------------
Q111£º¡¸Ö¸Ïò³ÉÔ±º¯ÊýµÄÖ¸±ê¡¹ºÍ¡¸Ö¸µ½º¯ÊýµÄÖ¸±ê¡¹µÄÐÍ̬Óвî±ðÂð£¿
Q112£ºÔõÑù°ÑÖ¸Ïò³ÉÔ±º¯ÊýµÄÖ¸±ê´«¸ø signal handler¡¢X event callback µÈµÈ£¿
Q113£ºµ±ÎÒÏëÒÔ³ÉÔ±º¯Êý×öΪÖжϷþÎñ³£Ê½ (ISR) ʱ£¬ÎªÊ²÷á±àÒëÆ÷²úÉú£¨ÐÍ̬²»
      ·û£©µÄ´íÎó£¿
Q114£ºÎªÊ²÷áÎÒÈ¡²»³ö C++ º¯ÊýµÄλַ£¿
Q115£ºÔõÑùÐû¸æÖ¸Ïò³ÉÔ±º¯ÊýµÄÖ¸±êÕóÁУ¿

µÚ£±£¹½Ú£ºÈÝÆ÷Àà±ðÓë template
-----------------------------
Q116£ºÔõÑù×ÔÒ»¸öÁ¬½á´®ÁУ¯ÔÓ´Õ±íµÈµÈÀïÃæ£¬²åÈ룯´æÈ¡£¯¸Ä±äÔªËØ£¿
Q117£º¡¸Ñù°æ¡¹£¨template£©µÄÓÃÒâÊÇʲ÷᣿
Q118£º"function template" µÄÓï·¨£¯ÓïÒâÊÇʲ÷᣿
Q119£º"class template" µÄÓï·¨£¯ÓïÒâÊÇʲ÷᣿
Q120£ºÊ²÷áÊÇ¡¸²ÎÊý»¯Ðͱ𡹣¨parameterized type£©£¿
Q121£º¡¸·ºÐÍ¡¹£¨genericity£©ÊÇʲ÷᣿

µÚ£²£°½Ú£º³Ìʽ¿â
----------------
Q122£ºÔõÑùÄõ½ "STL"£¿
Q123£ºÔõÑù ftp µ½ "Numerical Recipes" ¸½µÄ³Ìʽ£¿
Q124£ºÎªÊ²÷áÎÒµÄÖ´Ðеµ»áÕâ÷á´ó£¿

µÚ£²£±½Ú£ºÌض¨ÏµÍ³µÄϸ½Ú
------------------------
Q125£ºGNU C++ (g++) °ÑС³ÌʽÔì³ö´ó´óµÄÖ´Ðеµ£¬ÎªÊ²÷᣿
Q126£ºÓÐ YACC µÄ C++ ÎÄ·¨Âð£¿
Q127£ºÊ²÷áÊÇ C++ 1.2?  2.0?  2.1?  3.0?
Q128£ºÈç¹ûÇ©Ãû±àÂë±ê×¼»¯ÁË£¬ÎÒÄÜ·ñ½«²»Í¬³§É̱àÒëÆ÷²úÉúµÄ³ÌʽÂëÁ¬½áÆðÀ´£¿

µÚ£²£²½Ú£ºÆäËûµÄ¼¼ÊõºÍ»·¾³µÄÊÂÏî
--------------------------------
¡Ñ22A£ºÆäËûµÄ¼¼ÊõÊÂÏî
Q129£ºÎªÊ²÷áÓÐ static ×ÊÁϳÉÔ±µÄÎï¼þÀà±ð²úÉúÁË linker ´íÎó£¿
Q130£º"struct" ºÍ "class" ¹Ø¼ü×Ö²î±ðÔÚÄÄ£¿
Q131£ºÎªÊ²÷á²»ÄÜÒÔº¯ÊýµÄ´«»ØÖµÀ´¶àÔØ£¨overload£©Ëü£¿
Q132£ºÊ²÷áÊÇ¡¸³ÖÐøÐÔ¡¹£¿Ê²÷áÊÇ¡¸³ÖÐøÐÔÎï¼þ¡¹£¿
Q133£ºÎªÊ²÷ḡµãÊý (floating point) Õâ÷á²»¾«È·£¿ÎªÊ²÷áÕâ¶Î³Ìʽ²»»áÓ¡³ö 0.43£¿

¡Ñ22B£ºÆäËû»·¾³ÏµÄËöÊÂ
Q134£ºÓÐÈκΠTeX »ò LaTeX µÄ¾Þ¼¯£¬ÄÜ´¦Àí "C++" µÄÁô°×Ч¹û£¨spacing£©Âð£¿
Q135£ºÔÚÄĶù¿ÉÄõ½ C++2LaTeX Õâ¸ö C++ԭʼÂëµÄ LaTeX ÃÀ±à¹¤¾ß£¨pretty
      printer£©£¿
Q136£º¸Ãµ½ÄÄÀïÈ¡µÃ "tgrind" Õâ¸ö C++/C/etc µÄԭʼÂëÃÀ±à¹¤¾ß£¿
Q137£ºÓиø GNU emacs ±à¼­Æ÷ÓÃµÄ C++-mode Âð£¿Óеϰ£¬¸ÃÔõ÷áÄã¿
Q138£ºÎÒÒªµ½ÄĶùµÃµ½ºÍ×÷ҵϵͳÏà¹ØµÄ FAQs£¨ Æ©È磺BC++¡¢DOS¡¢Windows µÈµÈ£©£¿
Q139£ºÎªÊ²÷áÎÒµÄ DOS C++ ³Ìʽ˵ "Sorry: floating point code not linked"
      ¡°±§Ç¸£¬¸¡µãÔËËã³ÌʽÂëδÁ¬½á½øÀ´¡±£¿
Q140£ºÎªÊ²÷áµ±ÎÒûִÐÐ BC45 IDE µÄ»°£¬BC++ ×ö³öÀ´µÄ Windows Ó¦ÓóÌʽ¾Í²»ÄÜÓã¿


=========================
¡ñ 1C£ºÊõÓï¼°³£ÓõÄËõд
=========================

Õâ¶ùÊÇһЩ´ËÎļþËù²ÉÓõÄËõд£º

    ×Ö»ã        ÒâÒå
    ====        ===========
    fn          function £¬º¯Êý£¨µ¥ÊýÐÍ£©
    fns         functions£¬º¯Êý£¨¸´ÊýÐÍ£©
    param       parameter£¬²ÎÊý
    ptr         pointer£¬Ö¸±ê£¬C/C++ µÄÓï·¨ÔªËØ£¬Ðû¸æ·¨£º  int * p;
    ref         reference£¬²Î¿¼£¬C++ µÄÓï·¨ÔªËØ£¬Ðû¸æ·¨£º  int & r;
    OO          object-oriented£¬Îï¼þµ¼Ïò
    OOP         object-oriented programming£¬Îï¼þµ¼Ïò³ÌʽÉè¼Æ
    OOPL        object-oriented programming language£¬Îï¼þµ¼ÏòÓïÑÔ
    method      ÔË×÷ÐÐΪ£¬"member function ³ÉÔ±º¯Êý" µÄÁíÒ»ÖÖ˵·¨
                ¡¾Òë×¢¡¿"method" ÊÇÔ´×Ô Smalltalk µÄÊõÓºÜ³£ÓÃì¶ OO ½ç¡£


=======================================================
¡ö¡õ µÚ£²½Ú£ºÎÒ¸ÃÈçºÎ²ÎÓëÌÖÂÛ£¿£¨·¢ÐÅ֮ǰÇëÎñ±ØÒ»¶Á£©
=======================================================

Q1£ºÎÒ¸ÃÔÚÄĸöÌÖÂÛÇøÖз¢ÎÊ£¿

Comp.lang.c++ ÊÇÌÖÂÛ C++ÓïÑÔ±¾Éí×îºÃµÄµØ·½£¨Æ©È磺C++ ³ÌʽÉè¼Æ¡¢Óï·¨¡¢·ç¸ñ
£©¡£ÆäËûÌÖÂÛÇøÊÇÓÃÀ´ÌÖÂÛÌØ¶¨µÄϵͳ£¨Æ©È磺MS Windows »òÊÇ UNIX£©£¬»òÊÇÆäËû
ºÍ C++ÓïÑÔ²»Ö±½ÓÏà¹ØµÄÖ÷Ì⣨ƩÈ磺ÔõÑùʹÓÃÄãµÄ±àÒëÆ÷£©¡£µ×ÏÂÁгöһЩ·Ç³£ÈÈ
ÃŵÄÌÖÂÛÇø£¬²¢´ÓËüÃÇµÄ FAQs ÖÐժ¼ЩƬ¶Ï£¬Ó¦¸ÃÄÜÈÃÄúÃ÷ÁËËüÃÇ×î³£ÌÖÂÛÄÄЩ¿Î
Ìâ¡£

  comp.os.ms-windows.programmer.tools
     ´ËÇøÊÇÓÃÀ´ÌÖÂÛÓÐ¹Ø Windows ÈíÌ巢չϵͳ¹¤¾ßµÄÑ¡Ôñ¼°Ê¹Óá£
  comp.os.ms-windows.programmer.misc
     ´ËÄËÂÛ¼°ÆäâÅ Windows ÈíÌå·¢Õ¹Ö®ÊÂÏî¡£
  [Óиö FAQ ÁÐ±í£¬ÁгöËùÓÐ comp.os.ms-windows.programmer.* ÌÖÂÛÇø]
     FAQ 5.7.1.  ÔÚ DLL ÖдæÈ¡ C++ µÄÎï¼þÀà±ð
     FAQ 6.1.1.  ÒÔ MDI ×ÓÊÓ´°×ö³ö¶Ô»°¿ò [ÓÃ OWL]
     FAQ 6.2.1.  °Ñ½ûÄܵÄÑ¡ÏîÖÂÄÜÆðÀ´ [Óà MFC]
     FAQ 8.1.5.  Ê¹Óà windows.h µÄ STRICT ·ûºÅ¶¨Òå
     FAQ 10.  ³ÌʽÉè¼Æ²Î¿¼×ÊÁÏ

  comp.os.msdos.programmer
     Ðí¶àÐżþ¶¼ÊǹØì¶³ÌʽÓïÑÔ²úÆ·µÄ£¨Ö÷ÒªÊÇ Borland ºÍ Microsoft£©¡£
     FAQ 301. ÔõÑù²ÅÄܶÁÈ¡×ÖÔª¶ø²» [µÈ´ý] Enter ¼ü£¿
     FAQ 412. ÔõÑù¶ÁÈ¡¡¢½¨Á¢¡¢¸ü¸Ä¼°É¾³ý´ÅƬ±êÃû£¿
     FAQ 504. ÔõÑùÉ趨 COM ²º£¬ÒÔÓÃËüÀ´´«Êä×ÊÁÏ£¿
     FAQ 602. C ³ÌʽÔõÑù²ÅÄÜËÍ¿ØÖÆÂë¸øÓ¡±í»ú£¿
     FAQ 606. ÔõÑù²ÅÄܵÃÖª Microsoft »¬ÊóµÄλÖü°°´Å¥×´Ì¬£¿
     FAQ 707. ÔõÑùд³£×¤³Ìʽ£¨TSR£©¹¤¾ß£¿
     FAQ B0.  ÔõÑùÁ¬Ïµ [Borland, Microsoft] µÈ¹«Ë¾?
     [×¢Ò⣺Õâ·Ý FAQ ²»ÔÚ rtfm.mit.edu À¶øÔÚ Simtel
            (Æ©Èç oak.oakland.edu) in /pub/msdos/info/faqp*.zip ÒÔ¼° Garbo
            (garbo.uwasa.fi) in /pc/doc-net/faqp*.zip]
  comp.os.msdos.programmer.turbovision [Borland µÄÎÄ×ÖģʽӦÓóÌʽ¹Ç¼Ü]

  comp.unix.programmer
     FAQ 4.5)  ÔõÑùʹÓà popen() ¿ªÆôÐгÌÒÔ¶Áд֮£¿
     FAQ 4.6)  ÔõÑùÔÚ C ³ÌʽÀï sleep() Ò»ÃëÒÔÄÚ£¿

  comp.unix.solaris (°üº¬ SunOS 4.x ºÍ Solaris)
     FAQ 4)  Signal ÈëÃÅ
     FAQ 5)  µÈ´ý×ÓÐÐ³Ì Exit

  gnu.g++.help
     FAQ: µ½ÄÄÀïÕÒ C++ µÄ demangler£¨·´Ç©Ãû±àÂëÆ÷£©£¿
     FAQ: ÄÄÀïÓÐ Solaris 2.x °æµÄ gcc/g++ λԪµµ£¿
     FAQ: ÓÐ g++ 2.x µÄÎļþÂð£¿
  gnu.g++.bug [g++ µÄ³ô¡õÁбí -- Çë¼û g++ µÄÎļþ]


  comp.lang.c
     FAQ 1.10: ÎÒ¸ãºýÍ¿ÁË¡£NULL ±£Ö¤Ò»¶¨ÊÇ 0£¬µ«ÊÇ null Ö¸±êÈ´²»ÊÇ£¿
     FAQ 2.3:  ÄÇ÷ᣬÔÚ C ÀïÍ·¡¸Ö¸±êºÍÕóÁеȼۡ¹ÊÇʲ÷áÒâ˼£¿
     FAQ 4.2:  [Ϊʲ÷á "printf("%d\n," i++ * i++);" ÓÐÎÊÌ⣿]
     FAQ 7.1:  ÔõÑùдһ¸ö½ÓÊÕ²»¶¨ÊýÄ¿ÒýÊýµÄº¯Êý? [stdarg.h »òÊÇ varargs.h]
     FAQ 10.4: Ôõ÷áÐû¸æÒ»¸öÖ¸ÏòijÖÖº¯ÊýµÄÖ¸±êÕóÁУ¬¶ø¸Ãº¯ÊýµÄ´«»ØÖµÎª£º
               Ö¸ÏòÁíÒ»¸ö´«»Ø×ÖÔªÖ¸±êµÄº¯Êý£¿

²¢Çë²Î¿¼¿´¿´ comp.graphics¡¢comp.sources.wanted¡¢comp.programming£¬ÒÔ¼°
comp.object£¨ËüµÄ FAQ ÊǸöºÜ°ôµÄ OOP ÈëÃÅ¡¢ÊõÓï¹ÛÄî¸ÅÂÛÎļþ£©¡£Çë¼Çס£º
comp.std.c++ ÊÇרÃÅÌÖÂÛºÍÑÐÒéÖÐµÄ ANSI/ISO C++ ±ê×¼·½°¸£¨ÏÂÎÄ»áÌᣩ¡°Ö±½Ó
¡±Ïà¹ØµÄÊÂÏî¡£

ͬʱµ½ÉÏÊöÐÅÇøºÍ comp.lang.c++ È¥ÎÊͬһ¸öÎÊÌ⣬¼¸ºõÊÇû±ØÒªµÄ£¨ÄãÊÇÖªµÀµÄ
£¬Ìض¨ÏµÍ³ÐÅÇøµÄ¶ÁÕß²»ÓûúÆ÷ÓïÑÔд³Ìʽ£©¡£Ö»ÒòÄãµÄÎÊÌâ¡¸ÕæµÄºÜÒª½ô¡¹£¬¾Íµ½
´¦·¢ÎÊ£¬ÊǸöºÜ»µµÄϰ¹ß¡£Èç¹ûÄãÔÚ¡¸ÕýÈ·µÄ¡¹ÐÅÇøÃ»µÃµ½»ØÒô£¬ÇÒÈÏΪÄã·ÇµÃÔÚÕâ
¶ù·¢ÐŲ»¿É£¬ÇëÖÁÉÙ¿¼ÂÇһϣ¬½«Õâ¶ùµÄ»ØÐÅÖØµ¼»ØÔ­À´ÄǸöÊʵ±µÄÐÅÇø¡£

ÔÚÈκÎÐÅÇø·¢ÎÊ֮ǰ£¬ÄãÓ¦µ±ÏȶÁ¶ÁËüµÄ FAQ¡£ÄãÏëÎʵĿÉÄܾÍÔÚÉÏÃæ£¬ÕâÑù¾Í¿ÉÊ¡
ÏÂÄã·¢ÐŵÄʱ¼ä£¬ÒÔ¼°È«ÊÀ½çÊýÒÔǧ¼ÆµÄÈËÀà¶ÁÄãµÄÐŵÄʱ¼ä¡£»Ø´ðÒѾ­ÊÇ FAQÎÊÌâ
µÄÈË£¬¿ÉÄÜ»áÒòΪ°×°×ÀË·Ñʱ¼ä¶ø·³ÈŲ»ÒÑ£»ËûÃÇÒ²¿ÉÄÜ»á¸øÄã´íÎó»ò²»ÍêÕûµÄ½â´ð
£¬ÒòΪËûÃÇҲû¿´¹ý FAQ¡£

¡¸³£¼ûÎÊÌâ½â´ð¡¹ÎļþÿÌì 24 Сʱ¶¼¿ÉÓÉ anonymous ftp (rtfm.mit.edu µÄ
/pub/usenet/comp.what.ever) »òÊÇ e-mail server (¼ÄÒ»ÔòÄÚÈÝΪ "help" µÄÐŵ½
mail-server@rtfm.mit.edu) À´È¡µÃ¡£ÓûÖªÏêÇ飬Çë¼û "Introduction to the
*.answers newsgroups" Õâ·ÝÎļþ£¬ËüÔÚ news.answers »ò news.announce.newusers
£¨Õâ¶ù»¹ÓÐÐí¶à±ØÐëÒ»¶ÁµÄÎļþ£©ÖÐÕÒµ½¡£

========================================

Q2£ºÎÒ¸ÃÔõ÷áÌá³ö¡¸ÎҵijÌʽÓÐ벡¡¹µÄÎÊÌâÄØ£¿

µ×ÏÂÊÇһЩ½¨Ò飬Èà comp.lang.c++ µÄ¶ÁÕßÄܰïÄã½â¾ö³ÌʽÉè¼ÆµÄÎÊÌâ¡£

1. Çë¶Á¶ÁÉÏÒ»¸öÎÊÌ⣬ÒÔÈ·¶¨ÄãµÄÎÊÌâÊÇÕë¶Ô C++ÓïÑÔ±¾Éí£¬¶øºÍÄãµÄ³ÌʽÉè¼ÆÏµ
   Í³£¨Æ©È磺»æÍ¼¡¢Ó¡±í»ú¡¢É豸¡­¡­£©»òÊDZàÒë»·¾³£¨Æ©È磺¡¸ÕûºÏ»·¾³¹ÒÁË¡¹
   ¡¢¡¸ÔõÑùÏû³ýxxxx¾¯¸æÑ¶Ï¢¡¹¡¢¡¸ÔõÑùÁ¬½á³Ìʽ¿â¡¹£©ÍêÈ«Î޹ء£Èç¹ûÄãÏëÖªµÀ
   ÎªÊ²÷áÄã OWL³ÌʽÖеÄÐéÄ⺯Êý CmOk() û±»ºô½Ðµ½£¬ÄãµÄÎÊÌâ¿ÉÄܱȽÏÊʺϷÅ
   ÔÚ Windows³ÌʽÉè¼ÆµÄÐÅÇø¡£Èç¹ûÄãÄÜд¸ö¶ÀÁ¢µÄС³Ìʽ£¬¶øËü»áÈñàÒëÆ÷²úÉú
   ºÍÄãÄǸö OWL³ÌʽͬÑùµÄ´íÎóѶϢ»òÐÐΪµÄ»°£¬¾Í¿ÉÒԷŵ½ comp.lang.c++ ÁË£¬
   ÆäËûϵͳµÄ C++³ÌʽԱ¿ÉÄܰïµÃÉÏæ¡£

2. ¡¸Ðżþ±êÌ⡹À¸Î»ÒªÓÐÒâÒå¡£ÏñÊÇ¡¸C++ ³Ìʽ¡¹ÕâÑùµÄ±êÌâÌ«¿Õ·ºÁË£¬¡¸new Ò»
   ¸ö¶àάÕóÁеÄÎÊÌ⡹¾ÍºÜºÃ¡£²»ÒªÓÃÒ»¶Ñ¾ªÌ¾ºÅ£¬ÇîÈÂÈÂÖø¡¸¾ÈÃü°¡¡¹£¬»òÊÇ¿ª
   ÍæÐ¦µÄÓá¸SEX SEX SEX¡¹ÕâÖÖ±êÌâ¡£Èç¹ûÄãÈÏΪ¸ÃÎÊÌâºÍÄãµÄ±àÒëÆ÷Óйأ¬×îºÃ
   ÔÚ±êÌâÀ¸ÖеÀ³ö±àÒëÆ÷ºÍ°æ±¾±àºÅ¡£

3. ÁгöÍêÕûµÄ¡¢¿É±àÒëµÃ¹ýÈ¥µÄ³ÌʽÂë¡£Òª´ÓÈËÀàµÄÓïÑÔÐðÊöÀȥ³ý´í»òÊÇÖØ½¨
   »ØÒ»¸ö³Ìʽ£¬ÊǼ«ÎªÀ§ÄѵÄÊ¡£¡¸ÍêÕûµÄ³ÌʽÂ롹ָµÄÊÇ£ºÈκα»Óõ½µÄÐͱð¡¢
   º¯Êý¶¼ÒªÐû¸æ³öÀ´£¬±»Óõ½µÄ±êÍ·µµ¶¼Òª #include ½øÀ´¡­¡­µÈµÈ¡£Ç뽫³ÌʽÂë
   ²Ã¼õµ½Ö»Áô±ØÒªµÄ²¿·Ý£¬ÎÒÃDz¢²»ÐèÒªÄÇЩִÐÐÆðÀ´£¨ÉõÖÁÁ¬½áʱ£©¡°ÓÐÓõġ±
   ¶«Î÷£¬ÎÒÃÇÖ»ÐëÄÜÖØÏÖ³öÄãµÄ´íÎóѶϢ£¨¿ÉÄÜÔÚ²»Í¬µÄ±àÒëÆ÷ÖУ©¾ÍÐÐÁË¡£¡¸¿É
   ±àÒëµÃ¹ýÈ¥¡¹Ö¸µÄÊÇ£º²»Òªº¬ÓÐÒ»¶Ñδע½âµôµÄ ... ÕâÖÖɾ½ÚºÅ£¬»òÊǸ÷ÐÐÐÐÊ×
   µÄÐкţº

        14:     #include <iostream.h>
        15:     class Foo { ... };  // ÏñÕâÑù¾ÍÊǺÜÌÖÈËÑáµÄ¶«Î÷£¡

   ½«ÄãµÄ³Ìʽ×éÖ¯³ÉÏßÐԽṹ£¬²»ÒªÈÃÎÒÃÇÔÙÇÐ¸î¡¢ÖÆÔìЩ±êÍ·µµ°¸¡£Çë×ÐϸÊäÈë
   ÄãµÄ³ÌʽÂ룭£­ÎÒÃÇͨ³£²»ÈÝÒ×ÅжϣºÄ³¸öµØ·½Ö»ÊÇÄãµÄ´ò×Ö´íÎó£¬ÒÖ»òËüÕæµÄ
   ¾ÍÊÇÄãµÄÎÊÌâËùÔÚ¡£¾¡Á¿¸ÄÓñ༭Æ÷µÄ¡¸¼ôÌù¡¹»ò¡¸²åÈëµµ°¸¡¹¹¦ÄÜ¡£

4. ÁгöÄãÓõıàÒëÆ÷¡¢±àÒëÆ÷°æ±¾£¬ÒÔ¼°ÄãʹÓõÄϵͳ¡£ÎÒÖªµÀÎÒ¸Õ¸Õ˵¹ý£ºÌض¨
   ÏµÍ³µÄÎÊÌâÒªÈ¥ÌØ¶¨µÄÐÅÇø·¢ÎÊ£¬µ«ºÍ±àÒëÆ÷ÓйصÄ×ÊѶ£¬³£³£¶ÔÕì²éÎÊÌâÓаï
   Öú£¨¡¸à¸£¬ÎҼǵà Acme 1.2 ÔÚÕâ·½ÃæÓкܶà벡¡¹£©£¬ÕâҲ˳±ãÌáÐÑÁËÄÇЩ±à
   ÒëÆ÷µÄÓû§£ºÐ¡ÐÄÄÇЩ벡¡£

5. °Ñ±àÒëÆ÷¡¢Á¬½áÆ÷µÄÑ¡Ïîд³öÀ´£¬ÒÔ¼°ÄãÓÃÀ´½¨³ÌʽËùÓõijÌʽ¿â¡£

6. °Ñ´íÎóѶϢºÍºÎ´¦·¢Éú´íÎóµÄ×ÊÁÏд³öÀ´¡£ÏñÊÇ¡¸ÐéÄ⺯Êý²»ÄÜÓÃÁË¡¹²¢Ã»¸æËß
   ÎÒÃÇÕâÊǸö±àÒëʱ¶Î¡¢Á¬½áʱ¶Î»¹ÊÇÖ´ÐÐÆÚµÄÎÊÌâ¡£Èç¹ûÕâÎÊÌâÊÇÖ´ÐÐÆÚ·¢ÉúµÄ
   £¬Çë°ÑËüµÄÐÐΪ£¬ºÍÈκÎÏà¹ØµÄϵͳÉ趨×ÊѶÁгöÀ´¡£

7. ÔÚÇ©ÃûµµÖÐÁгöÕæµÄÄÜÓÃµÄ e-mail µØÖ·¡£Èç¹ûÄãÐżþµÄ "From:" Ò»À¸ÓдíµÄ»°
   £¬Çë֪ͨÄãµÄϵͳ¹ÜÀíÕß¡£ÔÚËüÐÞ¸´Ç°£¬ì¶ÄãµÄÐżþ±êÍ·ÖмÓÈë "Reply-To:" Ò»
   À¸£¬ÌîÉÏÄãÕýÈ·µÄ e-mail µØÖ·¡£

8. Çë¶Á¶ÁÕâ·Ý FAQ µÄÆäËû²¿·Ý£­£­¿ÉÄÜÄãµÄÎÊÌ⣬»òÊǺÜÏà¹ØµÄÎÊÌâ¾ÍÔÚÕâ¶ù¡£

   Ð»Ð»Äú£¬²¢Ï£ÍûÒÔÉϵĽ¨ÒéÄÜЭÖúÄúÕÒµ½ÎÊÌâµÄ½â´ð¡£


===================================

¡ö¡õ µÚ£³½Ú£ºÖÜÔâµÄ¡¢¹ÜÀíÉϵÄÊÂÏî
===================================

Q3£ºÊ²÷áÊÇ OOP£¿Ê²÷áÊÇ C++£¿

Îï¼þµ¼Ïò£¨OO£©³Ìʽ¼¼Êõ£¬ÊÇÎÒÃÇËùÖª·¢Õ¹´óÐͶø¸´ÔÓµÄÈíÌåϵͳ×îºÃµÄ·½·¨¡£

C++ ÊǸöÎï¼þµ¼ÏòµÄ³ÌʽÓïÑÔ¡£C++ ¿Éµ±³ÉÒ»¸öÎï¼þµ¼Ïò³ÌʽÓïÑÔ£¨OOPL£©£¬Òà¿ÉÖ»
µ±³ÉÒ»¸ö¡°¸üºÃµÄ C ÓïÑÔ¡±À´Ê¹Óᣲ»¹ý£¬ÈôÄãÖ»°ÑËüµ±³É¡°¸üºÃµÄ C¡±£¬Äã¾ÍÎÞ
·¨»ñµÃÎï¼þµ¼Ïò³ÌʽÉè¼ÆµÄºÃ´¦¡£

ÌáÒ»Ôò OO µÄ¹ã¸æ´Ê£ºÈíÌ幤ҵ¿ÌÕýÎÞ·¨Ó¦¸¶´óÐͶø¸´ÔÓµÄÈíÌåϵͳÐèÇó¡£µ«ÕâÕýÊÇ
ÕØÒòì¶ÎÒÃǵġ¸³É¹û¡¹£ºÎÒÃǹýÈ¥µÄ³É¹¦´Ùʹ´ó¼ÒÒªÇóµÃ¸ü¶à£¬²»ÐÒµÄÊÇ£¬Õâ·ÝÊг¡
µÄ¿ÊÇóÈ´ÊÇ¡¸½á¹¹»¯¡¹·ÖÎö£¨analysis£©¡¢Éè¼Æ£¨design£©ºÍ³ÌʽÉè¼ÆËùÎÞ·¨Âú×ãµÄ
¡£Òò´Ë£¬ÎÒÃDzŵ÷¢Õ¹Ò»¸ö¸üºÃµÄµä¡õ£¨paradigm£©¡£

========================================

Q4£ºC++ µÄÓŵãÊÇʲ÷᣿

¡¸C++ µÄ³É³¤¡¹£ºC++ Êǵ½Ä¿Ç°ÎªÖ¹×îÊÜ»¶Ó­µÄÓïÑÔ¡£Ã¿ 7.5µ½ 9¸öÔ C++µÄʹÓÃÕß
¶¼»á¼Ó±¶¡£¡¸¶® C++¡¹ÊǸöºÜºÃµÄÇóÖ°×ʸñ£¨µ«Äã±ØÐë°ÑËüµ±³É OOPL£¬¶ø²»Ö»ÊÇÒ»
¸ö¸üºÃµÄ C À´ÓòÅÐУ©¡£

¡¸·â×°ÐÔ encapsulation¡¹£º½åÓÉÒþ²ØÄÚ²¿µÄ×ÊÁϽṹ£¬ÈÃÎÒÃÇ¿ÉÒԸıäϵͳµÄij²¿
·Ý£¬¶ø²»±Ø¸ü¶¯ÆäËû²¿·Ý¡£ÎÒÃÇΪÈíÌåÔª¼þ£¨³ÆÖ®Îª class£¬Àà±ð£©Ìṩһ¸ö°²È«µÄ
½éÃæ£¬Óû§Ö»ÅöµÃµ½Õâ¸ö½éÃæ¶øÒÑ£»¶øÏà¶ÔÆðÀ´±È½ÏÈÝÒױ䶯µÄ½éÃæ¡¸Êµ×÷¡¹²¿·Ý£¬
¾Í±»·â×°ÆðÀ´£¨¾ÍÏñ±»°üÔÚ½ºÄÒÀ£¬ÒÔ±ÜÃâÓû§¹ýì¶ÒÀÀµËûһʱµÄʵ×÷¾ö¶¨¡£ÔÚ±È
½Ï¼òµ¥µÄ C ÀïÍ·£¬¿ÉÓÉÄ£×éÄڵľ²Ì¬£¨static£©×ÊÁÏÀ´°ìµ½£¬ÒÔ±ÜÃâÆäËûÄ£×é´æÈ¡
µ½Ëü¡£

¡¸¶àÖØ°¸Àý multiple instances¡¹£ºµäÐ굀 C ÓïÑÔ¡¸·â×°¡¹·½·¨£¨¸Õ²ÅÓÐÌᣩ£¬×ö
²»µ½¶àÖØµÄ×ÊÁϰ¸Àý£¨ÎÒÃǺÜÄÑÌæÄ£×éµÄ "static" ×ÊÁÏ×ö³ö¶àÖØ°¸Àý£©¡£Èç¹ûÔÚ C
ÖÐÒª×öµ½µÄ»°£¬ÎÒÃǵÃʹÓà "struct" ½á¹¹£¨µ«ÊÇËüûÓС¸·â×°ÐÔ¡¹£©¡£ÔÚ C++À
ÎÒÃÇ¿ÉÓà "class"£¨Îï¼þÀà±ð£©À´×öµ½¶àÖØ°¸ÀýÓë·â×°ÐÔ£º"public"¹«¹²²¿·Ý°üº¬ÁË
ËüµÄ½éÃæ£¨Í¨³£ÕâÀï»áÓиöÌØ±ðµÄº¯Êý£º³ÉÔ±º¯Êý£©£¬"private" ˽Óв¿·Ý°üº¬ÁËËü
µÄʵ×÷ϸ½Ú£¨Í¨³£Õâ¶ù¾ÍÊÇÄÚ²¿×ÊÁϽṹµÄËùÔÚ£©¡£

¡¸ÐÐÄÚº¯Êýºô½Ð¡¹£ºÔÚ C ÖУ¬¿ÉÒÔÔÚ struct Àï·Å¸ö "void*"£¨¸Ã´æÈ¡º¯Êý [access
functions] »áÓõ½Ö¸±êתÐÍ£©À´´ïµ½¡¸·â×°µÄ structs¡¹¡£ÕâÑù»áɥʧÐͱð°²È«ÐÔ
£¬¶øÇÒ»áÔì³É¹ý¶àµÄº¯Êýºô½Ð£¬¼´Ê¹ÄãÖ»´æÈ¡½á¹¹ÄÚµÄССÀ¸Î»£¨¼ÙÈçÄãÔÊÐíÖ±½Ó´æ
È¡½á¹¹ÄÚÀ¸Î»µÄ»°£¬ËüÄÚ²¿µÄ×ÊÁϽṹ¾ÍºÜÄÑÔÙ±ä¸üÁË£¬ÒòΪÄãµÄ³ÌʽÓÐÌ«¶àµØ·½¡°
ÒÀÀµ¡±ËüÒÔǰµÄÑù×Ó£©¡£º¯Êýºô½ÐµÄ¶îÍ⸺µ£²»´ó£¬µ«ÊÇ»áÀÛ»ýÆðÀ´¡£C++ µÄÀà±ðÔÊ
Ðíº¯Êý×÷ "inline" ÐÐÄÚÀ©Õ¹£¬¾ÍÓÐÒÔϺô¦£º¡õ·â×°µÄ°²È«ÐÔ£¬¡õ¶àÖØ°¸ÀýµÄ·½±ã
ÐÔ£¬¡õÖ±½Ó´æÈ¡µÄËÙ¶È¡£¶øÇÒ£¬±àÒëÆ÷Ò²»á¼ì²éÐÐÄÚº¯ÊýµÄ²ÎÊý£¬Õâ¾Í±È C µÄ
#define ¾Þ¼¯¸üºÃÁË¡£

¡¸¶àÔØÔËËã×Ó¡¹£ºC++ ÄܶÔÎï¼þÀà±ðµÄÔËËã×Ó¼ÓÒÔ¶àÔØ£¨overload£©£¬ÒԺϺõÎÒÃǵÄ
Ö±¾õ£¨Æ©È磬"myString + yourString" ¿É×ö×Ö´®´®½Ó£¬"myDate++"¿ÉÓÃÀ´µÝÔöÈÕÆÚ
£¬"z1 * z2" ¿É½«Á½¸´Êý z1 ¼° z2 Ïà³Ë£¬"a" ¿ÉÓÃÀ´´æÈ¡ "a" Õâ¸öÁ¬½á´®ÁеÄ
µÚ i ¸öÔªËØ¡­¡­µÈµÈ£©¡£ÄãÉõÖÁ¿ÉÒÔ×ö³ö¸ö¡°´ÏÃ÷µÄÖ¸±ê¡±(smart pointer)£¬ÒÔÖ¸
Ïò´Åµú»òÆäËûµØ·½È¥£¨"x = *p" ¿É dereference [½â²ÎÓÃ] Ö¸±ê£¬Ò²¾Í¿ÉÒÔÔڴŵú
ÖÐÕÒµ½ p Ëù¡°Ö¸µ½¡±µÄµØ·½£¬²¢´«»ØÆäÖµ£©¡£Õâ¿ÉÈÃʹÓÃÕßÒÔÇнü¸ÃÎÊÌâµÄ·½Ê½À´
д³Ìʽ£¬¶ø·ÇÒÔ»úÆ÷µÄÓïÑÔÀ´½âÌâ¡£

  ¡¾Òë×¢¡¿STL (Standard Template Library) ¾Í´óÁ¿ÀûÓõ½¡¸´ÏÃ÷µÄÖ¸±ê¡¹¹¦ÄÜ¡£

¡¸¼Ì³ÐÐÔ inheritance¡¹£ºÎÒÃÇ»¹Ö»ÊÇÔÚ±í²ã¶øÒÑ£¬ÊÂʵÉÏ£¬ÎÒÃÇ»¹Ã»½øÈ롸Îï¼þµ¼
Ïò¡¹µÄ²¿·ÝÄØ£¡¼ÙÉèÄãÓиö Stack ¶ÑµþÐÍ̬£¬ÓÐ push¡¢pop ÔËËã¡£ÈôÄ㻹ÏëÒª¸ö
InvertableStack ÐÍ̬£¬Ëü¡°ºÜÏñ¡±Stack£¬Ö»ÊÇËü»¹Óиö "invert" ÔËËã¡£ÒÔ C µÄ
·½Ê½£¬Äã²»ÊǵáõÐÞ¸ÄÏÖ´æµÄ StackÄ£×飨Èç¹ûËüÔÚÆäËûµØ·½Ò²Óõ½µÄ»°£¬¾ÍÂé·³ÁË
£©£¬¾ÍÊǵáõ°Ñ Stack¿½±´µ½ÁíÒ»¸öµµ°¸£¬ÔÙ¼ÓÒÔÐÞ¸ÄÖ®£¨Õâ»áµ¼Ö¹ý¶àÖØ¸´µÄ³Ìʽ
Âë¡¢ÈÝÒ×ÆÆ»µµ½ InvertableStack ÀïijЩԴ×Ô Stack µÄСµØ·½£¬ÓÈÓÐÉõÕߣ¬µÃά»¤
Ë«±¶µÄ³ÌʽÂ룩¡£C++ÌṩÁ˸üǬ¾»µÄ½â¾ö·¨£º¼Ì³Ð¡£Äã¿ÉÒÔ˵£º¡¸InvertableStack
¼Ì³ÐÁË StackµÄÒ»ÇУ¬ÇÒ InvertableStackÓÖÌí¼ÓÁË invert ÔËËã¡£¡¹ÕâÑù×ӾͺÃÁË
£¡Stack±¾ÉíÈÔÈ»ÊÇ·â±ÕµÄ£¨Î´±»¸ü¶¯µ½£©£¬¶ø InvertableStackÒ²Ã»ÖØ¸´ push/pop
µÈµÄ³ÌʽÂë¡£

¡¸¶àÐÍ¡¹Ó롸¶¯Ì¬Ïµ½á¡¹£ºOOP ÕæÕýµÄÁ¦Á¿²»½öÊǼ̳ÐÐÔ£¬»¹ÓÐ°Ñ InvertableStack
µ±³ÉÊÇÒ»¸ö StackÀ´´«µÝµÄÄÜÁ¦¡£ÕâÊǰ²È«µÄ£¬ÒòΪ£¨ÖÁÉÙÔÚ C++À´ËÄË¡¸ÊÇÒ»¸ö
¡­¡­¡¹µÄ¹ØÏµ£¨"is-a" relation£©£¬Í¸¹ý¹«¹²¼Ì³Ð´ïµ½µÄ£¨Ò༴£ºInvertableStack
¡°ÊÇÒ»¸ö¡±Stack£¬ÇÒËü»¹ÄÜ×ÔÎÒ invert ·´×ª£©¡£¶àÐÍ£¨polymorphism£©Ó붯̬ϵ
½á£¨dynamic binding£©×îÈÝÒ×´ÓʵÀýÀ´Àí½âÁË£¬ËùÒÔÎÒÌá¸öµäÐ͵ÄÀý×Ó£º»æÍ¼ÈíÌå
µÃ´¦ÀíÔ²ÐΡ¢·½ÐΡ¢¾ØÐΡ¢¶à±ßÐμ°Ö±Ïߣ¬ÕâЩ¶¼ÊÇ¡¸ÐÎ×´ shape¡¹¡£´ó²¿·Ý»æÍ¼Èí
ÌåµÄÄÚ²¿º¯Êý¶¼ÐèÒª¸ö¡°ÐÎ×´¡±µÄ²ÎÊý£¨Ïà¶Ôì¶Ä³Ð©ÏñÊÇ¡°·½ÐΡ±ÕâÖÖÌØ¶¨µÄÐÎ×´£©
£¬Æ©È磺µ±ÎÒÃÇÓû¬Êóѡȡij¸öͼÐΣ¬Ëü¾Í¿ÉÄܱ»ÍÏÒ··Åµ½Ó©Ä»Ä³´¦¡£¶àÐͺͶ¯Ì¬Ïµ
½áÈóÌʽÄÜÕýÈ·ÔË×÷£¬¼´Ê¹±àÒëÆ÷Ö»ÖªµÀ¸Ã²ÎÊýÊǸö¡¸ÐÎ×´¡¹£¬¶ø²»ÖªËüµ½µ×ÊÇʲ÷á
ÐÎ×´¡£ÎÒÃÇÔÙ¼ÙÉè¸Õ²ÅÌáµ½µÄ "pick_and_drag(Shape*)" º¯Êýì¶ÐÇÆÚ¶þ±àÒëºÃÁË£¬
µ½ÁËÐÇÆÚÈý£¬Äã´òËãÔÙ¼Ó¸öÁù±ßÐΡ£ÌýÆðÀ´ºÜÆæ¹Ö£¬µ« pick_and_drag() ÈÔÈ»Äܹ»
´¦ÀíÕâ¸öÁù±ßÐΣ¬¼´Ê¹µ± pick_and_drag() ±àÒëʱÁù±ßÐλ¹²»´æÔÚ£¡£¨ÈôÄãÃ÷ÁË
C++ ÊÇÔõ÷á×öµÄ£¬Ëü¾ÍÔÙÒ²²»¾ªÒìÁË£­£­µ«ËüÈÔÈ»ÊǺܷ½±ãµÄ£¡£©

========================================

Q5£ºË­ÔÚÓà C++£¿

ºÜ¶àºÜ¶àµÄ¹«Ë¾¼°Õþ¸®²¿ÃÅ¡£Ï൱µÄ¶à¡£

ͳ¼ÆÉÏÀ´¿´£ºµ±ÄãÕýÔÚ¶ÁÕâ·Ý FAQÎÄ×Öʱ£¬¾ÍÓÐ 5 ¸öÈËÕý³ÉΪ C++µÄ³ÌʽԱ¡£

========================================

Q6£ºÓÐÈκΠC++ ±ê×¼»¯·½°¸ÔÚ½øÐÐÂð£¿

Óеģ»ANSI£¨ÃÀ¹úµÄ£©ºÍ ISO£¨¹ú¼ÊµÄ£©×éÖ¯ÕýÃÜÇкÏ×÷¡£ANSI-C++ ίԱ»á³ÆÎª
"X3J16" £¬¶ø ISO C++ ±ê×¼ÍÅÌå³ÆÎª "WG21"¡£ANSI/ISO C++ µÄ±ê×¼¹ý³ÌÖаüº¬ÁË
ÕâЩÈË£º

AT&T, IBM, DEC, HP, Sun, MS, Borland, Zortech, Apple, OSF µÈµÈµÈµÈ¡£Ã¿´Î¿ª
»áÔ¼ÓÐ 70 ÈË£¬ËûÃÇÀ´×ÔÃÀ¡¢Ó¢¡¢ÈÕ¡¢µÂ¡¢Èðµä¡¢µ¤Âó¡¢·¨¹ú¡­¡­£¨ËûÃǶ¼ÓС¸ÇøÓò
ÐÔ¡¹µÄίԱ»á£¬ÅÉDzÕýʽ´ú±í²¢Ö÷µ¼¡¸ÇøÓòÐÔ¡¹µÄ»áÒ飩¡£

========================================

Q7£º¸Ãµ½ÄÄÀïË÷È¡×îÐ嵀 ANSI-C++ ±ê×¼²Ý°¸£¿

ISO Committee Draft for C++ ÒÔ¼° ANSI C++ Draft£¨½«Òª¹© public review µÄÎÄ
¼þ£©¿ÉÈç´ËÈ¡µÃ£º
        http://www.cygnus.com/~mrs/wp-draft

ÄãÒ²¿ÉÒÔÄõ½ Postscript ºÍ Adobe Acrobat µÄ°æ±¾£º
        ftp://research.att.com/dist/stdc++/WP

Ò²ÄÜÄõ½ HTML ºÍ ASCII µÄ°æ±¾£º
        ftp://ftp.cygnus.com/pub/g++

Ò²ÄÜÄõ½ÊéÃæ°æ±¾£º
        X3 Secretariat
        1250 Eye Street NW
        Suite 200
        Washington, DC  20005
        202-626-5738

ÄãÒ²¿ÉÒÔÓà email£º

        lbarra@itic.nw.dc.us (Lynn Barra)

×¢Ã÷ÒªË÷È¡×îÐ嵀 "Draft Proposed American National Standard for Information
Systems -- Programming Language C++"£¬Îļþ±àºÅ CD14882¡£Ëüͨ³£ÊÇÓã²ÈÕÆÚµÄ
FedEx£¨ÃÀ¹ú¾³ÄÚ£©À´µÝË͵ģ¬ËùÒԺܿì¾ÍÄÜÊÕµ½¡£

========================================

Q8£ºC++ ¶Ô ANSI-C »ØËÝÏàÈÝÂð£¿

¼¸ºõÊÇ¡£

C++ ¾¡¿ÉÄÜµØºÍ C ÏàÈÝ£¬µ«²»ÄܸüÏàÈÝÁË¡£ÊÂʵÉÏ£¬Ö÷ÒªµÄ²»Í¬ÔÚì¶ C++ ÒªÇóº¯Êý
Ô­ÐÍ£º"f()" Ðû¸æµÄÊÇÎÞ²ÎÊýµÄº¯Êý£¨ÔÚ C À"f()" ºÍ "f(...)" ÊÇÒ»ÑùµÄ£©¡£
»¹ÓÐЩϸ΢µÄ²î±ð£¬ÏñÔÚ C++ Àï sizeof('x') µÈÍ¬ì¶ sizeof(char)£¬µ«ÔÚ C ÀïÃæ

È´ÊǵÈÍ¬ì¶ sizeof(int)¡£ ¶øÇÒ£¬C++ Ö±½Ó¾Í°Ñ½á¹¹µÄ±êÇ©£¨tag£©µ±³ÉÊÇÐͱðµÄÃû
×Ö£¬µ« C ¾ÍÐèÒª¼Ó¸ö "struct" ×Ö£¨"typedef struct Fred Fred" ÕâÖÖ¼¼ÇÉÈÔÈ»ÄÜ
Ó㬵«ÔÚ C++ ÖÐÊÇÀÛ׸µÄ£©¡£

========================================

Q9£º¶à¾Ã²ÅÄÜѧ»á C++£¿

Ïñ Paradigm Shift ¹«Ë¾£¬³É¹¦µØ½ÌÊÚ¹ý±ê×¼µÄ¹¤Òµ½ç¡¸¶ÌÆÚ¿Î³Ì¡¹£¬½«´óѧһѧÆÚ
µÄ¿ÎѹËõµ½Ò»ÖÜ 40 Сʱ¡£È»¶øÕæÕýµÄ¾«Í¨µÃÓÉʵ¼Ê¾­Ñé¶øÀ´£ºÃ»Óж«Î÷ÄÜÈ¡´úʱ¼ä
¡£Ð趯ÊÖ×öµÄÖ¸¶¨×¨ÌâÊDZØÒªµÄ£¬ÒòΪËüÃÇÄܽ«ÄãµÄ¹ÛÄÄý¹Ì³ÉÐΡ¹¡£

´óÔ¼Òª 6-12 ¸öÔ²ÅÄÜÁ÷ÀûʹÓà C++/OOP£¬Èç¹ûÉí±ßÓиßÊֵϰ£¬·Ñʱ»á¶ÌЩ£»·´Ö®
ÈôûÓиö¡°ºÃµÄ¡±Í¨ÓÃÐÍ C++Îï¼þ³Ìʽ¿â£¬Ôò»áºÄʱ¸ü¾Ã¡£Ïë³ÉΪ¹ËÎʼ¶µÄ¸ßÊÖ£¬Ôò
Ô¼Ðè 3 Äê¡£

ÓÐЩÈËÈ´¸ù±¾°ì²»µ½¡£³ý·ÇÄãÊÇ¿ÉÔìÖ®²Ä£¬ÇÒÓÐÇ¿ÁҵĸöÈËÇý¶¯Á¦£¬·ñÔòÄãÒ²×ö²»µ½
¡£¡¸Èæ×ӿɽ̡¹×îÆðÂëµÄÒªÇóÊÇ£ºÄã±ØÐëÄÜ¡¸¾õ½ñÊǶø×ò·Ç¡¹¡£¡¸Çý¶¯Á¦¡¹×îÆðÂëµÄ
ÒªÇóÊÇ£ºÄãÔ¸Òâ¶àͶÈëʱ¼ä¾«Á¦£¨¸Ä±ä˼¿¼µÄ·½Ê½¡²µä¡õ×ªÒÆ paradigm shift¡³Òª
Ô¶±ÈѧЩÐµĶ«Î÷À´µÃÀ§ÄÑ£©¡£


=========================
¡ö¡õ µÚ£´½Ú£ºC++ µÄ»ù´¡
=========================

Q10£ºÊ²÷áÊÇÀà±ð£¨class£©£¿

Îï¼þµ¼ÏòϵͳµÄ»ùʯ¡£

Àà±ðÊÇÓÃÀ´¶¨Òå×ÊÁÏÐÍ̬£¨data type£©µÄ£¬¾ÍÏñ C µÄ struct Ò»Ñù¡£
ÒÔ×ÊѶ¿ÆÑ§ÊõÓïÀ´Ëµ£¬Ò»¸öÐÍ̬°üº¬ÁËÒ»×é״̬£¨state£©£¬ÒÔ¼°ÔÚ״̬֮¼ä×ªÒÆµÄ
¶¯×÷ÐÐΪ£¨operation£©¡£Òò´Ë "int" ÊǸö¡¸ÐÍ̬¡¹£¬ÒòΪËüÓÐÒ»×é״̬£¬»¹ÓÐÖîÈç
¡¸¼ÓÁ½¸öÕûÊý¡¹¡¢¡¸ÕûÊýÏà³Ë¡¹µÈµÈµÄÔË×÷ÐÐΪ¡£Í¬ÑùµÄ£¬¡¸Àà±ð¡¹Ìṩһ×飨ͨ³£
Êǹ«¹²µÄ£©ÔËË㣬¼°Ò»×飨ͨ³£ÊǷǹ«¹²µÄ£©×ÊÁÏÀ¸Î»£¬ÒÔ´ú±í¸ÃÐÍ̬µÄ°¸ÀýËùÓµÓÐ
µÄ³éÏóÖµ¡£ÒÔ C µÄ½Ç¶ÈÀ´¿´£¬Àà±ð¾ÍÊÇÆä³ÉÔ±£¨members£©½ÔÔ¤ÉèΪ "private" µÄ
struct¡£

°Ñ "int" Ïë³ÉÊǸöÀà±ð£¬ËüÓµÓÐ "operator++" µÈµÈµÄÔË×÷ÐÐΪ£¨method£©¡£

========================================

Q11£ºÊ²÷áÊÇÎï¼þ£¨object£©£¿

Ò»¿é¸³ÓÐijÖÖÓïÒâµÄ´¢´æ¿Õ¼ä¡£

ÔÚÐû¸æ "int i;" Ö®áᣬÎÒÃdzơ¸i ÊǸö int ÐÍ̬µÄÎï¼þ¡¹¡£ÔÚ C++/OOP À¡¸Îï
¼þ¡¹Í¨³£ÒâÖ¸¡¸Àà±ðµÄ°¸Àý£¨an instance of a class£©¡¹£¬Òò´ËÀà±ð¶¨ÒåÁËÊý¸öÎï
¼þ£¨°¸Àý£©µÄÐÐΪ¡£

========================================

Q12£ºÊ²÷áÊDzο¼£¨reference£©£¿

Ò»¸öÎï¼þµÄ¡°±ðÃû¡±£¨alias£¬ÁíÒ»¸öÃû³Æ£©¡£

²Î¿¼Í¨³£ÓÃì¶´«Ö·ºô½Ð£¨pass-by-reference£©£º

        void swap(int& i, int& j)
        {
          int tmp = i;
          i = j;
          j = tmp;
        }

        main()
        {
          int x, y;
          //...
          swap(x,y);
        }


ÔÚÕâÀï "i" ºÍ "j" ·Ö±ðÊÇÊÇ main º¯ÊýÖÐ "x" Óë "y" µÄ±ðÃû£¬»»¾ä»°Ëµ£¬"i" ¾Í
ÊÇ "x"£­£­²»ÊǸöÖ¸Ïò "x" µÄÖ¸±ê£¬Ò²²»ÊÇ "x" ¸ÃÖµµÄ¸´ÖÆÆ·£¬¶øËüµÄµÄÈ·È·¾ÍÊÇ
"x" ±¾Éí¡£Äã¶Ô "i" ×öµÄÈκζ¯×÷£¬¶¼»á·´Ó³µ½ "x" ÉÏ£»·´Ö®ÒàÈ»¡£

´Ó×îµ×²ãÀ´¿´£¬²Î¿¼×î³£ÓÃÖ¸±êÀ´Êµ×÷£¬ËüµÄЧ¹ûÓеãÏñ C ÀïÍ·µÄ¡¸´«Ö¸±êºô½Ð¡¹
£¨pass-by-pointer£©£¬µ« "&" ȡַÔËËã×ÓÓɺô½ÐÕß»»µ½±»ºô½ÐÕßÖ®´¦ÁË£¬ÄãҲҪɾ
È¥ËùÓÐµÄ "*" ÔËËã×Ó¡£

========================================

Q13£ºÈç¹ûÉ趨ijֵ¸ø²Î¿¼»áÔõ÷áÑù£¿

»á¸ü¶¯µ½±»²Î¿¼Õߣ¨referrent£¬¸Ã¡¸²Î¿¼¡¹Ëù²Î¿¼µ½µÄÎï¼þ£©¡£

¼Çס£º¡¸²Î¿¼¡¹¾ÍÊÇ¡¸±»²Î¿¼Õß¡¹£¬Òò´Ë¶¯Á˲ο¼¾Í»á¸Ä¶¯µ½±»²Î¿¼Õߣ¨¡¸²Î¿¼¡¹ÊÇ
¡¸±»²Î¿¼Õß¡¹µÄ×óÖµ "Lvalue"¡²³öÏÖÔÚÉ趨³ÂÊöµÄ×ó±ß¡³£©¡£

¸ü½øÒ»²½£¬ÎÒÃÇÒ²ÔÊÐí²Î¿¼±»´«»Ø¡£ÕâÑù×Óº¯Êýºô½Ð¾Í¿É·ÅÔÚÉ趨³ÂÊöµÄ×ó±ß£¬Õâ¶Ô

ÔËËã×Ó¶àÔØµÄ³¡ºÏºÜÓÐÓá£

========================================

Q14£ºÔõÑù²ÅÄܽ«²Î¿¼¸ÄÉè³É±ðµÄÎï¼þ£¿

ûÓа취¡£

ºÍÖ¸±ê²»Í¬£¬Ò»µ©²Î¿¼±»Ïµ½áµ½Ä³¸öÎï¼þ£¬Ëü¾Í²»ÄÜÔÙ±»¸ÄÉèµ½ÆäËûÎï¼þÈ¥¡£¡¸²Î¿¼
¡¹±¾Éí²»ÊÇÒ»¸öÎï¼þ£¨Ëü×Ô¼ºÃ»ÓÐλַ£»¡¸È¡²Î¿¼µÄλַ¡¹Ö»»áµÃµ½±»²Î¿¼ÕßµÄλַ
£»Çмǣº¡¸²Î¿¼¡¹¾ÍÊÇ¡¸±»²Î¿¼Õß¡¹£©¡£

½«¡¸²Î¿¼¡¹Ó롸±»²Î¿¼Õß¡¹·ÖÀ뿪À´ÊDz»¿ÉÄܵġ£

========================================

Q15£ººÎʱ¸ÃÓòο¼£¬ºÎʱÓÖ¸ÃÓÃÖ¸±ê£¿

¿ÉÒÔʱ£¬Óòο¼£»±ØÒªÊ±£¬¾ÍÓÃÖ¸±ê¡£

µ±Äã²»ÐèÒª¡°ÖØÉ衱Ëüʱ£¨¼ûǰһ¸öÎÊÌ⣩£¬²Î¿¼»á±ÈÖ¸±êºÃ¡£Õâͨ³£ÒâÎ¶Öø£ºÔÚÎï
¼þÀà±ðµÄ¹«¹²½éÃæÖвο¼×îÓÐÓᣲο¼´ó¶àÓÃì¶Îï¼þµÄ±í²ã£¬¶øÖ¸±êÔò¶àÓÃì¶Àï²ã¡£

µ«ÓÐÒ»¸öÀýÍ⣺µ±º¯Êý²ÎÊý»ò´«»ØÖµÐèÒªÒ»¸ö¡¸Áٽ硹£¨sentinel£©µÄ²Î¿¼ÖµÊ±£¬×î
ºÃÊÇÓÃÖ¸±êÀ´×ö£¬ÒÔ NULL Ö¸±ê×öΪһ¸öÌØ±ðÖµ£¨¡¸²Î¿¼¡¹Ó¦¸ÃÊǸöʵÖÊÎï¼þµÄ¡¸±ð
Ãû¡¹£¬¶ø²»ÊǸö½â²ÎÓõġ²dereferenced¡³NULL Ö¸±ê£©¡£

×¢Ò⣺ÀÏ×ʸñµÄ C ³ÌʽԱ²»Ï²»¶²Î¿¼£¬ÒòΪÔÚ¸¸³ÌʽµÄµØ·½£¬¡¸²Î¿¼¡¹µÄÓïÒâ²¢²»
ÊÇÄÇ÷áÃ÷ÏÔ¡£È»¶øÓÐÁËЩ C++¾­Ñéáᣬ»á·¢ÏÖÕâÕýÊÇÒ»ÖÖ¡¸×ÊѶÒþ²Ø¡¹µÄ×÷·¨£¬ÊÇÀû
¶ø·Ç±×¡£ºÃ±È˵£¬³ÌʽԱӦ¸ÃÒÔÇнü¸ÃÎÊÌâµÄ·½Ê½À´Ð´³Ìʽ£¬¶ø·ÇÒÔ»úÆ÷µÄÓïÑÔÀ´½â
Ìâ¡£

========================================

Q16£ºÐÐÄÚº¯ÊýÊÇ×öʲ÷áµÄ£¿

ÐÐÄÚº¯Êý£¨inline function£©ÊǸö³ÌʽÂë»áÈûÈëºô½ÐÕßËùÔÚÖ®´¦µÄº¯Êý¡£¾ÍÏñ¾Þ¼¯
Ò»Ñù£¬ÐÐÄÚº¯ÊýÃâ³ýÁ˺¯Êýºô½ÐµÄ¶îÍ⸺µ££¬ÒÔÔö½øÐ§ÂÊ£¬²¢ÇÒ£¨ÓÈÆäÊÇ£¡£©»¹ÄÜÈÃ
±àÒëÆ÷¶ÔËüÊ©ÒÔ×î¼Ñ»¯£¨³ÌÐòÈÚºÏ "procedural integration"£©¡£²»¹ýºÍ¾Þ¼¯²»Í¬
µÄÊÇ£ºËüÖ»»á¶ÔËùÓÐÒýÊýÇóÒ»´ÎµÄÖµ£¨ÔÚÓïÒâÉÏ£¬¸Ã¡°º¯Êýºô½Ð¡±ºÍÕý³£º¯ÊýÒ»Ñù£¬
Ö»ÊDZȽϿìËÙ°ÕÁË£©£¬ÒÔ±ÜÃâijЩ²»Òײì¾õµÄ¾Þ¼¯´íÎó¡£´ËÍ⣬Ëü»¹»á¼ì²âÒýÊýµÄÐÍ
̬£¬×ö±ØÒªµÄÐͱðת»»£¨¾Þ¼¯¶ÔÄãÓк¦£»³ý·Ç¾ø¶Ô±ØÒª£¬·ñÔò±ðÔÙÓÃËüÁË£©¡£

×¢Ò⣺¹ý¶ÈʹÓÃÐÐÄÚº¯Êý»áÈóÌʽÂë·ÊÅÖ£¬ì¶·ÖÒ³£¨paging£©»·¾³Ï·´¶øÓиºÃæµÄÐÔ
ÄÜÓ°Ïì¡£

Ðû¸æ·¨£ºÔÚº¯Êý¶¨Ò崦ʹÓà "inline" ¹Ø¼ü×Ö£º

        inline void f(int i, char c) { /*...*/ }

»òÕßÊÇÔÚÀà±ðÄÚ½«¶¨Òå°üÀ¨½øÈ¥£º

        class Fred {
        public:
          void f(int i, char c) { /*...*/ }
        };

»òÊÇÔÚÀà±ðÍâÍ·£¬ÒÔ "inline" À´¶¨Òå¸Ã³ÉÔ±º¯Êý£º

        class Fred {
        public:
          void f(int i, char c);
        };

        inline void Fred::f(int i, char c) { /*...*/ }


=============================
¡ö¡õ µÚ£µ½Ú£º½¨¹¹×Ӻͽ⹹×Ó
=============================

Q17£º½¨¹¹×Ó£¨constructor£©ÊÇ×öʲ÷áµÄ£¿

½¨¹¹×ÓÄËÓÃÀ´´ÓÁ㿪ʼ½¨Á¢Îï¼þ¡£

½¨¹¹×Ó¾ÍÏñ¸ö¡¸³õʼ»¯º¯Êý¡¹£»Ëü°ÑÒ»¶ÑÉ¢ÂÒµÄλԪ×é³ÉÒ»¸ö»îÉúÉúµÄÎï¼þ¡£×îµÍÏÞ
¶ÈËü»á³õʼ»¯ÄÚ²¿Óõ½µÄÀ¸Î»£¬Ò²¿ÉÄÜ»áÅäÖÃËùÐëµÄ×ÊÔ´£¨¼ÇÒäÌå¡¢µµ°¸¡¢semaphore
¡¢socket µÈµÈ£©¡£

"ctor" Êǽ¨¹¹×Ó constructor ×î³£¼ûµÄËõд¡£

========================================

Q18£ºÔõÑù²ÅÄÜÈý¨¹¹×Óºô½ÐÁíÒ»¸öͬ´¦Ò»ÊҵĽ¨¹¹×Ó£¿


ûÓа취¡£

Ô­ÒòÊÇ£ºÈç¹ûÄãºô½ÐÁíÒ»¸ö½¨¹¹×Ó£¬±àÒëÆ÷»á³õʼ»¯Ò»¸öÔÝʱµÄÇøÓòÐÔÎï¼þ£»µ«²¢Ã»
Óгõʼ»¯¡°Õâ¸ö¡±ÄãÏëÒªµÄÎï¼þ¡£Äã¿ÉÒÔÓÃÔ¤Éè²ÎÊý£¨default parameter£©£¬½«Á½
¸ö½¨¹¹×Ӻϲ¢ÆðÀ´£¬»òÊÇÔÚ˽ÓÐµÄ "init()" ³ÉÔ±º¯ÊýÖй²ÏíËüÃǵijÌʽÂë¡£

========================================

Q19£º½â¹¹×Ó£¨destructor£©ÊÇ×öʲ÷áµÄ£¿

½â¹¹×ÓÄËÎï¼þÖ®ÔáÀñ¡£

½â¹¹×ÓÊÇÓÃÀ´ÊͷŸÃÎï¼þËùÅäÖõ½µÄ×ÊÔ´£¬Æ©È磺Lock Àà±ð¿ÉÄÜ»áËø×¡Ò»¸ö
semaphore£¬½â¹¹×ÓÔòÓÃÀ´ÊÍ·ÅËü¡£×î³£¼ûµÄÀý×ÓÊÇ£ºµ±½¨¹¹×ÓÓÃÁË "new" ÒÔáᣬ½â
¹¹×ÓÓÃ "delete"¡£

½â¹¹×ÓÊǸö¡¸È¥ËÀ°É¡¹µÄÔË×÷ÐÐΪ£¨method£©£¬Í¨³£ËõдΪ "dtor"¡£


=========================
¡ö¡õ µÚ£¶½Ú£ºÔËËã×Ó¶àÔØ
=========================

Q20£ºÔËËã×Ó¶àÔØ£¨operator overloading£©ÊÇ×öʲ÷áµÄ£¿

Ëü¿ÉÈÃʹÓÃÀà±ðµÄÈËÒÔÖ±¾õÀ´²Ù×÷Ö®¡£

ÔËËã×Ó¶àÔØÈà C/C++ µÄÔËËã×Ó£¬ÄܶÔ×Ô¶©µÄÐÍ̬£¨Îï¼þÀà±ð£©¸³Óè×Ô¶©µÄÒâÒå¡£Ëü
ÃÇÐÎͬÊǺ¯Êýºô½ÐµÄÓï·¨ÌÇÒ (syntactic sugar)£º

        class Fred {
        public:
          //...
        };

        #if 0
          Fred add(Fred, Fred);         //ûÓÐÔËËã×Ó¶àÔØ
          Fred mul(Fred, Fred);
        #else
          Fred operator+(Fred, Fred);   //ÓÐÔËËã×Ó¶àÔØ
          Fred operator*(Fred, Fred);
        #endif

        Fred f(Fred a, Fred b, Fred c)
        {
          #if 0
            return add(add(mul(a,b), mul(b,c)), mul(c,a));  //ûÓÐ...
          #else
            return a*b + b*c + c*a;                         //ÓÐ...
          #endif
        }

========================================


Q21£ºÄÄЩÔËËã×Ó¿ÉÒÔ£¯²»Äܱ»¶àÔØ£¿

´ó²¿·Ý¶¼¿ÉÒÔ±»¶àÔØ¡£
²»ÄÜµÄ C ÔËËã×ÓÓÐ "." ºÍ "?:"£¨ºÍÒÔ¼¼ÊõÉÏÀ´Ëµ£¬¿ÉËãÊÇÔËËã× "sizeof"£©¡£
C++ Ôö¼ÓÁËЩ×Ô¼ºµÄÔËËã×Ó£¬ÆäÖгýÁË "::" ºÍ ".*". Ö®Íâ¶¼¿ÉÒÔ±»¶àÔØ¡£

µ×ÏÂÊǸö×ã±ê£¨subscript£©ÔËËã×ÓµÄÀý×Ó£¨Ëü»á´«»ØÒ»¸ö²Î¿¼£©¡£×îÇ°ÃæÊÇ¡°²»ÓÃ
¡±¶àÔØµÄ£º

        class Array {
        public:
          #if 0
            int& elem(unsigned i) { if (i>99) error(); return data; }
          #else
            int& operator[] (unsigned i) { if (i>99) error(); return data;
}
          #endif
        private:
          int data[100];
        };

        main()

        {
          Array a;

          #if 0
            a.elem(10) = 42;
            a.elem(12) += a.elem(13);
          #else
            a[10] = 42;
            a[12] += a[13];
          #endif
        }

========================================

Q22£ºÔõÑù×öÒ»¸ö "**"¡¸´Î·½¡¹ÔËËã×Ó£¿

Î޽⡣

ÔËËã×ÓµÄÃû³Æ¡¢ÓÅÏÈÐò¡¢½áºÏÂÉÒÔ¼°ÔªÊý£¨arity£©¶¼±»ÓïÑÔËù¶¨ËÀÁË¡£C++ ÀïûÓÐ
"**" ÔËËã×Ó£¬ËùÒÔÄãÎÞ·¨ÌæÀà±ð¶©×öÒ»¸öËü¡£

»¹»³Òɵϰ£¬¿¼ÂÇ¿´¿´ "x ** y" ºÍ "x * (*y)"£¬ÕâÁ½ÕßÊÇÍêȫһÑùµÄ£¨»»¾ä»°Ëµ
£¬±àÒëÆ÷»á¼ÙÉè "y" ÊǸöÖ¸±ê£©¡£´ËÍ⣬ÔËËã×Ó¶àÔØÖ»ÊǺ¯Êýºô½ÐµÄÓï·¨ÌÇÒ¶øÒÑ
£¬ËäÈ»ÌðÌðµÄ£¬µ«±¾ÖÊÉϲ¢Î´Ôö¼Óʲ÷á¶«Î÷¡£ÎÒ½¨ÒéÄã¶àÔØ "pow(base,exponent)"
Õâ¸öº¯Êý£¨ËüµÄ±¶¾«È·¶È°æ±¾ÔÚ <math.h> ÖУ©¡£

¸½´øÒ»Ì᣺operator^ ¿ÉÒÔÓ㬵«ËüµÄÓÅÏÈÐò¼°½áºÏÂɲ»·û¡¸´Î·½¡¹ËùÐè¡£


===================
¡ö¡õ µÚ£·½Ú£ºâ·°é
===================

Q23£ºâ·°é£¨friend£©ÊÇʲ÷᣿

ÈñðµÄÀà±ð»òº¯ÊýÄÜ´æÈ¡µ½ÄãµÄÀà±ðÄÚ²¿µÄ¶«Î÷¡£

â·°é¿ÉÒÔÊǺ¯Êý»òÆäËûÀà±ð¡£Àà±ð»á¶ÔËüµÄⷰ鿪·Å´æÈ¡È¨ÏÞ¡£Õý³£Çé¿öÏ£¬³ÌʽԱ
»áÏÂÒâʶ¡¢¼¼ÊõÐԵؿØÖƸÃÀà±ðµÄâ·°éÓëÔË×÷ÐÐΪ£¨·ñÔòµ±ÄãÏë¸ü¶¯Àà±ðʱ£¬»¹µÃÏÈ
ÓÐÆäËû²¿·ÝµÄÓµÓÐÕß֮ͬÒâ²ÅÐУ©¡£

========================================

Q24£º¡¸â·°é¡¹Î¥·´ÁË·â×°ÐÔÂð£¿

ÈôÉÆÓÃÖ®£¬·´¶ø»á¡¸Ç¿»¯¡¹·â×°ÐÔ¡£

ÎÒÃǾ­³£µÃ½«Ò»¸öÀà±ðÇгÉÁ½°ë£¬µ±ÕâÁ½°ë¸÷Óв»Í¬µÄ°¸Àý¸öÊý¼°ÉúÃüÆÚʱ¡£ÔÚ´ËÇé
ÐÎ֮ϣ¬ËüÃÇͨ³£ÐèÒªÖ±½Ó´æÈ¡¶Ô·½µÄÄÚ²¿£¨ÕâÁ½°ë¡°±¾À´¡±ÊÇÔÚͬһ¸öÀà±ðÀïÃæ£¬
ËùÒÔÄ㲢δ¡°Ôö¼Ó¡±´æÈ¡×ÊÁϽṹµÄÔË×÷ÐÐΪ¸öÊý£»ÄãÖ»ÊÇÔÚ¡°°á¶¯¡±ÕâЩÔË×÷ÐÐΪ
ËùÔÚÖ®´¦¶øÒÑ£©¡£×ȫµÄʵ×÷·½Ê½£¬¾ÍÊÇÈÃÕâÁ½°ë»¥Îª±Ë´ËµÄ¡¸â·°é¡¹¡£

ÈôÄãÈçÉÏÊö°ãµÄʹÓÃⷰ飬ÄãÒÀÈ»Êǽ«Ë½ÓеĶ«Î÷±£³ÖÔÚ˽ÓеÄ״̬¡£Óöµ½ÉÏÊöµÄÇé
¿ö£¬Èç¹û»¹´ô´ôµÄÏë±ÜÃâʹÓÃâ·°é¹ØÏµ£¬Ðí¶àÈ˲»ÊDzÉÓù«¹²×ÊÁÏ£¨Ôã͸ÁË£¡£©£¬¾Í
ÊÇŪ¸ö¹«¹²µÄ get/set ´æÈ¡ÔË×÷ÐÐΪÀ´´æÈ¡±Ë´ËµÄ×ÊÁÏ£¬ÊÂʵÉÏÕâЩ¶¼ÆÆ»µÁË·â×°
ÐÔ¡£Ö»ÓÐÔÚÀà±ðµÄÍâÃæ¸Ã˽ÓÐ×ÊÁÏ¡¸ÈÔÓÐÆäÒâÒ塹£¨ÒÔʹÓÃÕߵĽǶÈÀ´¿´£©Ê±£¬¿ª·Å
³ö˽ÓÐ×ÊÁϵĴæÈ¡ÔË×÷ÐÐΪ²Å³ÆµÃÉÏÊÇÇ¡µ±µÄ×ö·¨¡£¶àÊýÇé¿öÏ£¬¡¸´æÈ¡ÔË×÷ÐÐΪ¡¹
¾ÍºÍ¡¸¹«¹²×ÊÁÏ¡¹Ò»ÑùÔã¸â£ºËüÃǶÔ˽ÓÐ×ÊÁϳÉÔ±Ö»ÒþÆä¡°Ãû¡±¶øÒÑ£¬È´Î´Òþ²ØÆä¡°
´æÔÚ¡±¡£


ͬÑùµÄ£¬Èç¹û½«¡¸â·°éº¯Êý¡¹×öΪÁíÒ»ÖÖÀà±ð¹«¹²´æÈ¡º¯ÊýµÄÓï·¨£¬ÄǾͺÍÎ¥·´·â×°
ÐԵijÉÔ±º¯ÊýÒ»ÑùÆÆ»µÁË·â×°¡£»»¾ä»°Ëµ£¬Îï¼þÀà±ðµÄâ·°é¼°³ÉÔ±¶¼ÊÇ¡¸·â×°µÄ½çÏß
¡¹£¬Èçͬ¡¸Àà±ð¶¨Ò塹±¾ÉíÒ»Ñù¡£

========================================

Q25£ºâ·°éº¯ÊýµÄÓÅȱµã£¿

ËüÌṩÁËijÖÖ½éÃæÉè¼ÆÉϵÄ×ÔÓÉ¡£

³ÉÔ±º¯ÊýºÍⷰ麯Êý¶¼ÓÐͬµÈµÄ´æÈ¡ÌØÈ¨£¨100% µÄȨÀû£©£¬Ö÷ÒªµÄ²î±ðÔÚì¶£ºâ·°é
º¯ÊýÓÃÆðÀ´ÏñÊÇ "f(x)"£¬¶ø³ÉÔ±º¯ÊýÔòÊÇ "x.f()"¡£Òò´Ë£¬â·°éº¯Êý¿ÉÈÃÎï¼þÀà±ð
Éè¼ÆÕßÌôÑ¡Ëû¿´µÃ×î˳ÑÛµÄÓï·¨£¬ÒÔ½µµÍά»¤³É±¾¡£

ⷰ麯ÊýÖ÷ÒªµÄȱµãÔÚì¶£ºµ±ÄãÏë×ö¶¯Ì¬Ïµ½á£¨dynamic binding£©Ê±£¬ËüÐèÒª¶îÍâ
µÄ³ÌʽÂë¡£Ïë×ö³ö¡¸ÐéÄâⷰ项µÄЧ¹û£¬¸Ãⷰ麯ÊýÓ¦¸Ãºô½Ð¸öÒþ²ØµÄ£¨Í¨³£ÊÇ·ÅÔÚ
"protected:" ÀÐéÄâ³ÉÔ±º¯Êý£»ÏñÕâ¸öÑù×Ó£º"void f(Base& b) { b.do_f(); }"
¡£ÑÜÉúÀà±ð»á¸²¸Ç£¨override£©µôÄǸöÒþ²ØµÄ³ÉÔ±º¯Êý£¨"void Derived::do_f()"£©
£¬¶ø²»ÊǸÃⷰ麯Êý¡£

========================================

Q26£º¡¸â·°é¹ØÏµÎ޼̳м°µÝÒÆÐÔ¡¹ÊÇʲ÷áÒâ˼£¿

â·°é¹ØÏµµÄÌØÈ¨ÐÔÎÞ·¨±»¼Ì³ÐÏÂÀ´£ºâ·°éµÄÑÜÉúÀà±ð²»±ØÈ»»¹ÊÇⷰ飨ÎÒ°ÑÄãµ±ÅóÓÑ
£¬µ«Õâ²»´ú±íÎÒÒ²Ò»¶¨»áÐÅÈÎÄãµÄº¢×Ó£©¡£Èç¹û "Base" Àà±ðÐû¸æÁË "f()" ΪËüµÄ
ⷰ飬"f()" ²¢²»»á×Ô¶¯¶ÔÓÉ "Base" ÑÜÉú³öÀ´µÄ "Derived" Àà±ðËù¶à³öÀ´µÄ²¿·Ý
ÓµÓÐÌØÊâµÄ´æÈ¡È¨Á¦¡£

â·°é¹ØÏµµÄÌØÈ¨ÎÞµÝÒÆÐÔ£ºâ·°éÀà±ðµÄâ·°é²»±ØÈ»»¹ÊÇÔ­Àà±ðµÄⷰ飨ÅóÓѵÄÅóÓѲ»
Ò»¶¨Ò²ÊÇÅóÓÑ£©¡£Æ©È磬Èç¹û "Fred" Àà±ðÐû¸æÁË "Wilma" Àà±ðΪËüµÄⷰ飬¶øÇÒ
"Wilma" Àà±ðÐû¸æÁË "f()" ΪËüµÄⷰ飬Ôò "f()" ²»¼ûµÃ¶Ô "Fred" ÓÐÌØÊâµÄ´æÈ¡
ȨÁ¦¡£

========================================

Q27£ºÓ¦¸ÃÌæÀà±ðÐû¸æ¸ö³ÉÔ±º¯Êý£¬»¹ÊÇⷰ麯Êý£¿

¿ÉÄܵϰ£¬ÓóÉÔ±º¯Êý£»±ØÒªÊ±£¬¾ÍÓÃâ·°é¡£

ÓÐʱÔÚÓï·¨ÉÏÀ´¿´£¬â·°é±È½ÏºÃ£¨Æ©È磺ÔÚ "Fred" Àà±ðÖУ¬â·°éº¯Êý¿É°Ñ "Fred"
Ū³ÉÊǵڶþ¸ö²ÎÊý£¬µ«ÔÚ³ÉÔ±º¯ÊýÖÐÔòÒ»¶¨µÃ·ÅÔÚµÚÒ»¸ö£©¡£ÁíÒ»¸öºÃÀý×ÓÊÇ£º¶þÔª
ÖÐÐòʽËãÊýÔËËã×Ó£¨Æ©È磺"aComplex + aComplex" ¿ÉÄÜÓ¦¸Ã¶¨Òå³Éâ·°é¶ø·Ç³ÉÔ±º¯
Êý£¬ÒòΪÄãÏëÈà "aFloat + aComplex" ÕâÖÖд·¨Ò²ÄܳÉÁ¢£»»ØÏëһϣº³ÉÔ±º¯ÊýÎÞ
·¨ÌáÉýËü×ó²àµÄ²ÎÊý£¬ÒòΪÄÇÑù»á°ÑÒý·¢¸Ã³ÉÔ±º¯ÊýµÄÎï¼þËùÊôÖ®Àà±ð¸ø¸Ä±äµô£©¡£

ÔÚÆäËûÇé¿öÏ£¬ÇëÑ¡³ÉÔ±º¯Êý¶ø²»ÒªÓÃⷰ麯Êý¡£


====================================================
¡ö¡õ µÚ£¸½Ú£ºÊäÈ룯Êä³ö£º<iostream.h> ºÍ <stdio.h>
====================================================

Q28£º¸ÃÔõÑùÌæ "class Fred" ÌṩÊä³ö¹¦ÄÜ£¿

ÓÃⷰ麯Êý operator<<£º

        class Fred {
        public:
          friend ostream& operator<< (ostream& o, const Fred& fred)
            { return o << fred.i; }
          //...
        private:
          int i;    //ֻΪÁË˵Ã÷Æð¼û¶øÉèµÄ
        };

ÎÒÃÇÓÃâ·°é¶ø²»ÓóÉÔ±º¯Êý£¬ÒòΪ "Fred" Êǵڶþ¸ö²ÎÊý¶ø·ÇµÚÒ»¸ö¡£ÊäÈëµÄ¹¦ÄÜÒà
ÀàËÆ£¬Ö»ÊÇÒª¸Äд³É£º

        istream& operator>> (istream& i, Fred& fred);
                                      // ^^^^^------- ²»ÊÇ "const Fred&
fred"!

========================================

Q29£ºÎªÊ²÷áÎÒ¸ÃÓà <iostream.h> ¶ø²»ÊÇÒÔǰµÄ <stdio.h>£¿

Ôö¼ÓÐͱð°²È«¡¢¼õÉÙ´íÎó¡¢Ôö½øÐ§ÂÊ¡¢ÓÐÑÓÕ¹ÐÔ¡¢ÌṩÑÜÉúÄÜÁ¦¡£

Printf »¹ºÃ£¬¶ø scanf ³ýÁËÈÝÒ×д´íÖ®ÍâÒ²»¹Ëã¿ÉÒÔ£¬È»¶øºÍ C++ µÄ I/O ϵͳÏà
±È£¬ËüÃǶ¼ÓÐÆäÏÞÖÆ¡£C++ µÄ I/O£¨Óà "<<" ¼° ">>" £©£¬ºÍ C£¨ "printf()" ºÍ
"scanf()" £©Ïà±È£º

* Ðͱð°²È«£­£­Òª×ö I/O µÄÎï¼þ£¬±àÒëÆ÷»á¾²Ì¬µØÊÂÏȵÃÖªÆäÐͱ𣬶ø²»ÊǶ¯Ì¬µØ
   ÓÉ "%" Ò»À¸²éÖª¡£

* ²»Ò׳ö´í£­£­ÈßâŵÄ×ÊѶ»áÔö¼Ó´íÎóµÄ»ú»á¡£C++ µÄ I/O ¾Í²»ÐèÒª¶àâÅµÄ "%"¡£

* ¸ü¿ìËÙ£­£­printf ÊǸöСÐÍÓïÑԵġ¸½âÒëÆ÷¡¹£¬¸ÃÓïÑÔÖ÷ÒªÊÇÓÉ "%" ÕâÖÖ¶«Î÷
   ¹¹³ÉµÄ£»ÔÚÖ´ÐÐÆÚËüÓÃÕâЩÀ¸Î»À´Ñ¡ÔñÕýÈ·µÄ¸ñʽ»¯·½Ê½¡£C++ µÄ I/O ϵͳÔòÊÇ
   ¾²Ì¬µÄÒÀ¸÷ÒýÊýÕæÕýµÄÐͱðÀ´ÌôÑ¡¸±³Ìʽ£¬ÒÔÔö½øÖ´ÐÐЧÂÊ¡£

* ÑÓÕ¹ÐÔ£­£­C++ I/O »úÖÆ¿ÉÔÚ²»¸Ä¶¯Ô­ÓгÌʽÂëµÄÇé¿öÏ£¬¾Í¼Ó½øÊ¹ÓÃÕßÐÂÉè¼Æ
   µÄÐÍ̬£¨ÄÜÏëÏñÈç¹û´ó¼Òͬʱ°Ñ»¥²»ÏàÈÝµÄ "%" À¸Î»ÈûÈë printf ºÍ scanf£¬»á
   ÊÇÔõÑùµÄ»ìÂÒ³¡Ãæ?!£©¡£

* ¿ÉÑÜÉú£¨subclassable£©£­£­ostream ºÍ istream£¨C++ µÄ FILE* ´úÌæÆ·£©¶¼ÊÇ
   ÕæÕýµÄÀà±ð£¬Òò´Ë¿ÉÒÔ±»ÑÜÉúÏÂÈ¥¡£ÕâÒâÎ¶Öø£ºÄã¿ÉÒÔÈÃÆäËû×Ô¶¨µÄ¶«Î÷ÓÐÖøºÍ
   stream À×ͬµÄÍâ±íÓëÐÐΪ£¬µ«Êµ¼ÊÉÏ×öµÄÈ´ÊÇÄãÏë×öµÄÌØ¶¨ÊÂÇé¡£Äã×Ô¶¯¾ÍÖØÓÃ
   ÁËÊýÒÔÍò¼Æ±ðÈË£¨ÄãÉõÖÁ²»ÈÏʶËüÃÇ£©Ð´ºÃµÄ I/O ³ÌʽÂ룬¶øËûÃÇÒ²²»ÐèÒªÖªµÀ
   ÄãËù×öµÄ¡¸ÑÓÉì stream¡¹Àà±ð¡£

========================================

Q30£ºÎªÊ²÷áÎÒ´¦ÀíÊäÈëʱ£¬»á³¬¹ýµµ°¸µÄ½áβ£¿

ÒòΪ eof£¨µµ°¸½á⣩µÄ״̬£¬Êǵ½¡¸½«Òª³¬¹ýµµ°¸½áβµÄ¶¯×÷¡¹²Å»á±»É趨¡£Ò²¾Í
ÊÇ˵£¬¶Áµµ°¸µÄ×îááÒ»¸öλԪ×é²¢²»»áÉ趨 eof µÄ״̬¡£

¡¾Òë×¢¡¿ÕâÒ²ÊÇ C ³£¼ûµÄ´íÎó¡£

Èç¹ûÄãµÄ³ÌʽÏñÕâÑù£º

        int i = 0;
        while (! cin.eof())  {
          cin >> x;
          ++i;
          // work with x
        }

ÄãµÄ i ±äÊý¾Í»á¶àÁËÒ»¡£
ÄãÕæÕý¸Ã×öµÄÊÇÕâÑù£º

        int i;
        while (cin >> x)  {
          ++i;
          // work with x
        }

========================================

Q31£ºÎªÊ²÷áÎҵijÌʽִÐÐÍêµÚÒ»´Î»ØÈ¦áᣬ»á¶ÔÊäÈëµÄÒªÇó²»¼ÓÀí²Ç£¿

ÒòΪ¶ÁÈ¡ÊýÖµµÄ³Ìʽ£¬°Ñ·ÇÊý×ÖµÄ×ÖÔªÁôÔÚÊäÈ뻺³åÇø (input buffer) ÀïÍ·ÁË¡£

¡¾Òë×¢¡¿ÕâÒ²ÊÇ C£¬ÉõÖÁ Pascal ³£¼ûµÄ´íÎó¡£

Èç¹ûÄãµÄ³ÌʽÈçÏ£º


        char name[1000];
        int age;

        for (;;) {
          cout << "Name: ";
          cin >> name;

          cout << "Age: ";
          cin >> age;
        }

ÄãÓ¦¸ÃÕâÑùд£º

        for (;;) {
          cout << "Name: ";
          cin >> name;
          cout << "Age: ";
          cin >> age;
          cin.ignore(INT_MAX, '\n');

        }

========================================

Q32£ºÔÚ DOS ¼° OS/2 µÄ binary ģʽÏ£¬ÒªÔõÑùÀ´ "reopen" cin ¼° cout£¿

ÓÐÕâ¸öÎÊÌ⣬×îµäÐ͵ÄÇé¿ö¾ÍÊÇ£ºÓÐÈËÏë¶Ô cin¡¢cout ×ö binary µÄ I/O£¬µ«ÊÇ×÷
ҵϵͳ£¨ÏñÊÇ DOS »ò OS/2£©È´×ÜÊÇ»á×ö CR-LF µÄת»»¶¯×÷¡£

½â¾ö·¨£ºcin¡¢cout¡¢cerr ÕâЩÊÂÏȶ¨ÒåºÃµÄ´®Á÷£¬¶¼ÊÇ text µÄ´®Á÷£¬Ã»Óбê×¼×ö
·¨ÄܰÑËüÃÇŪ³É binary ģʽ¡£°Ñ´®Á÷¹ØµôÔÙÉè·¨ÒÔ binary ģʽ reopen ËüÃÇ£¬¿É
ÄܻᵼÖ²»¿ÉÔ¤ÆÚµÄ½á¹û¡£

ÔÚÕâÁ½ÖÖģʽÓв»Í¬ÐÐΪµÄϵͳÉÏ£¬Ò»¶¨Óа취ÈÃËüÃDZä³É binary ´®Á÷£¬µ«ÊÇÄãµÃ
È¥²é²é¸ÃϵͳµÄÎļþ¡£

--
Marshall Cline
--
Marshall P. Cline, Ph.D. / Paradigm Shift Inc / PO Box 5108 / Potsdam NY
13676
cline@sun.soe.clarkson.edu / 315-353-6100 / FAX: 315-353-6110


¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡
¡¡¡¡Î´Íê´ýÐø
http://www.telreading.com°¡ÌìÌì¼û

TOP

C++ÓïÑÔ³£¼ûÎÊÌâ½â´ð£¨¶þ£©

£½£½ £Ð£á£ò£ô £²£¯£´  £½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½£½  comp.lang.c++ Frequently Asked Questions list (with answers, fortunately). Copyright (C) 1991-96 Marshall P. Cline, Ph.D. Posting 2 of 4. Posting #1 explains copying permissions, (no)warranty, table-of-contents, etc  ============================= ¡ö¡õ µÚ£¹½Ú£º×ÔÓɼÇÒäÌå¹ÜÀí =============================  Q33£º"delete p" »áɾȥ "p" Ö¸±ê£¬»¹ÊÇËüÖ¸µ½µÄ×ÊÁÏ£¬"*p" £¿  ¸ÃÖ¸±êÖ¸µ½µÄ×ÊÁÏ¡£  "delete" ÕæÕýµÄÒâ˼ÊÇ£º¡¸É¾È¥Ö¸±êËùÖ¸µ½µÄ¶«Î÷¡¹£¨delete the thing pointed to by£©¡£Í¬ÑùµÄÓ¢ÎÄÎóÓÃÒ²·¢ÉúÔÚ C ÓïÑԵġ¸¡ºÊÍ·Å¡»Ö¸±êËùÖ¸ÏòµÄ¼ÇÒäÌ塹ÉÏ £¨"free(p)" ÕæÕýµÄÒâ˼ÊÇ£º"free_the_stuff_pointed_to_by(p)" £©¡£  ========================================  Q34£ºÎÒÄÜ "free()" µôÓÉ "new" ÅäÖõ½µÄ¡¢"delete" µôÓÉ "malloc()" ÅäÖõ½µÄ      ¼ÇÒäÌåÂ𣿠 ²»ÐС£  ÔÚͬһ¸ö³ÌʽÀʹÓà malloc/free ¼° new/delete ÊÇÍêÈ«ºÏ·¨¡¢ºÏÀí¡¢°²È«µÄ£» µ« free µôÓÉ new ÅäÖõ½µÄ£¬»ò delete µôÓÉ malloc ÅäÖõ½µÄÖ¸±êÔòÊDz»ºÏ·¨¡¢ ²»ºÏÀí¡¢¸Ã±»Í´ÂîÒ»¶ÙµÄ¡£  ========================================  Q35£ºÎªÊ²÷á¸ÃÓà "new" ¶ø²»ÊÇÀÏ×ÖºÅµÄ malloc() £¿  ½¨¹¹×Ó£¯½â¹¹×Ó¡¢Ðͱð°²È«ÐÔ¡¢¿É±»¸²¸Ç£¨overridability£©¡£  ½¨¹¹×Ó£¯½â¹¹×Ó£ººÍ "malloc(sizeof(Fred))" ²»Í¬£¬"new Fred()" »¹»áÈ¥ºô½Ð Fred µÄ½¨¹¹×Ó¡£Í¬Àí£¬"delete p" »áÈ¥ºô½Ð "*p" µÄ½â¹¹×Ó¡£  Ðͱð°²È«ÐÔ£ºmalloc() »á´«»ØÒ»¸ö²»¾ßÐͱð°²È«µÄ "void*"£¬¶ø "new Fred()" Ôò »á´«»ØÕýÈ·ÐÍ̬µÄÖ¸±ê£¨Ò»¸ö "Fred*"£©¡£  ¿É±»¸²¸Ç£º"new" ÊǸö¿É±»Îï¼þÀà±ð¸²¸ÇµÄÔËËã×Ó£¬¶ø "malloc" ²»ÊÇÒÔ¡¸¸÷¸öÀà±ð ¡¹×÷Ϊ¸²¸ÇµÄ»ù×¼¡£  ========================================  Q36£ºÎªÊ²÷á C++ ²»Ìæ "new" ¼° "delete" ´îÅä¸ö "realloc()" £¿  ±ÜÃâÄã²úÉúÒâÍâ¡£  µ± realloc() Òª¿½±´ÅäÖÃÇøÊ±£¬Ëü×öµÄÊÇ¡¸ÖðλԪ bitwise¡¹µÄ¿½±´£¬Õâ»áŪ»µ´ó ²¿·ÝµÄ C++ Îï¼þ¡£²»¹ý C++ µÄÎï¼þÓ¦¸ÃÒªÄÜ×ÔÎÒ¿½±´²Å¶Ô£ºÓÃËüÃÇ×Ô¼ºµÄ¿½±´½¨¹¹ ×Ó»òÉ趨ÔËËã×Ó¡£  ========================================  Q37£ºÎÒ¸ÃÔõÑùÅäÖã¯ÊÍ·ÅÕóÁУ¿  Óà new[] ºÍ delete[] £º          Fred* p = new Fred[100];         //...         delete [] p;  Ã¿µ±ÄãÔÚ "new" ÔËËãʽÖÐÓÃÁË "[...]"£¬Äã¾Í±ØÐëÔÚ "delete" ³ÂÊöÖÐʹÓà "[]"¡£                                          ^^^^ ÕâÓï·¨ÊDZØÒªµÄ£¬ÒòΪ¡¸Ö¸Ïòµ¥Ò»ÔªËصÄÖ¸±ê¡¹Ó롸ָÏòÒ»¸öÕóÁеÄÖ¸±ê¡¹ÔÚÓï·¨ÉÏ ²¢ÎÞ·¨Çø·Ö¿ªÀ´¡£  ========================================  Q38£ºÍòÒ»ÎÒÍüÁ˽« "[]" ÓÃÔÚ "delete" ÓÉ "new Fred[n]" ÅäÖõ½µÄÕóÁУ¬»á·¢Éú      Ê²÷áÊ£¿  ÔÖÄÑ¡£  ÕâÊdzÌʽÕߵģ­£­¶ø²»ÊDZàÒëÆ÷µÄ£­£­ÔðÈΣ¬È¥È·±£ new[] Óë delete[] µÄÕýÈ·Åä ¶Ô¡£ÈôÄãŪ´íÁË£¬±àÒëÆ÷²»»á²úÉúÈκαàÒëÆÚ»òÖ´ÐÐÆÚµÄ´íÎóѶϢ¡£¶Ñ»ý£¨heap£©±» ÆÆ»µÊÇ×î¿ÉÄܵĽá¾Ö£¬»òÊǸüÔãµÄ£¬ÄãµÄ³Ìʽ»áµ±µô¡£  ========================================  Q39£º³ÉÔ±º¯Êý×ö "delete this" µÄ¶¯×÷ÊǺϷ¨µÄ£¨²¢ÇÒÊǺõģ©Â𣿠 Ö»ÒªÄãСÐĵϰ¾ÍûÊ¡£  ÎÒËùνµÄ¡¸Ð¡ÐÄ¡¹ÊÇ£º    1) ÄãµÃ 100% È·¶¨ "this" ÊÇÓÉ "new" ÅäÖÃÀ´µÄ£¨¶ø·Ç "new[]"£¬Òà·Ç×Ô¶©µÄ      "new" °æ±¾£¬Ò»¶¨ÒªÊÇ×îԭʼµÄ "new"£©¡£    2) ÄãµÃ 100% È·¶¨¸Ã³ÉÔ±º¯ÊýÊÇ´ËÎï¼þ×îááÒ»¸ö»áºô½Ðµ½µÄ¡£    3) ×öÍê×ÔɱµÄ¶¯×÷ ("delete this;") áᣬÄã²»ÄÜÔÙÈ¥Åö "this" µÄÎï¼þÁË£¬°ü      À¨×ÊÁϼ°ÔË×÷ÐÐΪÔÚÄÚ¡£    4) ×öÍê×ÔɱµÄ¶¯×÷ ("delete this;") áᣬÄã²»ÄÜÔÙÈ¥Åö "this" Ö¸±êÁË¡£      »»¾ä»°Ëµ£¬Äã²»Äܲ鿴Ëü¡¢½«ËüÓëÆäËûÖ¸±ê»òÊÇ NULL Ïà±È½Ï¡¢Ó¡³öÆäÖµ¡¢      ¶ÔËüתÐÍ¡¢¶ÔËü×öÈκÎÊÂÇé¡£  ºÜ×ÔÈ»µÄ£¬ÕâÏ¸æÒ²ÊÊÓÃì¶£ºµ± "this" ÊǸöÖ¸Ïò»ùµ×Àà±ðµÄÖ¸±ê£¬¶ø½â¹¹×Ó²»ÊÇ virtual µÄ³¡ºÏ¡£  ========================================  Q40£ºÎÒ¸ÃÔõ÷áÓà new À´ÅäÖöàάÕóÁУ¿  Óкܶ෽·¨£¬¶ËÊÓÄã¶ÔÕóÁдóСµÄÉìËõÐÔÖ®ÒªÇó¶ø¶¨¡£¼«¶ËÒ»µãµÄÇéÐΣ¬Èç¹ûÄãÔÚ±à ÒëÆÚ¾ÍÖªµÀËùÓÐÕóÁеÄά¶È£¬Äã¿ÉÒÔ¾²Ì¬µØÅäÖ㨾ÍÏñ C Ò»Ñù£©£º          class Fred { /*...*/ };          void manipulateArray()         {           Fred matrix[10][20];            //ʹÓà matrix[j]...            //²»ÐëÌØµØÈ¥ÊͷŸÃÕóÁР        }  ÁíÒ»¸ö¼«¶ËÇé¿ö£¬Èç¹ûÄãÏ£Íû¸Ã¾ØÕóµÄÿ¸öС¿é¶¼Äܲ»Ò»Ñù´ó£¬Äã¿ÉÒÔÔÚ×ÔÓɼÇÒäÌå ÀïÅäÖÃÖ®£º          void manipulateArray(unsigned nrows, unsigned ncols[])         //'nrows' ÊǸÃÕóÁÐÖ®ÁÐÊý¡£         //ËùÒԺϷ¨µÄÁÐÊýΪ (0, nrows-1) ¿ªÇø¼ä¡£         //'ncols[r]' ÔòÊÇ 'r' ÁеÄÐÐÊý ('r' ÖµÓòΪ [0..nrows-1])¡£         {           Fred** matrix = new Fred*[nrows];           for (unsigned r = 0; r < nrows; ++r)             matrix[r] = new Fred[ ncols[r] ];            //ʹÓà matrix[j]...            //ÊͷžÍÊÇÅäÖõķ´¶¯×÷£º           for (r = nrows; r > 0; --r)             delete [] matrix[r-1];           delete [] matrix;         }  ========================================  Q41£ºC++ Äܲ»ÄÜ×öµ½ÔÚÖ´ÐÐʱÆÚ²ÅÖ¸¶¨ÕóÁеij¤¶È£¿  ¿ÉÒÔ¡£STL ÓÐÒ»¸ö vector template ÌṩÕâÖÖÐÐΪ¡£Çë²Î¿¼¡°³Ìʽ¿â¡±Ò»½ÚµÄ STL ÏîÄ¿¡£  ²»ÐС£ÄÚ½¨µÄÕóÁÐÐÍ̬±ØÐëÔÚ±àÒëÆÚ¾ÍÖ¸¶¨ËüµÄ³¤¶ÈÁË¡£  ¿ÉÒÔ£¬ÄÚ½¨µÄÕóÁпÉÒÔÔÚÖ´ÐÐÆÚ²ÅÖ¸¶¨µÚÒ»¸öË÷ÒýµÄ¡õΧ¡£Æ©Èç˵£¬ºÍÉÏÒ»Ôò FAQ Ïà½Ï£¬Èç¹ûÄãÖ»ÐèÒªµÚÒ»¸öά¶È´óСÄܹ»±ä¶¯£¬Äã¿ÉÒÔ new Ò»¸öÕóÁеÄÕóÁУ¨¶ø²» ÊÇÕóÁÐÖ¸±êµÄÕóÁÐ "an array of pointers to arrays"£©£º          const unsigned ncols = 100;         //'ncols' ²»ÊÇÖ´ÐÐÆÚ²Å¾ö¶¨µÄ±äÊý (ÓÃÀ´´ú±íÕóÁеÄÐÐÊý)          class Fred { ... };          void manipulateArray(unsigned nrows)         //'nrows' ÊÇÖ´ÐÐÆÚ²Å¾ö¶¨µÄ±äÊý (ÓÃÀ´´ú±íÕóÁеÄÁÐÊý)         {           Fred (*matrix)[ncols] = new Fred[nrows][ncols];            //Óà matrix[j] À´´¦Àí            //deletion ÊÇÎï¼þÅäÖõÄÄæÔËË㣺           delete [] matrix;         }  Èç¹ûÄã²»¹âÊÇÐèÒªÔÚÖ´ÐÐÆÚ¸Ä±äÕóÁеĵÚÒ»¸öά¶ÈµÄ»°£¬¾Í²»ÄÜÕâÑù×öÁË¡£  ========================================  Q42£ºÔõÑùÈ·±£Ä³Àà±ðµÄÎï¼þ¶¼ÊÇÓà "new" ½¨Á¢µÄ£¬¶ø·ÇÇøÓò»òÕûÌ壯¾²Ì¬±äÊý£¿  È·¶¨¸ÃÀà±ðµÄ½¨¹¹×Ó¶¼ÊÇ "private:" µÄ£¬²¢¶¨Òå¸ö "friend" »ò "static" º¯Êý£¬ À´´«»ØÒ»¸öÖ¸ÏòÓÉ "new" ½¨Ôì³öÀ´µÄÎï¼þ£¨°Ñ½¨¹¹×ÓÉè³É "protected:"£¬Èç¹ûÄãÏë ÒªÓÐÑÜÉúÀà±ðµÄ»°£©¡£          class Fred {    //Ö»ÔÊÐí Fred ¶¯Ì¬µØÅäÖóöÀ´         public:           static Fred* create()                 { return new Fred();     }           static Fred* create(int i)            { return new Fred(i);    }           static Fred* create(const Fred& fred) { return new Fred(fred); }         private:           Fred();           Fred(int i);           Fred(const Fred& fred);           virtual ~Fred();         };          main()         {           Fred* p = Fred::create(5);           ...           delete p;         }   =============================== ¡ö¡õ µÚ£±£°½Ú£º³ý´íÓë´íÎó´¦Àí ===============================  Q43£ºÔõÑù´¦Àí½¨¹¹×ӵĴíÎ󣿠 ¶ª³öÒ»¸öÀýÍ⣨throw an exception£©¡£  ½¨¹¹×ÓûÓд«»ØÖµ£¬ËùÒÔ²»¿ÉÄܲÉÓÃËü´«»ØµÄ´íÎóÂë¡£Òò´Ë£¬Õì²â½¨¹¹×Ó´íÎó×îºÃµÄ ·½·¨£¬¾ÍÊǶª³öÒ»¸öÀýÍâ¡£  ÔÚ C++ ±àÒëÆ÷ÉÐδÌṩÀýÍâ´¦Àí֮ǰ£¬ÎÒÃÇ¿ÉÏȰÑÎï¼þÖÃì¶¡¸°ëÊ졹µÄ״̬£¨Æ©Èç £ºÉè¸öÄÚ²¿µÄ״̬λԪ£©£¬Óøö²éѯ×Ó£¨"inspector"£©À´¼ì²é¸ÃλԪ£¬¾Í¿ÉÈÃÓû§ ²é¿´¸ÃÎï¼þÊÇ·ñ»¹»îÖø¡£Ò²¿ÉÒÔÓÃÁíÒ»¸ö³ÉÔ±º¯ÊýÀ´¼ì²é¸ÃλԪ£¬Èô¸ÃÎï¼þû´æ»î ÏÂÀ´£¬¾Í×ö¸ö¡¸Ã»¶¯×÷¡¹£¨»òÊǸüºÝµÄÏñÊÇ "abort()" £©µÄ³Ìʽ¡£µ«ÕâʵÔںܳ󪡣  ========================================  Q44£ºÈç¹û½¨¹¹×ӻᶪ³öÀýÍâµÄ»°£¬¸ÃÔõ÷á´¦ÀíËüµÄ×ÊÔ´£¿  Îï¼þÀïÃæµÄÿ¸ö×ÊÁϳÉÔ±£¬¶¼¸Ã×Ô¼ºÊÕʰ²Ð¾Ö¡£  Èç¹û½¨¹¹×Ó¶ª³öÒ»¸öÀýÍâµÄ»°£¬¸ÃÎï¼þµÄ½â¹¹×Ӿ͡°²»»á¡±Ö´ÐС£Èç¹ûÄãµÄÎï¼þµÃ»Ø ¸´Ð©Ôø×ö¹ýµÄÊÂÇ飨ÏñÊÇÅäÖüÇÒäÌå¡¢¿ªÆôµµ°¸¡¢Ëø¶¨ semaphore£©£¬¸ÃÎï¼þÄÚµÄ×Ê ÁϳÉÔ±¾Í¡°±ØÐ롱¼ÇסÕâ¸ö¡¸±ØÐë»Ö¸´µÄ¶«Î÷¡¹¡£  ¾ÙÀýÀ´Ëµ£º²»Òªµ¥µ¥µÄ°ÑÅäÖõ½µÄ¼ÇÒäÌå·ÅÈë "Fred*" ×ÊÁϳÉÔ±£¬¶øÒª·ÅÈëÒ»¸ö¡¸ ´ÏÃ÷µÄÖ¸±ê¡¹(smart pointer) ×ÊÁϳÉÔ±ÖУ»µ±¸Ã¡°´ÏÃ÷Ö¸±ê¡±ËÀµôµÄ»°£¬ËüµÄ½â¹¹ ×Ӿͻáɾȥ Fred Îï¼þ¡£  ¡¾Òë×¢¡¿¡¸´ÏÃ÷µÄÖ¸±ê¡¹(smart pointer) ÔÚ Q4 ÖÐÓÐÌáµ½Ò»µã¡£   ============================= ¡ö¡õ µÚ£±£±½Ú£ºConst ÕýÈ·ÐÔ =============================  Q45£ºÊ²÷áÊÇ "const correctness"£¿  ºÃÎÊÌâ¡£  ¡¸³£ÊýÕýÈ·ÐÔ¡¹ÄËʹÓà "const" ¹Ø¼ü×Ö£¬ÒÔÈ·±£³£ÊýÎï¼þ²»»á±»¸ü¶¯µ½¡£Æ©È磺Èô "f()" º¯Êý½ÓÊÕÒ»¸ö "String"£¬ÇÒ "f()" ÏëÈ·±£ "String" ²»»á±»¸Ä±ä£¬Äã¿ÉÒÔ£º   * ´«Öµºô½Ð (pass by value):    void  f(      String  s   )  { /*...*/ }  * ͸¹ý³£Êý²Î¿¼ (reference):    void  f(const String& s   )  { /*...*/ }  * ͸¹ý³£ÊýÖ¸±ê (pointer)  :    void  f(const String* sptr)  { /*...*/ }  * µ«²»ÄÜÓ÷dz£Êý²Î¿¼      :    void  f(      String& s   )  { /*...*/ }  * Ò²²»ÄÜÓ÷dz£ÊýÖ¸±ê      :    void  f(      String* sptr)  { /*...*/ }  ÔÚ½ÓÊÕ "const String&" ²ÎÊýµÄº¯ÊýÀïÃæ£¬Ïë¸ü¶¯µ½ "s" µÄ»°£¬»á²úÉú¸ö±àÒëÆÚµÄ ´íÎó£»Ã»ÓÐÎþÉüÈκÎÖ´ÐÐÆÚµÄ¿Õ¼ä¼°ËÙ¶È¡£  Ðû¸æ "const" ²ÎÊýÒ²ÊÇÁíÒ»ÖÖÐͱð°²È«·½·¨£¬¾ÍÏñÒ»¸ö³£Êý×Ö´®£¬Ëü»á¡°É¥Ê§¡±¸÷ ÖÖ¿ÉÄÜ»á±ä¸üÆäÄÚÈݵÄÐÐΪ¶¯×÷¡£Èç¹ûÄã·¢ÏÖÐͱð°²È«ÐÔÖÊÈÃÄãµÄϵͳÕýÈ·µØÔË×÷ £¨ÕâÊÇÕæµÄ£»ÌرðÊÇ´óÐ͵Äϵͳ£©£¬Äã»á·¢ÏÖ¡¸³£ÊýÕýÈ·ÐÔ¡¹ÒàÈçÊÇ¡£  ========================================  Q46£ºÎÒ¸ÃÔçÒ»µã»¹ÊÇÍíÒ»µãÈö«Î÷Óг£ÊýÕýÈ·ÐÔ£¿  Ô½Ô½Ô½ÔçÔ½ºÃ¡£  ÑÓáá²¹ÒÔ³£ÊýÕýÈ·ÐÔ£¬»áµ¼ÖÂÑ©ÇòЧӦ£ºÃ¿´ÎÄãÔÚ¡¸Õâ¶ù¡¹ÓÃÁË "const"£¬Äã¾ÍµÃÔÚ ¡¸ÄǶù¡¹¼ÓÉÏËĸöÒÔÉ쵀 "const"¡£  ========================================  Q47£ºÊ²÷áÊÇ¡¸const ³ÉÔ±º¯Êý¡¹£¿  Ò»¸öÖ»¼ì²â£¨¶ø²»¸ü¶¯£©ÆäÎï¼þµÄ³ÉÔ±º¯Êý¡£          class Fred {         public:           void f() const;         };      // ^^^^^--- °µÊ¾Ëµ "fred.f()" ²»»á¸Ä±äµ½ "fred"  ´ËÄËÒâÖ¸£º¡¸³éÏó²ã´Î¡¹µÄ£¨Óû§¿É¼ûµÄ£©Îï¼þ״̬²»±»¸Ä±ä£¨¶ø²»ÊÇÐíŵ£º¸ÃÎï¼þ µÄ¡¸Ã¿Ò»¸öλԪÄÚÈÝ¡¹¶¼²»»á±»¶¯µ½£©¡£C++ ±àÒëÆ÷²»»á¶ÔÄãÐíŵ¡¸Ã¿Ò»¸öλԪ¡¹Õâ ÖÖÊÂÇ飬ÒòΪ²»Êdz£ÊýµÄ±ðÃû£¨alias£©¾Í¿ÉÄÜ»áÐÞ¸ÄÎï¼þµÄ״̬£¨°Ñ "const" Ö¸±ê ð¤ÉÏij¸öÎï¼þ£¬²¢²»Äܵ£±£¸ÃÎï¼þ²»±»¸Ä±ä£»ËüÖ»Äܵ£±£¸ÃÎï¼þ²»»á¡¸±»¸ÃÖ¸±êµÄ¶¯ ×÷¡¹Ëù¸Ä±ä£©¡£  ¡¾Òë×¢¡¿ÇëÖð×Öϸ¶ÁÉÏÃæÕâ¾ä»°¡£  "const" ³ÉÔ±º¯Êý³£±»³Æ×÷¡¸²éѯ×Ó¡¹£¨inspector£©£¬²»ÊÇ "const" µÄ³ÉÔ±º¯ÊýÔò ³ÆÎª¡¸¸ü¶¯×Ó¡¹£¨mutator£©¡£  ========================================  Q48£ºÈôÎÒÏëÔÚ "const" ³ÉÔ±º¯ÊýÄÚ¸üÐÂÒ»¸ö¡¸¿´²»¼ûµÄ¡¹×ÊÁϳÉÔ±£¬¸ÃÔõ÷á×ö£¿  Ê¹Óà "mutable" »òÊÇ "const_cast"¡£ ¡¾Òë×¢¡¿ÕâÊǺÜÐ嵀 ANSI C++ RTTI (RunTime Type Information) ¹æ¶¨£¬Borland         C++ 4.0 ¾ÍÂÊÏÈÌṩÁË const_cast ÔËËã×Ó¡£  ÉÙÊýµÄ²éѯ×ÓÐèÒª¶Ô×ÊÁϳÉÔ±×öЩÎÞº¦µÄ¸Ä±ä£¨Æ©È磺"Set" Îï¼þ¿ÉÄÜÏë¿ìÈ¡ËüÉÏÒ» »ØËù²éµ½µÄ¶«Î÷£¬ÒÔ¼ÓËÙÏÂÒ»´ÎµÄ²éѯ£©¡£´Ë¸Ä±ä¡¸ÎÞº¦¡¹ÊÇÖ¸£º´Ë¸Ä±ä²»»áÓÉÎï¼þ µÄÍⲿ½éÃæ²ì¾õ³öÀ´£¨·ñÔò£¬¸ÃÔË×÷ÐÐΪ¾Í¸Ã½Ð×ö¸ü¶¯×Ó£¬¶ø·Ç²éѯ×ÓÁË£©¡£  ÕâÀàÇé¿öÏ£¬»á±»¸ü¶¯µÄ×ÊÁϳÉÔ±¾Í¸Ã±»±êʾ³É "mutable"£¨°Ñ "mutable" ¹Ø¼ü×Ö ·ÅÔÚ¸Ã×ÊÁϳÉÔ±Ðû¸æ´¦Ç°Ã棻Ҳ¾ÍÊǺÍÄã·Å "const" Ò»ÑùµÄµØ·½£©£¬Õâ»á¸æËß±àÒë Æ÷£º´Ë×ÊÁϳÉÔ±ÔÊÐí const ³ÉÔ±º¯Êý¸Ä±äÖ®¡£ÈôÄã²»ÄÜÓà "mutable" µÄ»°£¬¿ÉÒÔÓà "const_cast" °Ñ "this" µÄ¡¸³£ÊýÐÔ¡¹¸ø×ªÐ͵ô¡£Æ©È磬ÔÚ "Set::lookup() const" ÀÄã¿ÉÒÔ˵£º          Set* self = const_cast(this);  ÕâÐÐÖ´ÐÐÖ®áᣬ"self" µÄλԪÄÚÈÝ¾ÍºÍ "this" Ò»Ñù£¨Æ©È磺"self==this"£©£¬µ« ÊÇ "self" ÊÇÒ»¸ö "Set*" ¶ø·Ç "const Set*" ÁË£¬ËùÒÔÄã¾Í¿ÉÒÔÓà "self" È¥ÐÞ¸Ä "this" Ö¸±êËùÖ¸ÏòµÄÎï¼þ¡£  ========================================  Q49£º"const_cast" »á²»»áɥʧ×î¼Ñ»¯µÄ¿ÉÄÜ£¿  ÀíÂÛÉÏ£¬ÊÇ£»Êµ¼ÊÉÏ£¬·ñ¡£  ¾ÍËã±àÒëÆ÷Ã»ÕæÕý×öºÃ "const_cast"£¬Óû±ÜÃâ "const" ³ÉÔ±º¯Êý±»ºô½Ðʱ£¬»áÔì³É ÔÝ´æÆ÷¿ìÈ¡Çø±»Çå¿ÕµÄΨһ·½·¨£¬ÄËÈ·±£Ã»ÓÐÈκΡ¸·Ç³£Êý¡¹µÄÖ¸±êÖ¸Ïò¸ÃÎï¼þ¡£Õâ ÖÖÇé¿öºÜÄѵûᷢÉú£¨µ±Îï¼þÔÚ const ³ÉÔ±º¯Êý±»ÆôÓõġõΧÄÚ±»½¨Á¢³öÀ´£»µ±Ëù ÓÐ·Ç const µÄ³ÉÔ±º¯ÊýÔÚÎï¼þ½¨Á¢¼äÆôÓã¬ºÍ const ³ÉÔ±º¯ÊýµÄÆôÓñ»¾²Ì¬Ïµ½áס £»µ±ËùÓÐµÄÆôÓÃÒ²¶¼ÊÇ "inline"£»µ±½¨¹¹×Ó±¾Éí¾ÍÊÇ "inline"£»ºÍµ±½¨¹¹×ÓËùºô½Ð µÄÈκγÉÔ±º¯Êý¶¼ÊÇ inline ʱ£©¡£  ¡¾Òë×¢¡¿ÕâÒ»¶Î»°ºÜÄÑ·­µÃºÃ£¨ºÃÀ²ºÃÀ²£¡ÎÒ¹¦Á¦²»×ã... :-< £©£¬ËùÒÔ¸½ÉÏÔ­ÎÄ£º Even if a compiler outlawed "const_cast", the only way to avoid flushing the register cache across a "const" member function call would be to ensure that there are no non-const pointers that alias the object.  This can only happen in rare cases (when the object is constructed in the scope of the const member fn invocation, and when all the non-const member function invocations between the object's construction and the const member fn invocation are statically bound, and when every one of these invocations is also "inline"d, and when the constructor itself is "inline"d, and when any member fns the constructor calls are inline).   ===================== ¡ö¡õ µÚ£±£²½Ú£º¼Ì³Ð =====================  Q50£º¡¸¼Ì³Ð¡¹¶Ô C++ À´ËµºÜÖØÒªÂ𣿠 Êǵġ£  ¡¸¼Ì³Ð¡¹ÊdzéÏó»¯×ÊÁÏÐÍ̬£¨abstract data type, ADT£©Óë OOP µÄÒ»´ó·ÖÒ°¡£  ========================================  Q51£ººÎʱ¸ÃÓü̳У¿  ×öΪһ¸ö¡¸ÌØÒ컯¡¹(specialization) µÄ»úÖÆ¡£  ÈËÀàÒÔÁ½ÖֽǶÈÀ´³éÏó»¯ÊÂÎ¡¸²¿·Ý¡¹(part-of) ºÍ¡¸ÖÖÀࡹ(kind-of)¡£¸£ÌØÆû ³µ¡°ÊÇÒ»ÖÖ¡±(is-a-kind-of-a) ³µ×Ó£¬¸£ÌØÆû³µ¡°ÓС±(has-a) ÒýÇæ¡¢ÂÖÌ¥¡­¡­µÈ µÈÁã¼þ¡£¡¸²¿·Ý¡¹µÄ²ã´ÎËæÖø ADT µÄÁ÷ÐУ¬ÒѳÉΪÈíÌåϵͳµÄÒ»·Ý×ÓÁË£»¶ø¡¸¼Ì³Ð ¡¹ÔòÌíÈëÁË¡°ÁíÒ»¸ö¡±ÖØÒªµÄÈíÌå·Ö½â½Ç¶È¡£  ========================================  Q52£ºÔõÑùÔÚ C++ ÖбíÏÖ³ö¼Ì³Ð£¿  Óà ": public" Óï·¨£º          class Car : public Vehicle {                 //^^^^^^^^---- ": public" ¶Á×÷¡¸ÊÇÒ»ÖÖ¡¹("is-a-kind-of-a")           //...         };  ÎÒÃÇÒÔ¼¸ÖÖ·½Ê½À´ÃèÊöÉÏÃæµÄ¹ØÏµ£º   * Car ÊÇ¡¸Ò»ÖÖ¡¹("a kind of a") Vehicle  * Car ÄË¡¸ÑÜÉú×Ô¡¹("derived from") Vehicle  * Car ÊǸö¡¸ÌØÒ컯µÄ¡¹("a specialized") Vehicle  * Car ÊÇ Vehicle µÄ¡¸×ÓÀà±ð¡¹("subclass")  * Vehicle ÊÇ Car µÄ¡¸»ùµ×Àà±ð¡¹("base class")  * Vehicle ÊÇ Car µÄ¡¸¸¸Àà±ð¡¹("superclass") £¨Õâ²»ÊÇ C++ ½ç³£ÓõÄ˵·¨£©    ¡¾Òë×¢¡¿"superclass" ÊÇ Smalltalk ÓïÑԵĹؼü×Ö¡£  ========================================  Q53£º°ÑÑÜÉúÀà±ðµÄÖ¸±êתÐͳÉÖ¸ÏòËüµÄ»ùµ×£¬¿ÉÒÔÂ𣿠 ¿ÉÒÔ¡£  ÑÜÉúÀà±ðÊǸûùµ×Àà±ðµÄÌØÒ컯°æ±¾£¨ÑÜÉúÕß¡¸ÊÇÒ»ÖÖ¡¹("a-kind-of") »ùµ×£©¡£Õâ ÖÖÏòÉϵÄת»»ÊǾø¶Ô°²È«µÄ£¬¶øÇÒ³£³£»á·¢Éú£¨Èç¹ûÎÒÖ¸ÏòÒ»¸öÆû³µ Car£¬Êµ¼ÊÉÏÎÒ ÊÇÖ¸ÏòÒ»¸ö³µ×Ó Vehicle£©£º          void f(Vehicle* v);         void g(Car* c) { f(c); }        //¾ø¶ÔºÜ°²È«£»²»ÐèҪתÐÍ  ×¢Ò⣺ÔÚÕâÀïÎÒÃǼÙÉèµÄÊÇ "public" µÄ¼Ì³Ð£»ááÃæ»áÔÙÌáµ½¡¸ÁíÒ»ÖÖ¡¹"private/ protected" µÄ¼Ì³Ð¡£  ========================================  Q54£ºDerived* --> Base* ÊÇÕý³£µÄ£»ÄÇΪʲ÷á Derived** --> Base** Ôò·ñ£¿  C++ Èà Derived* ÄÜתÐ͵½ Base*£¬ÊÇÒòΪÑÜÉúµÄÎï¼þ¡¸ÊÇÒ»ÖÖ¡¹»ùµ×µÄÎï¼þ¡£È»¶ø ÏëÓÉ Derived** תÐ͵½ Base** ÔòÊÇ´íÎóµÄ£¡ÒªÊÇÄܹ»µÄ»°£¬Base** ¾Í¿ÉÄܻᱻ½â ²ÎÓ㨲úÉúÒ»¸ö Base*£©£¬¸Ã Base* ¾Í¿ÉÄÜÖ¸ÏòÁíÒ»¸ö¡°²»Ò»ÑùµÄ¡±ÑÜÉúÀà±ð£¬Õâ ÊDz»¶ÔµÄ¡£  ÕÕ´Ë¿´À´£¬ÑÜÉúÀà±ðµÄÕóÁо͡¸²»ÊÇÒ»ÖÖ¡¹»ùµ×Àà±ðµÄÕóÁС£ÔÚ Paradigm Shift ¹« ˾µÄ C++ ѵÁ·¿Î³ÌÀÎÒÃÇÓõ×ϵÄÀý×ÓÀ´±ÈÓ÷£º                 "Ò»´üÆ»¹û¡¸²»ÊÇ¡¹Ò»´üË®¹û".                "A bag of apples is NOT a bag of fruit".  Èç¹ûÒ»´üÆ»¹û¿ÉÒÔµ±³ÉÒ»´üË®¹ûÀ´´«µÝ£¬±ðÈ˾ͿÉÄܰÑÏã½¶·Åµ½Æ»¹û´üÀïÍ·È¥£¡  ========================================  Q55£ºÑÜÉúÀà±ðµÄÕóÁС¸²»ÊÇ¡¹»ùµ×µÄÕóÁУ¬ÊÇ·ñ±íʾÕóÁв»ºÃ£¿  Ã»´í£¬¡¸ÕóÁкÜÀá¹(¿ªÍæÐ¦µÄ :-) ¡£  C++ ÄÚ½¨µÄÕóÁÐÓÐÒ»¸ö²»Òײì¾õµÄÎÊÌâ¡£ÏëÒ»Ï룺          void f(Base* arrayOfBase)         {           arrayOfBase[3].memberfn();         }          main()         {           Derived arrayOfDerived[10];           f(arrayOfDerived);         }  ±àÒëÆ÷ÈÏΪÕâÍêÈ«ÊÇÐͱð°²È«µÄ£¬ÒòΪÓÉ Derived* ת»»µ½ Base* ÊÇÕý³£µÄ¡£µ«Ê ʵÉÏÕâºÜ²î¾¢£ºÒòΪ Derived ¿ÉÄÜ»á±È Base »¹Òª´ó£¬f() ÀïÍ·µÄÕóÁÐË÷Òý²»¹âÊÇ Ã»ÓÐÐͱð°²È«£¬ÉõÖÁ»¹¿ÉÄÜûָµ½ÕæÕýµÄÎï¼þÄØ£¡Í¨³£Ëü»áÖ¸µ½Ä³¸öµ¹é¹µÄ Derived Îï¼þµÄÖмäÈ¥¡£  ¸ù±¾µÄÎÊÌâÔÚì¶£ºC++ ²»ÄÜ·Ö±æ³ö¡¸Ö¸ÏòÒ»¸ö¶«Î÷¡¹ºÍ¡¸Ö¸ÏòÒ»¸öÕóÁС¹¡£ºÜ×ÔÈ»µÄ £¬ÕâÊÇ C++¡°¼Ì³Ð¡±×Ô C ÓïÑÔµÄÌØáç¡£  ×¢Ò⣺Èç¹ûÎÒÃÇÓõÄÊÇÒ»¸öÏñÕóÁеġ¸Àà±ð¡¹¶ø·Ç×îԭʼµÄÕóÁУ¨Æ©È磺"Array" ¶ø·Ç "T[]"£©£¬ÕâÎÊÌâ¾Í¿ÉÒÔÔÚ±àÒëÆÚ±»Ìô³öÀ´£¬¶ø·ÇÔÚÖ´ÐеÄʱºò¡£  ========================== ¡ñ 12A£º¼Ì³Ð£­£­ÐéÄ⺯Êý ==========================  Q56£ºÊ²÷áÊÇ¡¸ÐéÄâ³ÉÔ±º¯Êý¡¹£¿  ÐéÄ⺯Êý¿ÉÈÃÑÜÉúµÄÀà±ð¡¸È¡´ú¡¹Ô­»ùµ×Àà±ðËùÌṩµÄÔË×÷¡£Ö»ÒªÄ³Îï¼þÊÇÑÜÉú³öÀ´ µÄ£¬¾ÍËãÎÒÃÇÊÇ͸¹ý»ùµ×Îï¼þµÄÖ¸±ê£¬¶ø²»ÊÇÒÔÑÜÉúÎï¼þµÄÖ¸±êÀ´´æÈ¡¸ÃÎï¼þ£¬±àÒë Æ÷ÈÔ»áÈ·±£¡¸È¡´úá᡹µÄ³ÉÔ±º¯Êý±»ºô½Ð¡£Õâ¿ÉÈûùµ×Àà±ðµÄÑÝËã·¨±»ÑÜÉúÕßËùÌæ»» £¬¼´Ê¹ÎÒÃDz»ÖªµÀÑÜÉúÀà±ð³¤Ê²÷áÑù×Ó¡£  ×¢Ò⣺ÑÜÉúµÄÀà±ðÒà¿É¡°²¿·Ý¡±È¡´ú£¨¸²¸Ç£¬override£©µô»ùµ×µÄÔË×÷ÐÐΪ£¨ÈçÓÐ±Ø Òª£¬ÑÜÉúÀà±ðµÄÔË×÷ÐÐΪÒà¿Éºô½ÐËüµÄ»ùµ×Àà±ð°æ±¾£©¡£  ========================================  Q57£ºC++ ÔõÑùͬʱ×öµ½¶¯Ì¬Ïµ½áºÍ¾²Ì¬Ðͱ𣿠 µ×ϵÄÌÖÂÛÖУ¬"ptr" Ö¸µÄÊÇ¡¸Ö¸±ê¡¹»ò¡¸²Î¿¼¡¹¡£  Ò»¸ö ptr ÓÐÁ½ÖÖÐÍ̬£º¾²Ì¬µÄ ptr ÐÍ̬£¬Ó붯̬µÄ¡¸±»Ö¸ÏòµÄÎï¼þ¡¹µÄÐÍ̬£¨¸ÃÎï ¼þ¿ÉÄÜʵ¼ÊÉÏÊǸöÓÉÆäËûÀà±ðÑÜÉú³öÀ´µÄÀà±ðµÄ ptr£©¡£  ¡¸¾²Ì¬Ðͱð¡¹("static typing") ÊÇÖ¸£º¸Ãºô½ÐµÄ¡¸ºÏ·¨ÐÔ¡¹£¬ÊÇÒÔ ptr µÄ¾²Ì¬ÐÍ ±ðΪÕì²âÖ®ÒÀ¾Ý£¬Èç¹û ptr µÄÐͱðÄÜ´¦Àí³ÉÔ±º¯Êý£¬Ôò¡¸Ö¸ÏòµÄÎï¼þ¡¹×ÔȻҲÄÜ¡£  ¡¸¶¯Ì¬Ïµ½á¡¹("dynamic binding") ÊÇÖ¸£º¡¸³ÌʽÂ롹ºô½ÐÊÇÒÔ¡¸±»Ö¸ÏòµÄÎï¼þ¡¹Ö® ÐÍ̬ΪÒÀ¾Ý¡£±»³ÆÎª¡¸¶¯Ì¬Ïµ½á¡¹£¬ÊÇÒòÎªÕæÕý»á±»ºô½ÐµÄ³ÌʽÂëÊǶ¯Ì¬µØ£¨ì¶Ö´ÐРʱÆÚ£©¾ö¶¨µÄ¡£  ========================================  Q58£ºÑÜÉúÀà±ðÄÜ·ñ½«»ùµ×Àà±ðµÄ·ÇÐéÄ⺯Êý¸²¸Ç£¨override£©¹ýÈ¥£¿  ¿ÉÒÔ£¬µ«²»ºÃ¡£  C++ µÄÀÏÊÖÓÐʱ»áÖØÐ¶¨Òå·ÇÐéÄâµÄº¯Êý£¬ÒÔÌáÉýЧÂÊ£¨»»Ò»ÖÖ¿ÉÄÜ»áÔËÓõ½ÑÜÉúÀà ±ð²ÅÓеÄ×ÊÔ´µÄ×÷·¨£©£¬»òÊÇÓÃÒԱܿªÕÚ±ÎЧӦ£¨hiding rule£¬µ×Ï»áÌᣬ»òÊÇ¿´ ¿´ ARM ["Annotated Reference Manual"] sect.13.1£©£¬µ«ÊÇÓû§µÄ¿É¼ûÐÔЧ¹û±Ø ÐëÍêÈ«Ïàͬ£¬ÒòΪ·ÇÐéÄâµÄº¯ÊýÊÇÒÔÖ¸±ê£¯²Î¿¼µÄ¾²Ì¬ÐͱðΪ·ÖÅÉ£¨dispatch£©µÄÒÀ ¾Ý£¬¶ø·ÇÒÔÖ¸µ½µÄ£¯±»²Î¿¼µ½µÄÎï¼þÖ®¶¯Ì¬ÐͱðÀ´¾ö¶¨¡£  ========================================  Q59£º"Warning: Derived::f(int) hides Base::f(float)" ÊÇʲ÷áÒâ˼£¿  ÕâÊÇÖ¸£ºÄãËÀ²»Á˵ġ£  Äã³öµÄÎÊÌâÊÇ£ºÈç¹û Derived Ðû¸æÁ˸ö½Ð×ö "f" µÄ³ÉÔ±º¯Êý£¬Base È´ÔçÒÑÐû¸æÁË ¸ö²»Í¬ÐÍ̬ǩÃûÐÍʽ£¨Æ©È磺²ÎÊýÐÍ̬»òÊÇ const ²»Í¬£©µÄ "f"£¬ÕâÑù×Ó Base "f" ¾Í»á±»¡¸ÕڱΠhide¡¹×¡£¬¶ø²»ÊDZ»¡¸¶àÔØ overload¡¹»ò¡¸¸²¸Ç override¡¹£¨¼´Ê¹ Base "f" ÒѾ­ÊÇÐéÄâµÄÁË£©¡£  ½â¾ö·¨£ºDerived ÒªÌæ Base ±»ÕڱεijÉÔ±º¯ÊýÖØÐ¶¨Ò壨¾ÍËãËü²»ÊÇÐéÄâµÄ£©¡£Í¨ ³£Öض¨ÒåµÄº¯Êý£¬½ö½öÊÇÈ¥ºô½ÐºÏÊ浀 Base ³ÉÔ±º¯Êý£¬Æ©È磺          class Base {         public:           void f(int);         };          class Derived : public Base {         public:           void f(double);           void f(int i) { Base::f(i); }         };             // ^^^^^^^^^^--- ÖØ¶¨ÒåµÄº¯ÊýÖ»ÊÇÈ¥ºô½Ð Base::f(int)  ======================== ¡ñ 12B£º¼Ì³Ð£­£­Ò»ÖÂÐÔ ========================  Q60£ºÎÒ¸ÃÕÚ±ÎסÓÉ»ùµ×Àà±ð¼Ì³ÐÀ´µÄ¹«¹²³ÉÔ±º¯ÊýÂ𣿠 ¾ø¶Ô¾ø¶Ô¾ø¶Ô¾ø¶Ô²»ÒªÕâÑù×ö£¡  ÏëÈ¥ÕڱΣ¨É¾È¥¡¢³·Ïû£©µô¼Ì³ÐÏÂÀ´µÄ¹«¹²³ÉÔ±º¯Êý£¬ÊǸöºÜ³£¼ûµÄ´íÎó¡£Õâͨ³£ÊÇ ÄÔ´üÈûÂúÁ˽¬ºýµÄÈ˲Żá×öµÄɵÊ¡£  ========================================  Q61£ºÔ²ÐÎ "Circle" ÊÇÒ»ÖÖÍÖÔ² "Ellipse" Â𣿠 ÈôÍÖÔ²Äܹ»²»¶Ô³ÆµØ¸Ä±äÆäÁ½ÖáµÄ´óС£¬Ôò´ð°¸¾ÍÊÇ·ñ¶¨µÄ¡£  ±È·½Ëµ£¬ÍÖÔ²Óиö "setSize(x,y)" µÄÔË×÷ÐÐΪ£¬ÇÒËü±£Ö¤Ëµ¡¸ÍÖÔ²µÄ width() Ϊ x£¬height() Ϊ y¡¹¡£ÕâÖÖÇé¿ö֮ϣ¬ÕýÔ²ÐξͲ»ÄÜËãÊÇÒ»ÖÖÍÖÔ²¡£ÒòΪֻҪ°Ñij¸ö ÍÖÔ²ÄÜ×ö¶øÕýÔ²Ðβ»ÄܵĶ«Î÷·Å½øÈ¥£¬Ô²ÐξͲ»ÔÙÊǸöÍÖÔ²ÁË¡£  ÕâÑùÒ»À´£¬Ô²ºÍÍÖÔ²Ö®¼ä¿ÉÄÜÓÐÁ½Öֵģ¨ºÏ·¨£©¹ØÏµ£º  * ½«Ô²ÓëÍÖÔ²ÍêÈ«·Ö¿ªÀ´Ì¸¡£  * ÈÃÔ²¼°ÍÖÔ²¶¼Í¬Ê±×ÔÒ»¸ö»ùµ×ÑÜÉú³öÀ´£¬¸Ã»ùµ×Ϊ¡¸²»ÄÜ×ö²»¶Ô³ÆµÄ setSize    ÔË×÷µÄÌØÊâÍÖÔ²ÐΡ¹¡£  ÒÔµÚÒ»¸ö·½°¸¶øÑÔ£¬ÍÖÔ²¿É¼Ì³Ð×Ô¡¸·Ç¶Ô³ÆÍ¼ÐΡ¹£¨°éËæÖøÒ»¸ö setSize(x,y) £©£¬ Ô²ÐÎÔò¼Ì³Ð×Ô¡¸¶Ô³ÆÍ¼ÐΡ¹£¬´øÓÐÒ»¸ö setSize(size) ³ÉÔ±º¯Êý¡£  µÚ¶þ¸ö·½°¸ÖУ¬¿ÉÈÃÂÑÐÎ "Oval" Àà±ðÓиö "setSize(size)"£º½« "width()" ºÍ "height()" ¶¼Éè³É "size"£¬È»ááÈÃÍÖÔ²ºÍÔ²Ðζ¼×ÔÂÑÐÎÖÐÑÜÉú³öÀ´¡£ÍÖÔ²£¨¶ø²»ÊÇ ÕýÔ²ÐΣ©»á¼ÓÈëÒ»¸ö "setSize(x,y)" ÔËË㣨Èç¹ûÕâ¸ö "setSize()" ÔË×÷ÐÐΪµÄÃû ³ÆÖظ´ÁË£¬¾ÍµÃ×¢ÒâÇ°ÃæÌá¹ýµÄ¡¸ÕÚ±ÎЧӦ¡¹£©¡£  ========================================  Q62£º¶Ô¡¸Ô²ÐÎÊÇ£¯²»ÊÇÒ»ÖÖÍÖÔ²¡¹ÕâÁ½ÄÑÎÊÌ⣬ÓÐûÓÐÆäËû˵·¨£¿  Èç¹ûÄã˵£ºÍÖÔ²¶¼¿ÉÒÔ²»¶Ô³ÆµØ¼·Ñ¹£¬ÓÖ˵£ºÔ²ÐÎÊÇÒ»ÖÖÍÖÔ²£¬ÓÖ˵£ºÔ²Ðβ»Äܲ»¶Ô ³ÆµØ¼·Ñ¹ÏÂÈ¥£¬ÄÇ÷áºÜÃ÷ÏԵģ¬Äã˵¹ýµÄij¾ä»°Òª×öÐÞÕý£¨ÀÏʵ˵£¬¸ÃÈ¡Ïûµô£©¡£Ëù ÒÔÄã²»ÊǵÃÈ¥µô "Ellipse::setSize(x,y)"£¬È¥µôÔ²ÐκÍÍÖÔ²¼äµÄ¼Ì³Ð¹ØÏµ£¬¾ÍÊǵà ³ÐÈÏÄãµÄ¡¸Ô²ÐΡ¹²»Ò»¶¨ÊÇÕýÔ²¡£  Õâ¶ùÓÐÁ½¸ö OO/C++ ÐÂÊÖ×îÒ×ÂäÈëµÄÏÝÚå¡£ËûÃÇÏëÓóÌʽС¼¼ÇÉÀ´ÃÖ²¹²î¾¢µÄÊÂǰÉè ¼Æ£¨ËûÃÇÖØÐ¶¨Òå Circle::setSize(x,y)£¬ÈÃËü¶ª³öÒ»¸öÀýÍ⣬ºô½Ð "abort()" £¬ »òÊÇÑ¡ÓÃÁ½²ÎÊýµÄƽ¾ùÊý£¬»òÊDz»×öÈκÎÊÂÇ飩£¬²»Ðҵģ¬ÕâЩ¼¼Á©¶¼»áÈÃʹÓÃÕ߸Рµ½³Ô¾ª£ºËûÃÇÔ­±¾¶¼Ô¤ÆÚ "width() == x" ºÍ "height() == y" ÕâÁ½¸öÊÂʵ»á³ÉÁ¢¡£  Î¨Ò»ºÏÀíµÄ×ö·¨ËƺõÊÇ£º½µµÍÍÖÔ²ÐÎ "setSize(x,y)" µÄ±£Ö¤ÊÂÏƩÈ磬Äã¿ÉÒÔ¸Ä ³É£º¡¸ÕâÔË×÷ÐÐΪ¡°¿ÉÄÜ¡±»á°Ñ width() Éè³É x¡¢height() Éè³É y£¬Ò²¿ÉÄÜ¡°²»×ö ÈκÎÊ¡±¡¹£©¡£²»Ðҵģ¬ÕâÑù»á°Ñ½çÏ޳嵭£¬ÒòΪʹÓÃÕßûÓÐÈκÎÓÐÒâÒåµÄÎï¼þÐÐΪ ×ãÒÔÒÀ¿¿£¬Õû¸öÀà±ð½×²ãÒ²¾ÍÎÞºÁ¼ÛÖµ¿ÉÑÔÁË£¨ºÜÄÑ˵·þ±ðÈËÈ¥ÓÃÒ»¸ö£ºÎÊÄã˵ËüÊÇ ×öʲ÷áµÄ£¬ÄãÈ´Ö»»áËÊËʼç°ò˵²»ÖªµÀµÄÎï¼þ£©¡£  ========================== ¡ñ 12C£º¼Ì³Ð£­£­´æÈ¡¹æÔò ==========================  Q63£ºÎªÊ²÷áÑÜÉúµÄÀà±ðÎÞ·¨´æÈ¡»ùµ×µÄ "private" ¶«Î÷£¿  ÈÃÄã²»±»»ùµ×Àà±ð½«À´µÄ¸Ä±äËùÓ°Ïì¡£  ÑÜÉúÀà±ð²»ÄÜ´æÈ¡µ½»ùµ×µÄ˽ÓУ¨private£©³ÉÔ±£¬ËüÓÐЧµØ°ÑÑÜÉúÀà±ð¡¸·âס¡¹£¬ »ùµ×Àà±ðÄÚµÄ˽ÓгÉÔ±ÈçÓиı䣬Ҳ²»»áÓ°Ïìµ½ÑÜÉúµÄÀà±ð¡£  ========================================  Q64£º"public:"¡¢"private:"¡¢"protected:" µÄ²î±ðÊÇ£¿  "Private:" ÔÚǰ¼¸½ÚÖÐÌÖÂÛ¹ýÁË£»"public:" ÊÇÖ¸£º¡¸ÈκÎÈ˶¼ÄÜ´æÈ¡Ö®¡¹£»µÚÈý ¸ö "protected:" ÊÇÈÃij³ÉÔ±£¨×ÊÁϳÉÔ±»òÊdzÉÔ±º¯Êý£©Ö»ÄÜÓÉÑÜÉúÀà±ð´æÈ¡Ö®¡£  ¡¾Òë×¢¡¿"protected:" ÊÇÈá¸ÑÜÉúÀà±ð¡¹£¬¶ø·ÇÈá¸ÑÜÉúÀà±ðµÄÎï¼þ°¸Àý¡¹ÄÜ´æÈ¡         µÃµ½ protected µÄ²¿·Ý¡£  ========================================  Q65£ºµ±ÎҸıäÁËÄÚ²¿µÄ¶«Î÷£¬ÔõÑù±ÜÃâ×ÓÀà±ð±»ÆÆ»µ£¿  Îï¼þÀà±ðÓÐÁ½¸ö²»Í¬µÄ½éÃæ£¬Ìṩ¸ø²»Í¬ÖÖÀàµÄÓû§£º  * "public:" ½éÃæÓÃÒÔ·þÎñ²»Ïà¹ØµÄÀà±ð¡£  * "protected:" ½éÃæÓÃÒÔ·þÎñÑÜÉúµÄÀà±ð¡£  ³ý·ÇÄãÔ¤ÆÚËùÓеÄ×ÓÀà±ð¶¼»áÓÉÄãÃǵŤ×÷С×齨³öÀ´£¬·ñÔòÄãÓ¦¸Ã½«»ùµ×Àà±ðµÄ×Ê ÁÏλԪÄÚÈÝ·ÅÔÚ "private:" ´¦£¬Óà "protected:" ÐÐÄÚ´æÈ¡º¯ÊýÀ´´æÈ¡ÄÇЩ×ÊÁÏ¡£ ÕâÑùµÄ»°£¬¼´Ê¹»ùµ×Àà±ðµÄ˽ÓÐ×ÊÁϸıäÁË£¬ÑÜÉúÀà±ðµÄ³ÌʽҲ²»»á±¨·Ï£¬³ý·ÇÄã¸Ä ±äÁË»ùµ×Àà±ðµÄ protected ´¦µÄ´æÈ¡º¯Êý¡£  ================================ ¡ñ 12D£º¼Ì³Ð£­£­½¨¹¹×ÓÓë½â¹¹×Ó ================================  Q66£ºÈô»ùµ×Àà±ðµÄ½¨¹¹×Óºô½ÐÒ»¸öÐéÄ⺯Êý£¬ÎªÊ²÷áÑÜÉúÀà±ð¸²¸ÇµôµÄÄǸöÐéÄ⺯      ÊýÈ´²»»á±»ºô½Ðµ½£¿  ÔÚ»ùµ×Àà±ð Base µÄ½¨¹¹×ÓÖ´Ðйý³ÌÖУ¬¸ÃÎï¼þ»¹²»ÊÇÊôì¶ÑÜÉú Derived µÄ£¬ËùÒÔ Èç¹û "Base::Base()" ºô½ÐÁËÐéÄ⺯Êý "virt()"£¬Ôò "Base::virt()" »á±»ºô½Ð£¬ ¼´Ê¹ÕæµÄÓÐ "Derived::virt()"¡£  ÀàËÆµÄµÀÀí£¬µ± Base µÄ½â¹¹×ÓÖ´ÐÐʱ£¬¸ÃÎï¼þ²»ÔÙÊǸö Derived ÁË£¬ËùÒÔµ± Base::~Base() ºô½Ð "virt()"£¬Ôò "Base::virt()" »á±»Ö´ÐУ¬¶ø·Ç¸²¸ÇááµÄ°æ±¾ "Derived::virt()"¡£  µ±ÄãÏëÏñµ½£ºÈç¹û "Derived::virt()" ÅöµÃµ½ Derived Àà±ðµÄÎï¼þ³ÉÔ±£¬»áÔì³Éʲ ÷áÑùµÄÔÖÄÑ£¬ÄãºÜ¿ì¾Í»á¿´³öÕâ¹æÔòµÄÃ÷ÖÇÖ®´¦¡£  ================================  Q67£ºÑÜÉúÀà±ðµÄ½â¹¹×ÓÓ¦¸ÃÍâÏԵغô½Ð»ùµ×µÄ½â¹¹×ÓÂ𣿠 ²»Òª£¬¾ø¶Ô²»ÒªÍâÏԵغô½Ð½â¹¹×Ó£¨¡¸¾ø¶Ô²»Òª¡¹Ö¸µÄÊÇ¡¸¼¸ºõÍêÈ«²»Òª¡¹£©¡£  ÑÜÉúÀà±ðµÄ½â¹¹×Ó£¨²»¹ÜÄãÊÇ·ñÃ÷ÏÔ¶¨Òå¹ý£©»á¡°×Ô¶¯¡±È¥ºô½Ð³ÉÔ±Îï¼þµÄ¡¢ÒÔ¼°»ù µ×Àà±ðÖ®×ÓÎï¼þµÄ½â¹¹×Ó¡£³ÉÔ±Îï¼þ»áÒÔËüÃÇÔÚÀà±ðÖгöÏÖµÄÏ෴˳Ðò½â¹¹£¬½ÓÏÂÀ´ ÊÇ»ùµ×Àà±ðµÄ×ÓÎï¼þ£¬ÒÔËüÃdzöÏÖÔÚÀà±ð»ùµ×ÁбíµÄÏ෴˳Ðò½â¹¹Ö®¡£  Ö»ÓÐÔÚ¼«ÎªÌØÊâµÄÇé¿öÏ£¬Äã²ÅÓ¦ÍâÏԵغô½Ð½â¹¹×Ó£¬ÏñÊÇ£º½â¹¹Ò»¸öÓÉ¡¸Ð·ÅÈëµÄ new ÔËËã×Ó¡¹ÅäÖõÄÎï¼þ¡£  =========================================== ¡ñ 12E£º¼Ì³Ð£­£­Private Óë protected ¼Ì³Ð ===========================================  Q68£º¸ÃÔõ÷á±í´ï³ö¡¸Ë½Óм̳С¹(private inheritance)£¿  Óà ": private" À´´úÌæ ": public."  Æ©È磺          class Foo : private Bar {           //...         };  ================================  Q69£º¡¸Ë½Óм̳С¹ºÍ¡¸³É·Ý¡¹(composition) ÓжàÀàËÆ£¿  Ë½Óм̳ÐÊÇ¡¸³É·Ý¡¹(has-a) µÄÒ»ÖÖÓï·¨±äÐΡ£  Æ©È磺¡¸Æû³µÓÐÒýÇæ¡¹("car has-a engine") ¹ØÏµ¿ÉÓóɷÝÀ´±í´ï£º          class Engine {         public:           Engine(int numCylinders);           void start();                 //starts this Engine         };          class Car {         public:           Car() : e_(8) { }             //initializes this Car with 8 cylinders           void start() { e_.start(); }  //start this Car by starting its engine         private:           Engine e_;         };  Í¬ÑùµÄ "has-a" ¹ØÏµÒ²¿ÉÓÃ˽Óм̳ÐÀ´±í´ï£º          class Car : private Engine {         public:           Car() : Engine(8) { }         //initializes this Car with 8 cylinders           Engine::start;                //start this Car by starting its engine         };  ÕâÁ½ÖÖÐÍʽµÄ³É·ÝÓм¸·ÖÏàËÆÐÔ£º  * ÕâÁ½ÖÖÇé¿ö֮ϣ¬Car Ö»º¬ÓÐÒ»¸ö Engine ³ÉÔ±Îï¼þ¡£  * Á½ÖÖÇé¿ö¶¼²»ÄÜÈã¨Íâ½ç£©Ê¹ÓÃÕßÓÉ Car* ת»»³É Engine* ¡£  Ò²Óм¸¸ö²»Í¬µã£º  * Èç¹ûÄãÏëÒªÈÃÿ¸ö Car ¶¼º¬ÓÐÊý¸ö Engine µÄ»°£¬¾ÍµÃÓõÚÒ»¸öÐÍʽ¡£  * µÚ¶þ¸öÐÍʽ¿ÉÄܻᵼÖ²»±ØÒªµÄ¶àÖØ¼Ì³Ð£¨multiple inheritance£©¡£  * µÚ¶þ¸öÐÍʽÔÊÐí Car µÄ³ÉÔ±´Ó Car* ת»»³É Engine* ¡£  * µÚ¶þ¸öÐÍʽ¿É´æÈ¡µ½»ùµ×Àà±ðµÄ "protected" ³ÉÔ±¡£  * µÚ¶þ¸öÐÍʽÔÊÐí Car ¸²¸Çµô Engine µÄÐéÄ⺯Êý¡£  ×¢Ò⣺˽Óм̳Ðͨ³£ÊÇÓÃÀ´»ñµÃ»ùµ×Àà±ð "protected:" ³ÉÔ±µÄ´æÈ¡È¨Á¦£¬µ«Õâͨ³£ Ö»ÊǸö¶Ì³ÌµÄ½â¾ö·½°¸¡£  ========================================  Q70£ºÎұȽϸÃÓÃÄÄÒ»ÖÖ£º³É·Ý»¹ÊÇ˽Óм̳У¿  ³É·Ý¡£  Õý³£ÇéÐÎÏ£¬Ä㲻ϣÍû´æÈ¡µ½Ì«¶àÆäËûÀà±ðµÄÄÚ²¿£¬µ«Ë½ÓÐ¼Ì³Ð»á¸øÄãÕâЩ¶îÍâµÄȨ Á¦£¨ÓëÔðÈΣ©¡£²»¹ý˽Óм̳в»ÊǺéË®ÃÍÊÞ£»ËüÖ»Êǵö໨ÐÄÁ¦È¥Î¬»¤°ÕÁË£¬ÒòΪËü Ôö¼ÓÁ˱ðÈ˶¯µ½ÄãµÄ¶«Î÷¡¢ÈÃÄãµÄ³Ìʽ³ö²î´íµÄ»ú»á¡£  ºÏ·¨¶ø³¤³ÌµØÊ¹ÓÃ˽Óм̳еÄʱ»úÊÇ£ºµ±ÄãÏëн¨Ò»¸ö Fred Àà±ð£¬Ëü»áÓõ½ Wilma Àà±ðµÄ³ÌʽÂ룬¶øÇÒ Wilma µÄ³ÌʽÂëÒ²»áºô½Ðµ½ÄãÕâ¸ö Fred Àà±ðÀïµÄÔË×÷ÐÐΪʱ ¡£ÕâÖÖÇéÐÎ֮ϣ¬Fred ºô½ÐÁË Wilma µÄ·ÇÐéÄ⺯Êý£¬Wilma Ò²ºô½ÐÁËËü×Ô¼ºµÄ¡¢»á ±» Fred Ëù¸²¸ÇµÄÐéÄ⺯Êý£¨Í¨³£ÊÇ´¿ÐéÄ⺯Êý£©¡£ÒªÓóɷÝÀ´×öµÄ»°£¬Ì«ÄÑÁË¡£          class Wilma {         protected:           void fredCallsWilma()             { cout << "Wilma::fredCallsWilma()\n"; wilmaCallsFred(); }           virtual void wilmaCallsFred() = 0;         };          class Fred : private Wilma {         public:           void barney()             { cout << "Fred::barney()\n"; Wilma::fredCallsWilma(); }         protected:           virtual void wilmaCallsFred()             { cout << "Fred::wilmaCallsFred()\n"; }         };  ========================================  Q71£ºÎÒÓ¦¸ÃÓÃÖ¸±êתÐÍ·½·¨£¬°Ñ¡¸Ë½ÓС¹ÑÜÉúÀà±ðת³ÉËüµÄ»ùµ×Â𣿠 µ±È»²»¸Ã¡£  ÒÔ˽ÓÐÑÜÉúÀà±ðµÄÔË×÷ÐÐΪ¡¢â·°éÀ´¿´£¬´ÓËüÉÏËݵ½»ùµ×Àà±ðµÄ¹ØÏµÎªÒÑÖªµÄ£¬ËùÒÔ ´Ó PrivatelyDer* ÍùÉÏת»»³É Base*£¨»òÊÇ´Ó PrivatelyDer& µ½ Base&£©Êǰ²È«µÄ £»Ç¿ÖÆ×ªÐÍÊDz»ÐèÒªÒ²²»¹ÄÀøµÄ¡£  È»¶øÓà PrivateDer µÄÈËÓ¦¸Ã±ÜÃâÕâÖÖ²»°²È«µÄת»»£¬ÒòΪ´ËÄËÁ¢×ãì¶ PrivateDer µÄ "private" ¾ö¶¨£¬Õâ¸ö¾ö¶¨ºÜÈÝÒ×ÔÚÈÕáá²»¾­²ì¾õ¾Í¸Ä±äÁË¡£  ========================================  Q72£º±£»¤¼Ì³Ð (protected inheritance) ºÍ˽Óм̳ÐÓкιØÁ¬£¿  ÏàËÆ´¦£ºÁ½Õß¶¼Äܸ²¸Çµô˽ÓУ¯±£»¤»ùµ×Àà±ðµÄÐéÄ⺯Êý£¬Á½Õß¶¼²»°ÑÑÜÉúµÄÀà±ðÊÓ Îª¡°Ò»ÖÖ¡±»ùµ×Àà±ð¡£  ²»ÏàËÆ´¦£º±£»¤¼Ì³Ð¿ÉÈÃÑÜÉúÀà±ðµÄÑÜÉúÀà±ðÖªµÀËüµÄ¼Ì³Ð¹ØÏµ£¨°ÑʵÐÐϸ½ÚÏÔÏÖ³ö À´£©¡£ËüÓкô¦£¨ÔÊÐí±£»¤¼Ì³ÐÀà±ðµÄ×ÓÀà±ð£¬½åÕâÏî¹ØÏµÀ´Ê¹Óñ£»¤»ùµ×Àà±ð£©£¬ Ò²Óдú¼Û£¨±£»¤¼Ì³ÐµÄÀà±ð£¬ÎÞ·¨¼ÈÏë¸Ä±äÕâÖÖ¹ØÏµ£¬¶øÓÖ²»ÆÆ»µµ½½øÒ»²½µÄÑÜÉúÀà ±ð£©¡£  ±£»¤¼Ì³ÐʹÓà ": protected" ÕâÖÖÓï·¨£º          class Car : protected Engine {           //...         };  ========================================  Q73£º"private" ºÍ "protected" µÄ´æÈ¡¹æÔòÊÇʲ÷᣿  Äõ×ÏÂÕâЩÀà±ðµ±Àý×Ó£º          class B                    { /*...*/ };         class D_priv : private   B { /*...*/ };         class D_prot : protected B { /*...*/ };         class D_publ : public    B { /*...*/ };         class UserClass            { B b; /*...*/ };  Ã»ÓÐÒ»¸ö×ÓÀà±ðÄÜ´æÈ¡µ½ B µÄ private ²¿·Ý¡£ ÔÚ D_priv ÄÚ£¬B µÄ public ºÍ protected ²¿·Ý¶¼±ä³É "private"¡£ ÔÚ D_prot ÄÚ£¬B µÄ public ºÍ protected ²¿·Ý¶¼±ä³É "protected"¡£ ÔÚ D_publ ÄÚ£¬B µÄ public ²¿·Ý»¹ÊÇ public£¬protected »¹ÊÇ protected  (D_publ is-a-kind-of-a B) ¡£ Class "UserClass" Ö»ÄÜ´æÈ¡ B µÄ public ²¿·Ý£¬Ò²¾ÍÊÇ£º°Ñ UserClass ´Ó B ÄÇ ¶ù·âÆðÀ´ÁË¡£  Óû°Ñ B µÄ public ³ÉÔ±ÔÚ D_priv »ò D_prot ÄÚÒ²±ä³É public£¬Ö»ÒªÔڸóÉÔ±µÄÃû ×ÖÇ°Ãæ¼ÓÉÏ "B::"¡£Æ©È磺ÏëÈà "B::f(int,float)" ³ÉÔ±ÔÚ D_prot ÄÚÒ²ÊÇ public µÄ»°£¬ÕÕÕâÑùд£º          class D_prot : protected B {         public:           B::f;    //×¢Ò⣺²»ÊÇд³É "B::f(int,float)"         };   ====================================== ¡ö¡õ µÚ£±£³½Ú£º³éÏ󻯣¨abstraction£© ======================================  Q74£º·ÖÀë½éÃæÓëʵ×÷ÊÇ×öʲ÷áÓõģ¿  ½éÃæÊÇÆóÒµÌå×îÓмÛÖµµÄ×ÊÔ´¡£Éè¼Æ½éÃæ»á±ÈÖ»°ÑÒ»¶Ñ¶ÀÁ¢µÄÀà±ðÆ´´ÕÆðÀ´À´µÃºÄʱ £¬ÓÈÆäÊÇ£º½éÃæÐèÒª»¨·Ñ¸ü¸ß½×ÈËÁ¦µÄʱ¼ä¡£  ¼ÈÈ»½éÃæÊÇÈç´ËÖØÒª£¬Ëü¾ÍÓ¦¸Ã±£»¤ÆðÀ´£¬ÒÔ±ÜÃâ±»×ÊÁϽṹµÈµÈʵ×÷ϸ½ÚÖ®±ä¸üËù Ó°Ïì¡£Òò´ËÄãÓ¦¸Ã½«½éÃæÓëʵ×÷·ÖÀ뿪À´¡£  ========================================  Q75£ºÔÚ C++ ÀÎÒ¸ÃÔõÑù·ÖÀë½éÃæÓëʵ×÷£¨Ïñ Modula-2 ÄÇÑù£©£¿  Óà ABC£¨¼ûÏÂÒ»Ôò FAQ£©¡£  ========================================  Q76£ºABC ("abstract base class") ÊÇʲ÷᣿  ÔÚÉè¼Æ²ãÃæ£¬ABC ¶ÔÓ¦µ½³éÏóµÄ¸ÅÄî¡£Èç¹ûÄãÎÊ»úеʦ¸¸ËµË