C++积累02_隔定时长放炮问题的OOP解决
今天又來寫博客啦!
 昨天使用了面向過程的思維解決了隔定時長放炮問題。但今天又有了一些其他想法:
- 正是想到c++這個語言可以使用面向對象的編程,所以我才會想到,昨天的這個隔定時長放炮問題里面,可以如何應用OOP呢?
- 看了看,昨天的程序里面最多的是對數組的操作,其實可以把這些操作封裝到類中。
- 同時也可以學習到多文件編程的好處。
- 也就算是復習了一遍OOP編程的知識點~
想看昨天的面向過程思維的,點擊:萌新的c++積累01_幾個人各隔一定時長放炮問題
題目如下
甲、乙、丙三人同時放鞭炮, 甲每隔 a 秒放一個, 乙每隔 b 秒放一個, 丙每隔 c 秒放一個, 他們各自都放 d 個。對給定的 a、b、c 和 d(a,b,c>0) (d是正整數) 求能聽到多少聲鞭炮響。 假設兩個響聲相差小于 0.001秒時,人無法區分。
本解決方法的思路
- 正是因為昨天那個程序里極多的操作都是操作數組,為了操作數組有著各式循環與條件判斷,煞是復雜。所以,可以考慮把所有的操作都封裝到一個類中,把各操作定義為類的成員函數。
- 既可以采用多文件的形式來定義類、定義類的成員函數、寫主程序,
- 也可以采用單文件的形式,把所有的都寫到一起。
首先,定義類
類的定義可以與主程序放在一個cpp文件中,也可以新建一個頭文件(*.h)來存放類的定義。
 代碼如下:
然后,定義類的成員函數
類的成員函數的定義,可以與主函數一起放在一個.cpp文件中,也可以新建一個.cpp文件專門用來定義,IDE會把不同文件里的這些定義串起來的。
 代碼如下(為了方便觀看,把代碼的解釋以注釋的形式放入):
最后,寫主程序
上面的所有鋪墊已經具備了,下面就是要在主程序中使用剛剛定義好的類,以及在主程序中使用類的成員函數來達到自己的目的。
 代碼如下(依然使用注釋解釋):
如果是多文件程序的話這句話必須要有!不然之前寫半天就是白費力氣…
下面是正常的主函數的代碼(為了方便觀察,具體操作與昨天的具體代碼稍有不同,在此不就題論題,僅談方法):
int d;WVector v1;//聲明一個剛定義好的WVector的對象v1cin >> d;v1.SetSize(d);int tmp = 0;//存放一個輸入的待檢查的數據//如果是嚴格按照昨天的程序的話,下面的for循環中記錄數據即可for (int i = 0; i < d; i++){cin >> tmp;//輸入一個tmp,其實只要是對tmp賦值的操作都可以if (v1.Contain(tmp) == false)//檢查v1中是否包含v1.Add(tmp);//不包含的話,加入}for (int i = 0; i < v1.Count; i++)//v1.Count就是v1中元素的個數cout << v1.Get(i)<< " ";//輸出v1中的每一個元素這就是所有的代碼!
出現的一些問題
這個代碼中依然有問題,
 具體可以看int WVector::Get(int index){……}這個函數部分
- 這里,如果輸入的索引越界,返回-1.
- 但是,如果輸入的某個索引,其對應的元素恰好也為-1呢?
- 也就是說,即使這里出現越界,返回了-1,用戶一下子直觀上無從知曉到底是這個地方的元素就是-1,還是因為越界,返回了代表出現越界的-1。
- 這里最好的一個方法就是,如果出現越界,能直接出現一個越界的提示,最好了。
- 之后再想想這個怎么改……
寫在最后
這是第二次更博了,沒想到用一個題目能做出這么多東西,哈哈!
 明天也要繼續加油鴨,也要繼續更博,總結總結!讓自己沉淀的更多!
 加油!
總結
以上是生活随笔為你收集整理的C++积累02_隔定时长放炮问题的OOP解决的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 人工智能人才缺口达500万,北京大学、天
- 下一篇: 多路分支之月份天数计算
