• <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 閱讀(1653) 評論(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
            大家冷靜點,保持學習的樂土:)  回復  更多評論
              

            久久精品国产精品亚洲艾草网美妙 | 一本一道久久a久久精品综合| 国产午夜电影久久| 久久久无码精品午夜| 欧美亚洲国产精品久久高清| 国产99精品久久| 三级片免费观看久久| 久久精品国产第一区二区三区 | 成人资源影音先锋久久资源网| 91久久精品电影| 亚洲精品乱码久久久久久中文字幕| 久久福利青草精品资源站| 久久人人爽人人精品视频| 久久精品www人人爽人人| 久久久精品日本一区二区三区| 久久人人爽爽爽人久久久| 久久天天躁狠狠躁夜夜2020老熟妇| 久久久噜噜噜www成人网| 无夜精品久久久久久| 色综合久久久久| 精品久久久噜噜噜久久久| 九九精品久久久久久噜噜| 国产午夜福利精品久久| 好久久免费视频高清| 亚洲国产精品18久久久久久| 亚洲欧洲久久久精品| 久久久精品人妻无码专区不卡| 久久精品国内一区二区三区| 国产成人精品综合久久久久| 午夜精品久久久久久| 国产香蕉97碰碰久久人人| 精品精品国产自在久久高清| 亚洲精品乱码久久久久久| 久久国产色av免费看| 无码人妻久久一区二区三区蜜桃| 精品久久久久久国产三级| 久久综合狠狠色综合伊人| 亚洲精品高清久久| 久久久久黑人强伦姧人妻 | 久久久久亚洲精品中文字幕| 国产综合精品久久亚洲|