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

            頂著一頭亂發(fā)的獅子

            堅(jiān)定的理想主義者.

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              3 隨筆 :: 0 文章 :: 14 評(píng)論 :: 0 Trackbacks

            初學(xué)C++,這是一個(gè)構(gòu)造函數(shù)重載的小小程序。int 造成了溢出,我到現(xiàn)在還不知道是怎么一回事?把紅色標(biāo)志的int去掉輸入就正確了。WHY?
            #include<iostream.h>
            class date{

                int dayth;
            public:
                date(int day);
                date(int day,int month);
                date(int day,int month,int year);
                int getdate();
            };

            date::date(int day){

            dayth=day;

            }

            date::date(int day,int month){
                int i;
                int th[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
                int dayth=0;
                for(i=0;i<month;i++)
                {dayth=dayth+th[i];}
                dayth=dayth+day;
            }

            date::date(int day,int month,int year){
                int i;
                int th[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
                int dayth=0;

                if((year%4==0&&year%100!=0)||year%400==0)
             {

                     for(i=0;i<month;i++)
                     {dayth=dayth+th[i];}
                     dayth=dayth+day;
                     if(month>2)
                     dayth=dayth+1;
             }
            else{


               for(i=0;i<month;i++)
               {dayth=dayth+th[i];}
               dayth=dayth+day;

            }

            }

               int date::getdate(){
               return dayth;
            }

            int main(){

            int day;
            int month;
            int year;
            cout<<"輸入日期:";
            cin>>day;
            cout<<"輸入月份:";
            cin>>month;
            cout<<"輸入年份:";
            cin>>year;
            date q1(day);
            date q2(day,month);
            date q3(day,month,year);
            cout<<"此日是一年的第"<<q1.getdate()<<"天\n";
            cout<<"此日是一年的第"<<q2.getdate()<<"天\n";
            cout<<"此日是一年的第"<<q3.getdate()<<"天\n";
            return 1;
            }

            posted on 2005-12-12 21:23 10003 閱讀(1653) 評(píng)論(8)  編輯 收藏 引用

            評(píng)論

            # re: int 到底在干什么? 2005-12-13 01:31 蔡蔡
            你不是在class date聲明中聲明了一個(gè)成員變量是dayth了嘛,在date的范疇中,dayth被認(rèn)為已經(jīng)定義了,不能再在date類中定義其他叫做dayth的變量了。  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2005-12-13 10:01 e夜星空
            'int'在干你讓他干的事!
            就像以下語句中的類型'float'一樣,是聲明其后變量的類型:
            float fool_donkey;
            自然以下語句是在聲明clever_donkey為int類型變量同時(shí)初始化其值為748:
            int clever_donkey = 748;

            如果你把函數(shù)中的兩個(gè)dayth前的類型'int'改為'float',就好解釋一些了:
            在類date里聲明了一個(gè)整型的變量名為dayth,而在date的成員函數(shù)date::date()里又聲明了一個(gè)float型變量,它的名字也叫dayth。
            注意上面的*‘也’*字,它表明函數(shù)里的dayth并不是類成員的dayth,
            它們只是同名的不同變量,
            所以函數(shù)對(duì)dayth賦值都是對(duì)它自己聲明的臨時(shí)變量操作(與那個(gè)同名的類成員無關(guān))。

            可以把class date的聲明改成以下形式,整個(gè)程序效果是一樣的。
            class date{
            //int dayth;
            int not_used_dayth;

            public:
            date(int day);
            date(int day,int month);
            date(int day,int month,int year);
            int getdate();
            };

            這個(gè)問題就是C++中的命名空間相關(guān)的,
            一個(gè)class是一個(gè)空間,就如中國(guó)
            類的成員函數(shù)是其下的子空間,你可以當(dāng)作是北京市。
            中國(guó)國(guó)家主席是錦濤,
            北京市某家庭剛出生的一個(gè)小孩也被你父親起名為錦濤。
            這樣在他們家里每次叫錦濤的時(shí)候,
            你覺得他們?cè)诮姓l?

            那么回到你的程序中,
            明明類已經(jīng)有一個(gè)錦濤(dayth),
            你就是給你的孩子起名叫錦濤(dayth),甚至連姓都和人家一樣(int),
            你還說不清楚你在干什么?還問人家我那個(gè)'int'起什么作用?

            笑話!
            你把紅色的'int'去掉又是什么意思呢?
            沒有int的語句如下:
            clever_donkey = you;
            是一個(gè)賦值語句,就像你在家說“錦濤吃飯了”,
            毫沒有給你們家的小孩起名為錦濤的意思,
            以后每行語句中出現(xiàn)的“錦濤”都是我們的國(guó)家主席該做什么什么。

              回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2005-12-13 15:40 初始化
            不知道樓上兩位是不是真的懂點(diǎn)語言,或者OO,
            這是一個(gè)很基礎(chǔ)的關(guān)于全局變量和局部變量的問題,當(dāng)在函數(shù)內(nèi)部定義了與全局變量同名的變量時(shí),本函數(shù)內(nèi)處理局部變量,但是在你調(diào)用getdate()時(shí),是返回的這個(gè)類的全局變量,而不是類中某個(gè)函數(shù)的局部變量。函數(shù)中的局部變量在離開這個(gè)類后就釋放了。
            拜托各位先好好學(xué)習(xí)基礎(chǔ)知識(shí),這種問題都沒有人愿意來理了。

            date::date(int day,int month){
            int i;
            int th[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
            int dayth=0;
            for(i=0;i<month;i++)
            {dayth=dayth+th[i];}
            dayth=dayth+day;
            }
            舉這個(gè)例子,
            你在函數(shù)內(nèi)部定義了一個(gè)新的變量:
            int dayth=0; 賦值為0,所以在這個(gè)函數(shù)中類的屬性(或者變量)就不再包含。當(dāng)該函數(shù)結(jié)束時(shí),這個(gè)函數(shù)內(nèi)部的變量就被釋放了,而在調(diào)用這個(gè)函數(shù)date(int day,int month)的過程中,都沒有改變你的類屬性dayth,而調(diào)用類函數(shù)getdate()時(shí),使返回的類的屬性dayth。
            拜托,真的應(yīng)該先看完書再做這些,居然還問int做了什么。
            還有樓上兩位,如果是命名沖突,在編譯時(shí)就會(huì)報(bào)錯(cuò)了。  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2005-12-15 09:16 e夜星空
            不知道上一樓在賣弄什么?
            1. 是說它很懂語言,很懂面向?qū)ο驩O?可是在它的字里行間并沒有什么面向?qū)ο蟮臇|西。
            2. 是說它本人不是人嗎(見第4行“這種問題都沒有人愿意來理了”),那能否以真面目示人,你是豬呢還是狗?
            3. 另外它在賣弄一些概念也是亂七八糟的,大部分與原問題毫不相干.原問題只是構(gòu)造函數(shù)自動(dòng)變量覆蓋同名的成員變量。你扯什么全局變量與局部變量?另外你愿意解答問題固然是好,雖然你自認(rèn)為不是人,大家也不會(huì)怪你,答得不好也沒什么。但你不應(yīng)該通過攻擊人來顯示你的智商能與人相當(dāng)。
            4. 你還賣弄在函數(shù)內(nèi)定義了與成員變量同名的變量,在這個(gè)函數(shù)就不能再包含類的那個(gè)成員變量了?自己回去看看書吧。
            5. 什么?看不懂,那以后你少在公眾場(chǎng)合放屁。  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2005-12-15 09:30 e夜星空
            重新回到原來的問題,解答一下:
            1. 本程序不是整數(shù)溢出的事。getdate輸出的值是一個(gè)未經(jīng)初始化的整數(shù)值。與以下代碼類似:
            int a;
            std::cout << a << std::endl;
            2. 本這段代碼先后定義了3個(gè)名為dayth的變量,互不相干。同名卻不沖突,因?yàn)樗麄冊(cè)诓煌淖饔糜蚍秶?
            3. 重載的兩個(gè)構(gòu)造函數(shù)中所操作的是它們通過int定義的自動(dòng)本地變量dayth,而始終未修改類成員變量dayth。
            構(gòu)造函數(shù)使用如下的初始化列表后,q2.getdate()和q3.getdate()返回的都是初始化的值(下例為0).
            date::date(int day,int month) : dayth(0){
            ...
            }

            date::date(int day,int month,int year) : dayth(0){
            ...
            }  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2005-12-16 11:51 fancy
            是可以運(yùn)行的啊,函數(shù)里面的那個(gè)變量在函數(shù)退出去的時(shí)候就被銷毀了,要想保存到class類里的dayth可以這樣調(diào)用this->dayth=dayth+day  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2006-03-30 22:29 笑笑生
            謙虛點(diǎn)  回復(fù)  更多評(píng)論
              

            # re: int 到底在干什么? 2006-04-03 00:43
            大家冷靜點(diǎn),保持學(xué)習(xí)的樂土:)  回復(fù)  更多評(píng)論
              


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


            久久精品男人影院| 久久久久高潮毛片免费全部播放| 韩国三级大全久久网站| 88久久精品无码一区二区毛片| 国产高潮国产高潮久久久91| 思思久久99热免费精品6| 无码人妻久久一区二区三区免费丨 | 久久久久久久免费视频| 国产精品对白刺激久久久| 久久青青国产| 久久99精品国产麻豆宅宅| 久久综合伊人77777| 狠狠久久亚洲欧美专区| 2021国产精品午夜久久| 久久青青草原国产精品免费| 久久夜色精品国产噜噜亚洲a| 国产99久久精品一区二区| 国产精品免费久久久久影院| 亚洲欧洲中文日韩久久AV乱码| 国产精品美女久久久| 伊人久久精品影院| 久久久无码精品亚洲日韩软件| 国内精品久久久人妻中文字幕| 国产精品99久久久精品无码| 久久精品国产精品亚洲下载| 国内精品久久久久影院日本| 日本五月天婷久久网站| 欧美激情精品久久久久久| 国内精品久久久久久久涩爱| 久久r热这里有精品视频| www.久久精品| 精品久久久久久中文字幕| 久久国产热精品波多野结衣AV| 亚洲精品无码成人片久久| 久久91精品国产91久| 7777精品伊人久久久大香线蕉 | 久久夜色精品国产亚洲| 国产亚洲欧美成人久久片| 久久久久国产一级毛片高清版| 久久久久久九九99精品| 91精品国产乱码久久久久久|