2011-12-08 11 views
1

コピーコンストラクタにコピーするすべてのメンバを明示的にリストする必要があります。つまり、オブジェクトのカットダウンバージョンをコピーするコピーコンストラクタを設定できます。メンバ関数とコピーコンストラクタ

メンバー機能のコピーはどのように機能しますか?すべてのメンバ関数が自動的に含まれていますか?これは、オブジェクトは実際にメンバであり、関数はクラスの使用方法を宣言するだけなので、これはですか?これは、理論的には、コピーコンストラクタを使用してオブジェクトをカットダウンして作成することができます。たとえば、コピーに存在しないメンバーを取得するためにゲッターを呼び出しますか?

+0

特定のメンバーが不足しているオブジェクトのコピーを作成することができますか?または、特定のメソッドが欠けているコピーを作成できるかどうか疑問に思っていますか? – Corbin

+0

両方(11 more。) – SirYakalot

+0

特定のメンバーを紛失することはできません。ただし、これらのメンバーのデータは失われている可能性があります。データをコピーしないと、そこにはありません。しかし、まだそのプロパティに割り当てられたメモリがあります。以下に述べるように、メソッドをコピーしないのは不可能です。 – Corbin

答えて

0

C++でどのクラス/オブジェクトが誤解されている可能性があります。いくつかのlanguges(例えばPython)では、オブジェクトは変更可能です(新しい変数/関数)。 C++では、オブジェクトはクラスで指定されているように静的であるため、オブジェクトのバージョンを縮小することはできません。

デフォルトのコピーコンストラクタは、すでにメンバーからメンバーへのコピーを実行しています。これで十分でない場合(浅いコピー< - >ディープコピー)、すべてのコピーを行う必要があるコピーコンストラクタの独自のバージョンを用意する必要があります。メンバーのコピーに失敗した場合、コピーされたバージョンは未定義またはデフォルトのメンバーのままになります。動的メモリなどを避けて独自のコピーコンストラクタを作成する必要はありません。

6

メンバー関数はクラスインスタンスに格納されません。それらは単なる通常の機能です。ただしvtableポインタは格納できます。これは、仮想メンバ関数の動的ディスパッチに使用されます。

通常のメンバー関数呼び出しは、コンパイル時に決定されます。

(C++はその一つではないサイドノートとして、インスタンスごとのメソッドのコピーを保存するか、いくつかの言語が存在する)

4

関数インスタンスごとに別々のインスタンスを持っていません。 (非静的な)メンバ関数の特性は、インスタンス毎にインスタンス化されるのではなく、インスタンス上で呼び出されなければならず、インスタンスへのポインタを暗黙的に受け取るということである。機能のコピーはありません。 (実際には、関数—のメンバーまたはそれ以外の場合—はコピーできません)

関連する問題