• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              3 隨筆 :: 0 文章 :: 14 評論 :: 0 Trackbacks

            初學C++,這是一個構造函數重載的小小程序。int 造成了溢出,我到現在還不知道是怎么一回事?把紅色標志的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 閱讀(1654) 評論(8)  編輯 收藏 引用

            評論

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

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

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

            可以把class date的聲明改成以下形式,整個程序效果是一樣的。
            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();
            };

            這個問題就是C++中的命名空間相關的,
            一個class是一個空間,就如中國
            類的成員函數是其下的子空間,你可以當作是北京市。
            中國國家主席是錦濤,
            北京市某家庭剛出生的一個小孩也被你父親起名為錦濤。
            這樣在他們家里每次叫錦濤的時候,
            你覺得他們在叫誰?

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

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

              回復  更多評論
              

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

            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;
            }
            舉這個例子,
            你在函數內部定義了一個新的變量:
            int dayth=0; 賦值為0,所以在這個函數中類的屬性(或者變量)就不再包含。當該函數結束時,這個函數內部的變量就被釋放了,而在調用這個函數date(int day,int month)的過程中,都沒有改變你的類屬性dayth,而調用類函數getdate()時,使返回的類的屬性dayth。
            拜托,真的應該先看完書再做這些,居然還問int做了什么。
            還有樓上兩位,如果是命名沖突,在編譯時就會報錯了。  回復  更多評論
              

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

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

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

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

            # re: int 到底在干什么? 2006-03-30 22:29 笑笑生
            謙虛點  回復  更多評論
              

            # re: int 到底在干什么? 2006-04-03 00:43
            大家冷靜點,保持學習的樂土:)  回復  更多評論
              

            久久无码AV中文出轨人妻| 国产一区二区精品久久| 久久精品国产99久久香蕉| 18岁日韩内射颜射午夜久久成人| 亚洲精品乱码久久久久久久久久久久 | 久久青青草原亚洲av无码| 2022年国产精品久久久久| 久久青青草视频| 久久国产热这里只有精品| 日韩人妻无码精品久久久不卡| 久久人人爽人人精品视频| 日本精品久久久中文字幕| 色妞色综合久久夜夜| 久久亚洲精品国产亚洲老地址 | 久久久久久久国产免费看| 久久国产乱子精品免费女| 国产成人久久精品激情| 久久国产精品99精品国产| 精品蜜臀久久久久99网站| 伊人久久大香线蕉亚洲五月天| 精品久久综合1区2区3区激情| 青青热久久综合网伊人| 久久久久九九精品影院| 国产精品一区二区久久精品涩爱| 波多野结衣久久| aaa级精品久久久国产片| 久久精品国产亚洲7777| 亚洲国产精品一区二区久久hs| 久久天天躁狠狠躁夜夜网站| 久久亚洲欧洲国产综合| 色欲久久久天天天综合网精品| 99国产欧美精品久久久蜜芽| 久久国产精品波多野结衣AV| 日本强好片久久久久久AAA| 精品国产乱码久久久久久1区2区| 99久久无码一区人妻| 久久www免费人成看片| 99久久国产亚洲高清观看2024 | 久久久久国产精品麻豆AR影院| 国产精品毛片久久久久久久| 一本色道久久综合亚洲精品|