ページの先頭行へ戻る
Interstage Application Server V12.3.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

4.7.1 String_varクラス

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に指定されたパラメタのポインタを設定します。
constあり:
インスタンス生成時、指定されたパラメタのコピーを作成し、_ptrに設定します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。

コピーコンストラクタ

インスタンス生成時、指定されたパラメタの_ptrのデータのコピーを作成し、_ptrに設定します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。

デストラクタ

CORBA::string_freeにより_ptrを解放します。

char *代入演算子

constなし:
右辺で指定されたchar*ポインタを_ptrに代入します。
constあり:
右辺で指定されたchar*ポインタデータのコピーを_ptrに代入します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。

代入演算子

右辺で指定されたString_var変数の_ptrのデータのコピーを作成し、_ptrに代入します。_ptrの領域を新規獲得します。メモリ不足により領域の獲得に失敗した場合は、_ptrにNULLが設定されます。

交換演算子

_ptrに設定されているポインタを取り出します。

[ ]演算子

パラメタで指定されている_ptr番目の要素の参照値を取り出します。


デフォルトコンストラクタ

デフォルトコンストラクタは、_ptrをNULLに初期化します。
デフォルトコンストラクタの使用例と処理内容を以下に示します。

String_var  data; 

CORBA::String_var::String_var()
{
    _ptr = NULL; 
}

char*コンストラクタ

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 *代入演算子

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]; 
}