String_varクラスは、文字列操作を簡易化するためのいくつかのメンバ関数を提供します。その他のvarクラスとの大きな違いは、constあり、constなしの場合の2種類のメンバ関数が定義されていることです。
String_varクラスのクラス定義を以下に示します。
class String_var {
public :
String_var(); // デフォルトコンストラクタ
String_var( char * ); // char * コンストラクタ
String_var( const char * ); // char *コンストラクタ
String_var( const String_var & ); // コピーコンストラクタ
~String_var(); // デストラクタ
String_var &operator=( char * ); // char *代入演算子
String_var &operator=( const char * ); // char *代入演算子
String_var &operator=( const String_var & ); // 代入演算子
operator char*(); // 変換オペレータ
operator const char*() const; // 変換オペレータ
char &operator[]( ULong ); // [ ]オペレータ
char operator[]( ULong ) const; // [ ]オペレータ
private:
char *_ptr;
};String_varクラスのメンバ | 意味 |
|---|---|
デフォルトコンストラクタ | インスタンス生成時、_ptrをNULLに初期化します。 |
char *コンストラクタ | constなし: |
コピーコンストラクタ | インスタンス生成時、指定されたパラメタの_ptrのデータのコピーを作成し、_ptrに設定します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。 |
デストラクタ | CORBA::string_freeにより_ptrを解放します。 |
char *代入演算子 | constなし: |
代入演算子 | 右辺で指定されたString_var変数の_ptrのデータのコピーを作成し、_ptrに代入します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。 |
交換演算子 | _ptrに設定されているポインタを取り出します。 |
[ ]演算子 | パラメタで指定されている_ptr番目の要素の参照値を取り出します。 |
デフォルトコンストラクタは、_ptrをNULLに初期化します。
デフォルトコンストラクタの使用例と処理内容を以下に示します。
String_var data;
CORBA::String_var::String_var()
{
_ptr = NULL;
}char*コンストラクタは、constなしの場合、インスタンス生成時、指定されたパラメタのポインタを_ptrに設定します。constありの場合は、インスタンス生成時、指定されたパラメタのコピーを_ptrに設定します。
char *コンストラクタの使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var data1( str ); // char*コンストラクタ(constなし)
CORBA::String_var data2( (const CORBA::Char *)str ); // char *コンストラクタ(constあり)
CORBA::String_var::String_var( char *p )
{
_ptr = p;
}
CORBA::String_var::String_var( const char *p )
{
... // _ptrにpの内容を複写します
}コピーコンストラクタは、インスタンス生成時、指定されたパラメタの_ptrに設定されているデータ自身の_ptrに複写します。
コピーコンストラクタの使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var data1( str ); // char*コンストラクタ(constなし)
CORBA::String_var data2( data1 ); // コピーコンストラクタ
CORBA::String_var::String_var(
const CORBA::String_var &r )
{
... // rの_ptrを取り出し、そのコピーを_ptrに設定します。
}デストラクタは、インスタンス解放時、_ptrに設定されているデータを解放します。
デストラクタの使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var *data = new CORBA::String_var( str ); // char*コンストラクタ(constなし)
delete data; // デストラクタが起動され_ptr(この例ではstrの指す領域)が解放されます
CORBA::String_var::~String_var()
{
CORBA::string_free( _ptr );
}char*代入演算子は、constなしの場合は、右辺で指定されたchar*ポインタを_ptrに代入します。constありの場合は、右辺で指定されたchar*ポインタの指すデータのコピーを作成し、そのポインタを_ptrに設定します。すでに_ptrにデータが設定されている場合は、constなし、constありいずれの場合も、すでに設定されている_ptrのデータを解放した後で、それぞれの処理を実行します。
char*代入演算子の使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var data;
data = test; // char*代入演算子(constなし)
data = (const CORBA::Char *)"new data"; // char *代入演算子(constあり)
CORBA::String_var &
CORBA::String_var::operator=( char *p )
{
if( _ptr )
CORBA::string_free( _ptr );
_ptr = p;
return *this;
}
CORBA::String_var &
CORBA::String_var::operator=( const char *p )
{
if( _ptr )
CORBA::string_free( _ptr );
... // _ptrにpのコピーを作成し、そのポインタを設定
return *this;
}代入演算子は、右辺で指定されたString_var変数の_ptrの設定されているデータのコピーを作成し、_ptrに設定します。すでに_ptrにデータが設定されている場合は、そのデータを解放した後、処理を行います。
代入演算子の使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var data;
data = test; // char*代入演算子(constなし)
CORBA::String_var data2;
data2 = data1; // 代入演算子
CORBA::String_var &
CORBA::String_var::operator=( const CORBA::String_var &r )
{
if( _ptr )
CORBA::string_free( _ptr );
...// rの_ptrを取り出し、そのコピーを_ptrに設定します。
return *this;
}[ ]演算子は、_ptrに設定されているパラメタで指定されたデータ+1番目のデータの参照値を返します。
[ ]演算子の使用例と処理内容を以下に示します。
CORBA::Char * str = CORBA::string_alloc(4);
strcpy( str, "test" );
CORBA::String_var data;
data = test; // char*代入演算子(constなし)
CORBA::Char x = data[2]; // 3文字目’s’が返ります。
char &
CORBA::String_var::operator[]( ULong index )
{
return _ptr[index];
}