標頭檔案strblob以及strblobptr
//根據題目要求用自己定義的strblob來代替vector來儲存輸入檔案
//可以更加安全的共享底層資料
#include
#include
#include
#include
#include
using
namespace std;
class
strblob
strblob
(initializer_list il)
:data
(make_shared>
(il))~
strblob()
size_type size()
const
bool
empty()
const
void
push_back
(const string &st)
const
void
pop_back()
const
; string &
front()
const
; string &
back()
const
; strblobptr begin()
; strblobptr end()
;private
: shared_ptr> data;
void
check
(size_type t,
const string &msg)
const;}
;//檢查乙個給定的索引值是否在合法範圍內
void strblob::
check
(size_type t,
const string &msg)
const
void strblob::
pop_back()
const
string & strblob::
front()
const
string & strblob::
back()
const
class
strblobptr
strblobptr
(strblob &a, size_t sz =0)
:wptr
(a.data)
,curr
(sz)
~strblobptr()
string &
deref()
const
;//用來解引用
strblobptr&
incr()
;//用來遞增
bool
operator!=(
const strblobptr &x)
private
: size_t curr;
//check要檢查指標指向的vector是否還存在
shared_ptr>
check
(size_t,
const string&
)const
; weak_ptr> wptr;};
shared_ptr> strblobptr::
check
(size_t i,
const string &msg)
const
if(i >= ret-
>
size()
)return ret;
}string & strblobptr::
deref()
const
strblobptr& strblobptr::
incr()
strblobptr strblob::
begin()
strblobptr strblob::
end(
)
標頭檔案textquery以及queryresult
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
"blob.h"
using
namespace std;
class
queryresult
;class
textquery
queryresult query
(const string &s)
const
;//返回乙個查詢結果
private
: map>
> result;
//通過字串來查詢對應的行號
//shared_ptr> data;
strblob data;
//按行儲存輸入的檔案};
class
queryresult
~queryresult()
//以下三個是根據12.33題目要求擴充套件,暫時未用到
set::iterator begin()
const
set::iterator end()
const
strblob get_file()
const
private
: string word;
//shared_ptr> data;
strblob data;
//與textquery共享data資料
shared_ptr> nos;
//儲存與給定單詞關聯的行號};
textquery::
textquery
(ifstream &infile)
:data()
}/*string text;
while (getline(infile, text))
}*/}queryresult textquery::
query
(const string& s)
const
ostream&
print
(ostream &out, queryresult &qr)
return out;
}
主函式
#include
#include
#include
#include
#include
#include
#include
#include
#include
"classtq.h"
using
namespace std;
void
runqueries
(ifstream &infile)
}int
main()
足跡C primer 12 函式過載
main函式不能過載 record lookup const account account是乙個型別 record lookup const phone record lookup const name account acct phone phone record r1 lookup acct ...
C Primer12抽象基類
型別轉換與繼承 我們可以將基類的指標和引用繫結到派生類物件上。當使用基類的引用或指標時,實際上我們並不清楚我們使用的物件到底是基類物件還是派生類物件。靜態型別和動態型別 例如item.net price 它的靜態型別是quote 動態型別則根據傳入的實參來決定。如果傳入的是bulk quote,則動...
C primer 12 類 主建構函式
1 class 預設成員變數private,struct預設是public 2 class screen const 成員函式set中,this的型別是乙個指向const物件的const指標,就是說,指標位址不可以改,內容也不可以改。而非const函式,this指標位址不可以改,但是指向的內容可以改...