• <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++博客 :: 首頁(yè) :: 新隨筆 :: 聯(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類(lèi)中定義其他叫做dayth的變量了。  回復(fù)  更多評(píng)論
              

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

            如果你把函數(shù)中的兩個(gè)dayth前的類(lèi)型'int'改為'float',就好解釋一些了:
            在類(lèi)date里聲明了一個(gè)整型的變量名為dayth,而在date的成員函數(shù)date::date()里又聲明了一個(gè)float型變量,它的名字也叫dayth。
            注意上面的*‘也’*字,它表明函數(shù)里的dayth并不是類(lèi)成員的dayth,
            它們只是同名的不同變量,
            所以函數(shù)對(duì)dayth賦值都是對(duì)它自己聲明的臨時(shí)變量操作(與那個(gè)同名的類(lèi)成員無(wú)關(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è)問(wèn)題就是C++中的命名空間相關(guān)的,
            一個(gè)class是一個(gè)空間,就如中國(guó)
            類(lèi)的成員函數(shù)是其下的子空間,你可以當(dāng)作是北京市。
            中國(guó)國(guó)家主席是錦濤,
            北京市某家庭剛出生的一個(gè)小孩也被你父親起名為錦濤。
            這樣在他們家里每次叫錦濤的時(shí)候,
            你覺(jué)得他們?cè)诮姓l(shuí)?

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

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

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

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

            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ù)中類(lèi)的屬性(或者變量)就不再包含。當(dāng)該函數(shù)結(jié)束時(shí),這個(gè)函數(shù)內(nèi)部的變量就被釋放了,而在調(diào)用這個(gè)函數(shù)date(int day,int month)的過(guò)程中,都沒(méi)有改變你的類(lèi)屬性dayth,而調(diào)用類(lèi)函數(shù)getdate()時(shí),使返回的類(lèi)的屬性dayth。
            拜托,真的應(yīng)該先看完書(shū)再做這些,居然還問(wèn)int做了什么。
            還有樓上兩位,如果是命名沖突,在編譯時(shí)就會(huì)報(bào)錯(cuò)了。  回復(fù)  更多評(píng)論
              

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

            # re: int 到底在干什么? 2005-12-15 09:30 e夜星空
            重新回到原來(lái)的問(wèn)題,解答一下:
            1. 本程序不是整數(shù)溢出的事。getdate輸出的值是一個(gè)未經(jīng)初始化的整數(shù)值。與以下代碼類(lèi)似:
            int a;
            std::cout << a << std::endl;
            2. 本這段代碼先后定義了3個(gè)名為dayth的變量,互不相干。同名卻不沖突,因?yàn)樗麄冊(cè)诓煌淖饔糜蚍秶?
            3. 重載的兩個(gè)構(gòu)造函數(shù)中所操作的是它們通過(guò)int定義的自動(dòng)本地變量dayth,而始終未修改類(lèi)成員變量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í)候就被銷(xiāo)毀了,要想保存到class類(lèi)里的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í)的樂(lè)土:)  回復(fù)  更多評(píng)論
              


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


            国产精品99久久久精品无码| 久久久久久一区国产精品| 国产精品永久久久久久久久久| 漂亮人妻被黑人久久精品| 婷婷久久五月天| 亚洲国产成人久久笫一页| 久久国产精品无码网站| 99久久精品免费看国产| 99久久综合国产精品二区| 99久久www免费人成精品 | 久久久久久国产精品美女| 久久国产精品-国产精品| 九九久久精品无码专区| 久久亚洲天堂| 久久久久99这里有精品10| 久久水蜜桃亚洲av无码精品麻豆| 九九精品99久久久香蕉| 曰曰摸天天摸人人看久久久| 香蕉99久久国产综合精品宅男自 | 久久久久18| 欧洲人妻丰满av无码久久不卡| 久久96国产精品久久久| 一级女性全黄久久生活片免费| 天天躁日日躁狠狠久久| 国产精品久久久天天影视| 亚洲国产精品综合久久一线 | 久久久久久久久久久久中文字幕 | 久久精品国产精品亜洲毛片| 亚洲国产成人久久综合一区77| 久久噜噜电影你懂的| 久久精品亚洲欧美日韩久久| 狠狠综合久久AV一区二区三区 | 亚洲乱码日产精品a级毛片久久| 久久偷看各类wc女厕嘘嘘| 国产激情久久久久影院老熟女| 亚洲国产另类久久久精品黑人 | 日本欧美国产精品第一页久久| 成人国内精品久久久久影院| 亚洲国产一成久久精品国产成人综合| 久久99精品综合国产首页| 99久久精品国产一区二区 |