c++不建議使用內建陣列,提供了功能強大的array和vector。因為內建陣列有諸多不便:沒有下標越界檢查,對兩個陣列而言不能用==,!=,=等運算子,不能把乙個陣列賦值給另乙個陣列等等。而array和vector又有些複雜,自帶幾十個函式,容易讓人看花了眼。為什麼我們不自己實現乙個精簡的陣列物件呢?
讓我們我們模仿array,建立乙個自己的int陣列"myarray"物件。先看看測試和執行效果。
我們發現,我們使用myarray物件起來如此自然、流暢,以至於她和array類一樣魯棒,健壯,好用。
以下是myarray類的定義和實現:
#ifndef myarray_h
#define myarray_h
#include
class
myarray
;#endif
#include
#include
"myarray.h"
using
namespace std;
ostream &
operator
<<
(ostream &output,
const myarray &ary)
return output;
}istream &
operator
>>
(istream &input, myarray &ary)
return input;
}myarray::
myarray
(int length)
:size
(length >
0? length :
throw
invalid_argument
("陣列長度必須大於0"))
,ptr
(new
int[length])}
myarray::
myarray
(const myarray &ary)
:size
(ary.
getsize()
),ptr(
newint
[size])}
myarray::
~myarray()
size_t myarray::
getsize()
const
const myarray &myarray::
operator=(
const myarray &ary)
for(size_t i =
0; i < size;
++i)
}return
*this;}
bool myarray::
operator==(
const myarray &ary)
const
for(size_t i =
0; i < size;
++i)
}return
true;}
bool myarray::
operator!=(
const myarray &ary)
const
int&myarray::
operator
(int at)
return ptr[at];}
int myarray::
operator
(int at)
const
return ptr[at]
;}
我們發現,自創的myarray類和內建陣列用起來一樣自然,而她又提供了更人性化的輸入輸出方式,可以使用符合正常邏輯的運算子(=,==,!=,),自帶下標檢查功能,所以她健壯,可重用,使用起來更人性化。
在本例中我們把資料和函式都放在物件中,每個物件都擁有自己的方法和資料。非本物件不能訪問本物件的資料,只能通過呼叫函式與物件互動。現實生活也是這樣。每個人知道自己的身高、體重、年齡、性別等資訊,其他人想要知道,必須向你搭話:「美女/帥哥,你多大了?」,而不能去派出所調查你的戶口。這種互動方式符合現實世界的邏輯,而計算機發明和使用的目的就是模擬現實,解決問題,因此在計算機中使用物件的概念去模擬現實是必然選擇。(更重要的是可以讓程式看起來更簡單,可讀性強,容易理解,容易維護。)
物件的使用讓函式和資料產生了緊密的聯絡,讓冷冰冰的**帶上了一絲人情味,宛如一棟精裝修的別墅,隱藏了內部冰冷的鋼筋水泥,通過精心設計的布局和裝飾,讓人一眼就能感受到房子主人的審美和獨特的藝術氣息。這便是物件的概念和優點。
jBPM持久化(以MySQL為例)
1 在mysql裡新建一資料庫,名為jbpm create database jbpm 名字可以任意,後面要用到。3 將mysql的jdbc驅動mysql connector.jar拷貝到jbpm資料夾的lib mysql下,沒有mysql資料夾則新建乙個。4 在jbpm資料夾的src resour...
系統啟動 以Linux為例
這篇說一下計算機的啟動過程,主要是pc系統上linux的啟動過程,嵌入式的稍微提到一下,這上面的東西不一定非常正確,大多從網上相關的技術文章中獲取的資訊,以及查閱了部分linux的 總的來說這個文章定位於學習交流的性質,如果您覺得有不對的地方請一定指出來。正文開始 系統復位完成後,cpu從乙個確定的...
檔案讀寫(以登入註冊為例)
void regist writeprivateprofilestring name,username name,loginuser.ini 第乙個name是 裡面的值 username是鍵的名稱,name就是你輸入的值 writeprivateprofilestring name,password...