オブジェクトクラス(2)
文字列クラス
C ++表現のみ、下位互換性のある文字Cだけでなく、より便利に文の文字列タイプ、すなわち、文字列クラス。
文字列クラスを使用する場合、あなたは宣言するために、あるヘッダファイルの文字列を含める必要があります
#include<string>
他のオブジェクトと同様に文の文字列の方法は、カスタム、またの定義を使用する必要があり
、特に目に見える多くの事業者に加えて、文字列クラスを
オブジェクトを渡す機能
関数パラメータとしてオブジェクトを使用して、このメソッドは、関数にパラメータを渡す方法の通常の使用と一致して、オブジェクト自体におけるオブジェクトの変更は、機能に影響を与えません。
使用した関数のパラメータとしてオブジェクトポインタ:パラメータの関数ポインタを渡す方法の通常の使用による方法では、オブジェクトの変更は、それ自体がオブジェクトの機能に影響を与えます。
関数パラメータとしてオブジェクト参照:例えば方法一貫した結果を用いて、ポインタが、より単純な、直接、。
void fun(tmp &a) {}
代入とコピーオブジェクト
オブジェクトの割り当て
データメンバの値に使用する演算子は「=」前のオペレータオブジェクトに割り当てられています。
注:
二つのオブジェクトの種類が同じでなければなりません。
割り当てがまだある2つのオブジェクトを分離した後、一つのオブジェクトの変更は、他には影響しません。
ポインタオブジェクトがある場合、この方法は、評価のために直接使用することはできません。
コピーコンストラクタ
アクションのコピーコンストラクタは新しく作成されたオブジェクトの初期化に存在するオブジェクトで使用されている
機能
(1)は値を返さない
(2)のみつのパラメータを、同じオブジェクトへの参照であり、
各クラスの(3)必要がありますコピーコンストラクタは、コピーコンストラクタは、独自で定義することができ、定義されていない場合、システムが自動的にデフォルトのコピーコンストラクタを生成します。
カスタムコピーコンストラクタ
次のようにカスタムコンストラクタ一般的な形式をコピーします。
类名::类名(const 类名 &对象名)
{
//拷贝构造函数的函数体
}
コピーコンストラクタ呼び出しの一般的な形式は次のとおりです。
类名 对象2(对象 1);
また、コピーコンストラクタの割り当てメソッドを呼び出すことができます。
类名 对象 2=对象 1
デフォルトのコピーコンストラクタ
システムのない定義が存在しない場合、自動的にデフォルトのコピーコンストラクタ、新しいオブジェクトと同一のコピーを生成します。
注:ポインタ型がデフォルトのコピーコンストラクタを提示できない場合。
コピーコンストラクタケースを呼び出し
対象物(1)は、別のオブジェクト・クラスを初期化するために使用されます。
(2)ターゲット・パラメータは、クラスの関数であり、組み合わされた場合、引数、パラメータ関数を呼び出します。
関数呼び出しのバックは、関数呼び出しの値が終了し返す場合(3)関数は、オブジェクト・クラスの値を返します。
静的メンバ
静的データメンバ
データメンバが静的として説明している場合、クラスでは、このようなメンバーは、クラスの確立の多くのオブジェクトは、静的なデータイディオムのコピーを1つだけ持っているかに関係なく、静的データメンバと呼ばれます。
イディオムは次のように静的データフォーマットは定義され:
static 数据类型 数据成员名;
注:
クラス外で別々にされる初期(1)静的データメンバ、およびオブジェクトの定義の前に行われるには、次のフォーマットを初期化します。
数据类型 类名 ::静态数据成员=初始值;
あなたは次の形式で静的データメンバに「クラス名::」アクセスを使用できるように(2)静的データメンバは、クラスに属します。
类名::静态数据成员名
(3)公共の静的データメンバは、オブジェクト定義の前にアクセスすることができます。オブジェクト定義した後、あなたは、オブジェクト、次の形式を介してアクセスすることができます。
对象名.静态数据成员名
对象指针->静态数据成员名
静的メンバ関数
メンバ関数が静的として説明している場合、そのような部材は、静的メンバ関数と呼ばれます。スタティックメンバ関数は、全体がクラスメンバ関数のすべてのオブジェクトによって共有されるクラスに属する、オブジェクト・クラスの一部ではないが、次の形式の静的メンバ関数を定義します。
static 返回类型 静态成员函数名(函数表);
静的メンバ関数を呼び出すには、いくつかの方法があります。
类名::静态成员函数名(实参表)
对象.静态成员函数名(实参表)
对象指针->静态成员函数名(实参表)
注:
(1)一般的な、スタティックメンバ関数では、主にアクセス静的データメンバに使用されます。
(2)静的メンバ関数は、静的データメンバーに対処する静的関数イディオムを呼び出す前に、任意のオブジェクトを作成するために使用することができます。
(3)静的メンバ関数は、従って、次の形式を使用することが好ましいクラス外部スタティックメンバ関数を呼び出して、オブジェクトの一部ではないクラスの一部であり、そして:
类名::静态成员函数名()
同じ名前の(4)静的メンバ関数は、他のファイル関数と競合しません。
あなたは、オブジェクト名(オブジェクトポインタ、オブジェクト参照を)渡す必要がオブジェクトの非静的メンバにアクセスする必要がある場合(5)は、この静的メンバ関数ポインタではありません。
友人
友人はどちらか非メンバ関数のいずれかのクラスに属し、また、別のクラスのメンバ関数することができません、それは外部の現在のクラスとは独立した外部アクセスタイプのクラスのプライベートメンバーのための援助であります機能。
クラスはフレンド関数宣言されている場合は、関数名のキーワードの友人の前に、クラスのクラスの内部または外部に定義することができる必要があります。
機能は非会員のフレンド関数として宣言されています
例:
class tmp
{
private:
int a,b;
public:
tmp(int _a,int _b):a(_a),b(_b){}
friend void show(tmp &t)
{
cout<<t.a<<' '<<t.b<<endl;
}
};
int main()
{
tmp t(1,2);
show(t);
return 0;
}
注:
(1)フレンド関数は、クラスのメンバ関数ではありません、する必要はありませんので、「クラス名::」クラス外部からのアクセスにフレンド機能。
データは直接オブジェクトのイディオムにアクセスできないように(2)フレンド関数は、クラスのメンバーではなく、またオブジェクト名へのこのポインタは、オブジェクトのアクセス参照データメンバにパラメータ(オブジェクトポインタ、オブジェクト参照)によって渡される必要がありますすることができます。
これは、オブジェクト(3)アクセスの名前を追加する必要があります。
注フレンド関数隠蔽ブレークカプセル化とデータ型、およびので、慎重フレンド関数にする必要があります。
フレンド関数の宣言とメンバ関数
クラスのメンバ関数は、別のクラスの友人もできます。
注:
機能の別のクラスの友人になる前クラスの(1)メンバ関数は、最初の関数は、声明の中で、この友人に位置しているときに、クラスのメンバ関数を追加するには、クラス名をクラスを定義する必要があります。
宣言すること(2)障害は、「クラス宣言クラスを、」追加することができ、クラスの前に、先行文の。
友元类
クラスはまた、友人もでき、この方法のステートメントは、別のクラスの宣言文で別のクラスを追加することですfriend 类名
。
クラスYがクラスXの友人として記載されている場合、クラスYのすべてのメンバー関数は、クラスXのフレンド関数になる必要があり、友人のクラスYのようなすべてのメンバ関数は、クラスXへのアクセスを有することができるすべての手段メンバー。
注:友情は一方通行で、非可換も推移。
クラスの組み合わせ
クラス・データ・メンバーとして別のクラスのオブジェクトを埋め込み、複合クラスと称します。埋め込みオブジェクトと呼ばれるオブジェクトのメンバーは、また、サブオブジェクトとして知られています。
あなたがそのクラスのオブジェクトを作成すると、埋め込まれたメンバーを持つオブジェクトのクラスの場合は、埋め込みオブジェクトのメンバーも自動的に作成されます。
一般的には、このクラスのコンストラクタは、フォームで定義されています。
X::X(形参表 0):对象成员 1(形参表 1),对象成员 2(形参表 2)......
{
//类X的构造函数体
}
コンストラクタを呼び出すときにX :: X()、彼らはコンストラクタと呼ばれ、そして最終的には銀行の実行コンストラクタクラスX、オブジェクトの逆の順序で呼び出しデストラクタを初期化後、メンバーのクラス宣言内のオブジェクトの順序に従って。
チャンタイプ
タイプが使用CONST修飾子は、プログラム実行中に変数またはオブジェクトのメンバーであるの値が不変であり、説明しばしばタイプを指します。
しばしば引用されました
説明で修飾子constの参照を使用する場合、パラメータ引数の変更がの形で説明しないように、参照は、参照の定数です。
const 类型 &引用名;
多くの場合、オブジェクト
オブジェクトの説明で修飾CONSTを使用する場合、オブジェクトは、そのデータメンバの定数オブジェクトは、の形態を示し、オブジェクトの寿命のために変更されませんです。
const 类型 对象名[(参数表)];
或
类型 const 对象名[(参数表)];
多くの場合、オブジェクトが初期化される必要があり、更新できません
多くの場合、ターゲット・メンバー
データ・メンバーは、多くの場合
、多くの場合、データメンバと呼ば説明修飾子CONSTデータメンバを使用し、データの多くの場合、メンバーは、唯一のメンバー初期化リストデータメンバーによって初期化することができ、それが割り当てられた他の任意の関数とすることができません
メンバ関数は、多くの場合、され
、多くの場合、次の形式で記述メンバ関数と呼ばれる修飾子constメンバ関数を使用します:
类型说明符 函数名 (参数表) const;
constが関数型の不可欠な部分である、機能の関数宣言と定義で呼び出すときのconstを追加する必要がconstキーワードを持っていないはずです。
注:
(1)
データメンバ | 通常のメンバ関数 | 多くの場合、メンバ関数 |
---|---|---|
通常のデータメンバ | アクセスすることができ、あなたはまた、値を変更することができます | アクセス、の値を変更することはできません |
多くの場合、データメンバ | アクセス、の値を変更することはできません | アクセス、の値を変更することはできません |
多くの場合、データメンバオブジェクト | アクセスを許可していない、値を変更することはできません | アクセス、の値を変更することはできません |
(2)メンバ関数は、多くの場合のみ外部インターフェイスしばしばオブジェクトであります