• <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>

            C++ Programmer's Cookbook

            {C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}

            c++ effective心得

            1.Operator overloading

             

            一般的:  c& c::operator=(const c&){。。。。return *this;};   --------格式  運算符的重載
               w = x = y = z = "hello";//可以返回引用,效率高
               a+b+c+d     //必須返回類,而不是返回引用
               c c::operator=(const c &){ 。。。。。。return *this;};
              
            Operators that can be overloaded
            +, -, *, /, %, ^, &, +=,-=,*=,/=, (), [], >>, ==,=,->,++,--, ->*, … new, delete
            Operators that can not be overloaded
            ., ::, ?:, .*
            //Notes for ++, -- operator
            區別:
             T& operator ++() //prefix ++a
             T operator++(int) //postfix a++


            一般情況下幾乎總要遵循operator=輸入和返回的都是類對象的引用的原則.
            必須返回一個對象時不要試圖返回一個引用,當需要在返回引用和返回對象間做決定時,你的職責是選擇可以完成正確功能的那個。至于怎么讓這個選擇所產生的代價盡可能的小,那是編譯器的生產商去想的事。

            2.
            const成員函數不被允許修改它所在對象的任何一個數據成員。mutable在處理“bitwise-constness限制”問題時是一個很好的方案,但它被加入到c++標準中的時間不長,所以有的編譯器可能還不支持它。
            explicit表示必須顯示的調用該函數。

            3.void including more times
            #findef
            #define

            #endif

            等價于
            #progma once


            4  .struct
                                         #pragma pack(pop, n)
            struct Employee{
             char cName[5];
             short  nAge;
                    float  dSalary;
             bool  bMarried;
            };
            sizeof(Employee) depends on struct member alignment. Default is 4 bytes alignment. sizeof(Employee) = 16
            2 bytes data wants to start from even address, 4 bytes data wants to start from address that is 4 times, 1 byte data can start from any address
            我們可以用以下改變默認的對齊方式。
            #pragma pack(pop, n)

            5。enum :It can define a set of const values.

            6。In fact, C++ compiler creates a global function for each member function, and add another parameter whose type is our class. 一般位類名_函數名_參數列表

            7。constructor   ※   deconstructor

            Copy Constructor 
            Copy constructor is a constructor that has a parameter whose type is class reference.
            and the class reference is const.
            eg:
            CRectangle( const CRectangle& other)
            eg:
               CComplex a;
               CComplex b=a; // Copy constructor is invoked
               b=a; //Assignment operator is invoked

            Converting Constructor
            一般定義位explicit函數,必須被顯示的調用


            8。const in class
              4 cases in a class
             const int member;只能在初始化列表里進行初始化
             int funct( const int nFactor,…);參數位常熟,在函數種不可被修改
             const int func(…); 返回的值位常熟不可以再被賦值和修改
             int func(…) const; 常函數,不可以修改所在類的成員,要修改的成員必須有mutable關鍵字


            9。inline
            You can see there is no function calling in assembly.
            A function defined within a class definition is an inline function.
            Although a function is inline, that whether to expend or not depends on compiler or its settings.一般函數里有循環的系統認為不內聯
            10.  Member-initializer-list
            Const, reference and base class constructor (that has arguments) must be initialized or called in member-initializer-list
            Members are initialized by order that they are defined in class definition, not by order their initializers are in member-initializer-list.
            eg:
            CCircle::CCircle() : PI(3.14159), m_dOrgX(0.0), m_dOrgY(0.0)
            {
            }
            基類的初始化,按照子類定義時的順序,不時初始化列表的順序

            11。 class Default functions
            Constructor [do nothing]
            Copy constructor [bitwise copy]
            Destructor ( ~ ) [do nothing]
            Assignment operator ( = ) [bitwise copy]
            Address operator ( & )
            Dereference operator ( * )

            //當有指針是自己定義拷貝構造和賦值
            eg:
                    if(other.m_pBuffer!=NULL) {
             m_pBuffer=new TCHAR[tcslen(other.m_pBuffer)+1];
             tcscpy(m_pBuffer,other.m_pBuffer);}

            12 this 指針
            Point lower;
            lower.setX(20).setY(30).doubleMe() ;
            因為:
                 Point& setX(int x) { _x = x; return *this;}  
                 Point& setY(int y) { _y = y; return *this;}  
                 void doubleMe()
             {  _x *= 2;
              _y *= 2;  
             }

            13。    const   static     int PI=1;類中的成員直接賦值,只有這一種情況可以,必須為int.

                    double CCircle::PI = 1.0;類中的靜態成員初始化必須再類外,而且還的有類型, 如前面.
                    靜態成員的初始化不能再構造函數中進行!

            14.  Dynamic_cast
            The dynamic_cast is used for safe casting from a pointer to a base class to a pointer to a derived class, often referred to as safe down casting. It is used when one must use the features of the derived class that are not present in the base class.

            typeid            typeid( object );
            The typeid operator returns a reference to a type_info object that describes `object`.

            If the expression is of class type and the class contains one or more virtual member functions, then the answer may be different than the type of the expression itself. For example, if the expression is a reference to a base class, the typeid operator indicates the derived class type of the underlying object.

            PTTI運行時刻類型識別允許“用指向基類的指針或引用來操作對象”的程序能夠獲取到“這些指針或引用所指的對象”的實際派生類型。
            1. Dynamic_cast它允許在運行時刻進行類型轉換,從而使程序能夠在一個類層次結構中安全地轉換類型,把基類指針轉化成派生類指針,或把指向基類的左值轉換成派生類的引用,當然只有在保證轉換能夠成功的情況下可以。
            2. typeid操作符,它指出指針或引用指向的對象的實際派生類型。它在程序中可以用于獲取一個表達式是一個類類型,并且含有一個或多個虛函數成員,則答案會不同于表達式本身的類型。例如,如果表達式是一個基類的引用,則typeid會指出底層對象的派生類類型。


            15. What exceptions can a function throw if it has an exception specification of the form throw()?  (6’) throw all kinds of exceptions
            If  it has no exception specification?
            What means the syntax: catch (…) catch all types of exceptions

            posted on 2005-11-09 12:56 夢在天涯 閱讀(1858) 評論(2)  編輯 收藏 引用 所屬分類: CPlusPlus

            評論

            # re: c++ effective心得 2006-08-17 12:26 keyws

            T& operator ++() //prefix ++a
            T operator++(int) //postfix a++
            怎么解釋這個?即編譯器如何決定調用哪個?

              回復  更多評論   

            # re: c++ effective心得 2008-10-14 14:33 ggz

            @keyws
            一個是++a 一個是a++  回復  更多評論   

            公告

            EMail:itech001#126.com

            導航

            統計

            • 隨筆 - 461
            • 文章 - 4
            • 評論 - 746
            • 引用 - 0

            常用鏈接

            隨筆分類

            隨筆檔案

            收藏夾

            Blogs

            c#(csharp)

            C++(cpp)

            Enlish

            Forums(bbs)

            My self

            Often go

            Useful Webs

            Xml/Uml/html

            搜索

            •  

            積分與排名

            • 積分 - 1808073
            • 排名 - 5

            最新評論

            閱讀排行榜

            久久精品国产亚洲av麻豆图片| 久久99国内精品自在现线| 91超碰碰碰碰久久久久久综合 | 国产精品视频久久| 一级做a爰片久久毛片人呢| 久久久久亚洲av成人无码电影 | 亚洲午夜久久久久久久久电影网| 国产成人精品三上悠亚久久| 国内精品久久久久影院日本| 精品久久久久久久中文字幕| 少妇人妻综合久久中文字幕| 91久久精品91久久性色| 亚洲欧洲精品成人久久曰影片| 久久亚洲中文字幕精品有坂深雪 | 久久强奷乱码老熟女| 亚洲AV无一区二区三区久久| 精品国产热久久久福利| 久久亚洲国产成人精品性色 | 亚洲成色www久久网站夜月 | 国产精品VIDEOSSEX久久发布| 思思久久99热只有频精品66| 久久99国产精品久久99| 一本色道久久88精品综合| 欧美精品丝袜久久久中文字幕 | 国产精品青草久久久久福利99 | 亚洲国产成人久久一区久久| 国产精品免费福利久久| 99久久无色码中文字幕人妻| 精品无码久久久久久久动漫| 99久久免费国产精精品| 无码AV中文字幕久久专区| 中文字幕亚洲综合久久菠萝蜜| 国产午夜电影久久| 色综合久久久久| 久久天堂AV综合合色蜜桃网| 免费久久人人爽人人爽av| 日韩精品无码久久一区二区三| 91精品观看91久久久久久| 99久久精品无码一区二区毛片 | 久久国产热这里只有精品| 91精品日韩人妻无码久久不卡 |