以自製MyArray物件為例說明物件的概念

2021-09-28 15:52:32 字數 2512 閱讀 1509

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...