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

            MySpace

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              18 隨筆 :: 2 文章 :: 10 評論 :: 0 Trackbacks

              當將一個派生類強制轉換成基類類型的時候,轉換方式不一樣會產生不一樣的效果。例如該代碼:static_cast<base&>(*this) ;

            base 是基類,這句代碼是將當前對象強制轉化為積累類型的對象的引用,這樣的話不會再次調用基類的構造函數。若轉換成基類對象那就要調用基類的構造函數并創建出新的對象來了。


             

            完整的代碼:

            #ifdef HAVE_CONFIG_H
            #include <config.h>
            #endif

            #include <iostream>
            #include <cstdlib>

            #include "stdio.h"
            #include <string>
            #include <iostream>

            using namespace std;


             class A

             {

             public:

              A():i_(0)

              {

               i_++;

             

               cout << " A::A() is Exce." << endl;

              }

             
             A(int i) : i_(i)
             {
              i_++;
             }


              virtual ~A()

              {

               i_--;

             

               cout << " A::~A() is Exce." << endl;

              }

             

             public:
              int i_;

             };

             

             class B : public A

             {

             public:

              B():j_(0)

              {

               j_++;

             

               cout << " B::B() is Exce." << endl;

              }

             
              B(int j) : A(j) , j_(j)
              {
               j_++;
              }
             
             


              ~B()

              {

               j_--;

             

               cout << " B::~B() is Exce." << endl;

              }
             


             public:

              int j_;

             };


            int main(int argc, char *argv[])
            {

              B *b1 = new B(5);
              B *b2 = new B(8);
             
              cout << "before changer " << endl;
             
              cout << "b1.i_ = " << b1->i_ << endl;
             
              cout << "b1.j_ = " << b1->j_ << endl;
             
              static_cast<A&>(*b1) = (*b2);
             
              cout << "affter changer " << endl;
             
              cout << "b1.i_ = " << b1->i_ << endl;
             
              cout << "b1.j_ = " << b1->j_ << endl;
             
              return 0;
             

            }

            輸出的結果是

            before changer
            b1.i_ = 6
            b1.j_ = 6
            affter changer
            b1.i_ = 9
            b1.j_ = 6

            由此可見,  static_cast<A&>(*b1) = (*b2); 類型轉換完成之后的賦值操作知識將基類的變量進行了賦值,當然,前提是基類沒有重載“=”運算符的時候,不會涉及到派生類。

             

             

            posted on 2008-06-04 15:12 yang-chunlei 閱讀(273) 評論(0)  編輯 收藏 引用
            久久人人超碰精品CAOPOREN| 国产∨亚洲V天堂无码久久久| 久久精品国产色蜜蜜麻豆| 综合久久精品色| 久久久久人妻一区二区三区vr| 久久精品国产只有精品2020| 日韩精品无码久久一区二区三| 亚洲国产美女精品久久久久∴| 亚洲狠狠综合久久| 久久天天躁狠狠躁夜夜avapp| 成人国内精品久久久久影院| 亚洲а∨天堂久久精品| 国产精品99久久久久久人| 久久青青色综合| 爱做久久久久久| 99久久国语露脸精品国产| 亚洲伊人久久成综合人影院 | 久久久久亚洲AV无码专区体验| 久久99毛片免费观看不卡| 亚洲精品无码久久久久AV麻豆| 久久99精品久久久久婷婷| 国产亚洲精久久久久久无码77777| 97久久超碰成人精品网站| 精品久久久无码人妻中文字幕| 久久国产精品无码网站| 青青青青久久精品国产h| 精品久久久噜噜噜久久久| 久久综合狠狠综合久久综合88| 人人妻久久人人澡人人爽人人精品| 国产免费久久久久久无码| 99久久99这里只有免费的精品| 狠狠色噜噜色狠狠狠综合久久| 无码精品久久一区二区三区 | 亚洲欧美伊人久久综合一区二区| 亚洲国产精品无码久久青草 | 丰满少妇人妻久久久久久4| 国产亚洲欧美成人久久片| 日韩精品久久无码人妻中文字幕| 久久久国产打桩机| 久久久久无码精品国产| 亚洲成色WWW久久网站|