主なポイントは以下のとおりです。
1.C ++クラスのフレンド関数テンプレートを書きます。
2.C ++テンプレートクラスは、COUTの文言を<<上書きされます。
3.手書きの直線形。
線状の一般的なパターン
さらに騒ぎがなければ、直接コードに
ヘッダーファイル:
#pragmaかつて
#defineのMaxSize 100
#含める
#含める
名前空間stdを使用。
テンプレート
クラスLinearList;
テンプレート
ostream&演算子<<(のostream&OS、LinearList&)。
テンプレート
空PrintList2(LinearList&);
テンプレート
クラスLinearList
{
公衆:
LinearList(); //引数なしのコンストラクタ。
LinearList(T []、INT N); //コンストラクタn個のデータの断片。
〜LinearList(); //デストラクタ。
民間:
Tデータ【のMaxSize]。
int型の長さ。
公衆:
int型GETLENGTH(); //線形データ格納テーブルの数を取得します。
T GetPosも(int型POS);データのposのリスト線形//戻ります。
ボイドInsertObjInPos(T OBJの、int型のPOS); // objが位置posに挿入
T DeletePos(int型POS); // posの位置のデータを削除します。
(T OBJの)を見つけINT; //データのOBJ位置を見つけます。-1が返されません。
空PrintList1();
友達のostream&演算子<< <>(のostream&OS、LinearList&);テーブルリニア//オーバーロードされた出力
友人のボイドPrintList2 <>(LinearList&); //フレンド関数の出力シーケンステーブル。
T SetPosToObj(int型のPOS、T OBJ)は、第二の位置POSのObjに//データ
T * ToFirstAdd(); //最初のリニアテーブルのアドレスを返します
空はsetLength(int型のlen); //セットの線形化テーブル長。
}。
テンプレート
ostream&演算子<<(のostream&OS、LinearList&)
{
以下のために(; I <a.Length; int型私は0を= I ++)
{
OS << a.Data [I] <<」「;
}
OS << '\ n' は、
リターン;
}
テンプレート
空PrintList2(LinearList&)
{
以下のために(; I <a.Length; int型私は0を= I ++)
{
std :: coutの<< a.Data [I] <<」「;
}
std :: coutの<< '\ n' は、
}「CPPファイル:
#include「stdafx.hを」
#include「LinearList.h」
テンプレート
LinearList :: LinearList()
{
長さ= 0;
}
テンプレート
LinearList :: LinearList(T []、INT N)
{
this->長さ= N。
(I ++; I <N I = 0の整数)のために
{
this->データ[I] = [I]。
}
}
テンプレート
LinearList ::〜LinearList()
{
長さ= 0;
}
テンプレート
int型LinearList :: GETLENGTH()
{
this->長さを返します。
}
テンプレート
T LinearList :: GetPosも(int型POS)
{
this->データ[POS]を返します。
}
テンプレート
空LinearList :: InsertObjInPos(T Objに、int型のPOS)
{
IF(POS>長さ+ 1つの|| POS <1)
{
「InsertObjInPosエラーを投げます!そして、ほとんどの位置は、「長すぎるか短すぎます。
リターン;
}
this->長++;
以下のために(INT iが長さ= - 1; I> = POS; I-)
{
this->データ[I] = this->データ[I - 1]。
}
this->データ[POS - 1] =のObj。
}
テンプレート
T LinearList :: DeletePos(int型POS)
{
もし(POS <1 || POS>この - >長)
{
投げる「DeletePosエラーとほとんど位置が間違っています」。
}
TのTEMP = this->データ[POS - 1]。
用(INT I = POS - 1; I <長-1; I ++)
{
this->データ[I] = this->データ[I + 1]。
}
長さ - 。
温度を返します。
}
テンプレート
int型LinearList ::検索します(T OBJの)
{
int型POS = -1;
以下のために(; I <長さ; int型私は0を= I ++)
{
もし(this->データ[i]を== OBJの)
{
// I + 1を返します。
POS = I + 1。
POSを返します。
}
}
POSを返します。
}
テンプレート
空LinearList :: PrintList1()
{
以下のために(;私は<this->長さ; int型私は0を= I ++)
{
std :: coutの<< this->データ[i]は<<」「;
}
std :: coutの<<てendl;
}
テンプレート
T LinearList :: SetPosToObj(int型のPOS、TのObj)
{
もし(POS <1 || POS>この - 長さ+ 1)
{
投げる「DeletePosエラーとほとんど位置が間違っています」。
}
(POS ==長さ+ 1)の場合
{
長++;
this->データ[POS - 1] =のObj。
}
this->データ[POS - 1] =のObj。
T()を返します。
}
テンプレート
T * LinearList :: ToFirstAdd()
{
>データをthis-を返します。
}
テンプレート
空LinearList ::はsetLength(int型LEN)
{
lenはthis->長さ=;
}「メイン機能:
//リニアテーブル_通常版の.cpp:エントリポイントのコンソールアプリケーションを定義します。
//
#include「stdafx.hを」
#include "LinearList.cpp"
#含める
名前空間stdを使用。
メインint型()
{
INT試験[10] = {2,4,6,8,10,12,14,16,18,20}。
LinearList(テスト10)。
std :: coutの<< "コンストラクタの後に注文テーブル:" <<てendl;
a.PrintList1(); //出力する第一の方法。
std :: COUT << "最初の位置99に挿入された" << ENDL。
a.InsertObjInPos(99、1)。
PrintList2(A); //第二出力方法。
std :: coutの<< "位置12に挿入された88" <<てendl;
a.InsertObjInPos(88、12);
coutの<<; //オーバーロードされた出力。
std :: coutの<< "データ3つのポジションを探す:" << a.Locate(3)<<てendl;
std :: coutの<<「データ出力4を検索し、削除します:」;
a.DeletePos(a.Locate(4))。
coutの<<; //再び過負荷に出力。実際には、他の大型出力文言があります。私は、書き込みに<>を使用します。次の章の私は他の文言で過負荷を実現します。
COUT <<「オフセットテーブルアレイ素子出力順序2つのアドレス:」;
std :: COUT << a.ToFirstAdd()[2] << ENDL。
getchar();
0を返します。
}