美文网首页脑洞大开新观点程序员
为什么 "Life is short",而不

为什么 "Life is short",而不

作者: 李欣宜 | 来源:发表于2016-01-20 16:48 被阅读414次

    原回答地址:https://www.zhihu.com/question/33311526/answer/74111845

    life是以秒(Second)计算的。

    比如我们算一个89岁的老人的生命那么就有89*365*24*60*60=2806704000超过了signed int的最大值2^15-1,当然不能用short了,但没有超过unsigned int的最大范围2^16-1

    class TheElder{
        private: unsigned int life; 
                 int VisitedCountries; 
                 int Languages;
                 int MusicalInstruments;
                 …… 
        public: TheElder(int time,int CountryNumber,int LanguageNumber,int MusicalInstrumentNumber);
                 void Recite(string title="GettysburgAddress" ); 
                 void CombHair(); 
                             void ApplyForProfessor();
                 void PlayWithThreeOwls(); 
                  …… 
    };
    

    那我们就可以这样定义一个类了。可是life不应该是一个只与时间相关的字段,中国有句老话叫事在人为

    class Hasi { 
        private: static time_t HisLife;
                 time_t MyLife; 
                 int LevelOfKnowledge; 
                 int SilentDays;
        public: Hasi(time_t life) :MyLife(life) {} bool RejuvenateForHim(); 
                bool WearRedClothes(); 
    };
                
    bool Hasi::RejuvenateForHim() {
         if (HisLife>0) {
             HisLife++;
             cout << "Excited! +1 Sec!" << endl; 
             return true; 
            } 
         else {
            cout << "I'm angry!" << endl;
            return false;
            }
    }
    
    bool Hasi::WearRedClothes() {
         if (MyLife>0) { 
            HisLife += MyLife / 2.0;
            MyLife /= 2.0; 
            return true;
            }
            return false;
    }
    
    time_t GetHisCurrentLife() {
        struct tm* birth = new tm();
        time_t time=0; 
        birth->tm_year = 1926-1900;
        birth->tm_mon = 8 - 1;
        birth->tm_mday = 17 - 1;
        birth->tm_hour = 3;
        birth->tm_min = 0;
        birth->tm_sec = 1;
        birth->tm_wday = 1;
        birth->tm_yday = 260;
        time = mktime(birth);
        delete birth;
        return time;
     } 
    
    time_t Hasi::HisLife = GetHisCurrentLife();
    

    time_t也是用以秒计时的一种数据类型,实际上就是long,微软钦定用这个类型来表示时间,必然有他们的道理。这些方法也可以充分说明人定胜天。

    一尺之棰,日取其半,万世不竭

    ——《庄子·天下篇》

    既然大家都那么热情的给他增加生命,那么long也是不够的,早晚会溢出的。我们这个样子是不行的,所以必须开拓一下思路。

    enum lifetime{
        finite, infinite
        };
    enum Language{
        Chinese, English, Japanese, Romanian, Russian, Spanish, French 
        };
    …… 
    class TheElder{
        private: lifetime life;
        set<Language> languages;
        ……
        public: TheElder():
        life(infinite){}
        ……
    }; 
    
    class CommonPerson{
        private: lifetime life;
        Language NativeLanguage;
        ……
        public:
        CommonPerson():life(finite){}
        ……
    };
    

    小知不及大知,小年不及大年。奚以知其然也?朝菌不知晦朔,蟪蛄不知春秋,此小年也。楚之南有冥灵者,以五百岁为春,五百岁为秋。上古有大椿者,以八千岁为春,八千岁为秋。此大年也。而彭祖乃今以久特闻,众人匹之。不亦悲乎!

    ——《逍遥游》

    当我们这些生命时长可以用数字计算的人在讨论life到底用什么数据类型可以存放的时候,生命时间无法用数值表达的人轻轻一推黑框眼镜,嘲笑道,你们啊,肤浅。我们对世界的认知总是逃不出自我的局限,因为我们都是普通人啊,怎么能去以我们的方式去理解一个不普通的生命呢?

    相关文章

      网友评论

      本文标题:为什么 "Life is short",而不

      本文链接:https://www.haomeiwen.com/subject/tjdlkttx.html