• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              18 隨筆 :: 2 文章 :: 10 評(píng)論 :: 0 Trackbacks

              當(dāng)將一個(gè)派生類(lèi)強(qiáng)制轉(zhuǎn)換成基類(lèi)類(lèi)型的時(shí)候,轉(zhuǎn)換方式不一樣會(huì)產(chǎn)生不一樣的效果。例如該代碼:static_cast<base&>(*this) ;

            base 是基類(lèi),這句代碼是將當(dāng)前對(duì)象強(qiáng)制轉(zhuǎn)化為積累類(lèi)型的對(duì)象的引用,這樣的話不會(huì)再次調(diào)用基類(lèi)的構(gòu)造函數(shù)。若轉(zhuǎn)換成基類(lèi)對(duì)象那就要調(diào)用基類(lèi)的構(gòu)造函數(shù)并創(chuàng)建出新的對(duì)象來(lái)了。


             

            完整的代碼:

            #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;
             

            }

            輸出的結(jié)果是

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

            由此可見(jiàn),  static_cast<A&>(*b1) = (*b2); 類(lèi)型轉(zhuǎn)換完成之后的賦值操作知識(shí)將基類(lèi)的變量進(jìn)行了賦值,當(dāng)然,前提是基類(lèi)沒(méi)有重載“=”運(yùn)算符的時(shí)候,不會(huì)涉及到派生類(lèi)。

             

             

            posted on 2008-06-04 15:12 yang-chunlei 閱讀(262) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            99久久婷婷国产一区二区| 色青青草原桃花久久综合| 1000部精品久久久久久久久| 好属妞这里只有精品久久| 亚洲综合精品香蕉久久网97| 手机看片久久高清国产日韩| 影音先锋女人AV鲁色资源网久久| 久久亚洲精品视频| 久久亚洲日韩精品一区二区三区| 国产精品激情综合久久| 亚洲成色WWW久久网站| 伊人久久免费视频| 久久香蕉超碰97国产精品| 欧美日韩成人精品久久久免费看 | 久久狠狠色狠狠色综合| 久久五月精品中文字幕| 欧美777精品久久久久网| 日韩精品无码久久久久久| 国产精品亚洲综合久久| 91精品国产综合久久香蕉 | 国产精品成人无码久久久久久 | 精品人妻伦九区久久AAA片69| 99久久国语露脸精品国产| 精品综合久久久久久97| 中文成人久久久久影院免费观看| 精品久久久久久99人妻| 久久亚洲精品中文字幕三区| 久久久久人妻一区二区三区vr | 97精品久久天干天天天按摩| 中文字幕久久精品无码| 久久笫一福利免费导航| 欧美精品丝袜久久久中文字幕| 一本久久久久久久| 国产高潮国产高潮久久久91| 亚洲国产精品热久久| 国产激情久久久久影院老熟女| 国内精品久久久久影院免费| 97r久久精品国产99国产精| 久久伊人精品青青草原高清| 久久久国产精品福利免费| 精品久久久久久国产免费了|