- 締切済み
今,C++のコンストラクタを勉強しているのですが,これの働きと役割がい
今,C++のコンストラクタを勉強しているのですが,これの働きと役割がいまいちわかりません class const{ public: int a; const(); } const::const() { a = 100; } int main() { const c; cout << " c.a = " << c.a << endl; return 0; } この様な例がのっていたのですが、[const c;]は何を定義しているのでしょうか, [c.a]はどの変数のことをさしているのでしょうか?教えてください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- infeeld
- ベストアンサー率37% (3/8)
[const c;]と書くと、constクラスの定義をローカル変数として実体化します。 constクラスを実体化したものを、constクラスのインスタンス(オブジェクト)と呼びます。 従って、[const c;]は、constクラスのインスタンスを定義しています。 (定義と言うとちょっとニュアンスが違うのですが・・・) [c]は、constクラスの定義を実体化したインスタンスなので、[c.a]は、[public:]と記述のある一行下に、[int a;]と宣言されたクラス変数の実体をさします。 コンストラクタは、クラス名と同じ名前を持つ戻り値のない関数のことで、クラスが実体化(インスタンス化)されるタイミングで必ず呼び出される関数です。 なので、実体化(インスタンス化)された直後の初期状態を作り出すために、変数を初期化する処理を記述したりします。 この例では、[a = 100;]という処理が記述されているので、実体化(インスタンス化)された直後の[c.a]には100が格納されています。 処理の流れとしては以下のようになります。 1.[const c;]で、constクラスの実体化(インスタンス化)が始まる。 2.実体化(インスタンス化)している途中で、コンストラクタ[const::const()]関数が呼び出される。 3.[c]変数に、constクラスの実体(インスタンス)が格納される。 他の方も書かれていますが、constはC++の予約語なので、クラス名として記述することができません。 別なクラス名に変更して、実際に動作を確認してみて下さい。
- jacta
- ベストアンサー率26% (845/3158)
> [const c;]は何を定義しているのでしょうか, 自動記憶域期間を持つconst int型の局所オブジェクトcを定義しています。 > [c.a]はどの変数のことをさしているのでしょうか? そんなものは存在しませんので、コンパイルできません。
- kmee
- ベストアンサー率55% (1857/3366)
いや、ちょっとまって。 これってちゃんとコンパイルできないでしょ? 本当にこのままのでしたか? C++のキーワードにconstというのがあるので、クラス名とか変数名とかには使用できません。 それが、クラス名として使用されています。適当な物に置きかえる必要があります。 また、 classの定義のしかたは、構造体と同じで class クラス名 {クラスの定義} [このクラス型の変数の宣言(省略すると、クラスの定義だけ)] ; となっています。 > } // ここがクラス定義の終り > const::const() //ここから次の文 とするためには、 > } ; // ここがクラス定義の終り とセミコロンが必要です。(私もときどき忘れてエラーになります) コンパイラを通るようにすると、こんな感じ // cout,endlを使用するためにinclude #include <iostream> // cout,endlをそのまま使用するために名前空間の指定 using namespace std; // myClass1クラスの定義 class myClass1 { public: // これ以下の変数や関数はクラスの外部からアクセス可能 int a; // メンバ変数 myClass1(); // コンストラクタ:プロトタイプ宣言だけ } ; // MyClass1クラスの(デフォルト)コンストラクタの定義 myClass1::myClass1() { // 関数内で同名の変数が使われていないなら、メンバ変数として扱う a = 100; } int main() { myClass1 c; cout << " c.a = " << c.a << endl; return 0; } /////////////////////////// > [myClass1 c;]は何を定義しているのでしょうか myClass1クラス型の変数 c を定義しています。このとき、myClass1クラスのデフォルトコンストラクタが実行されます。 > [c.a]はどの変数のことをさしているのでしょうか myClass1クラス型の変数 c のメンバ変数 a のことを指しています。 //// C++が初めてのプログラム言語ですか? 構造体ってやってませんか?C 言語をやったことがあるなら、そちらの構造体でもいいです。 まずは、構造体の仕組みやメンバ変数の使いかたをおさらいしてください。
- tohru999
- ベストアンサー率49% (76/154)
>> [const c;]は何を定義しているのでしょうか constクラスを変数cとして宣言 >> [c.a]はどの変数のことをさしているのでしょうか constクラスでpublicとして宣言されていて、a=100;となっているので、 c.a は 100となっています。 簡単に書くとコンストラクタとは、クラスが生成された時に変数を初期化したい等、 初期処理を書く時に使ったりします。 ちなみに、書かれている内容を実行すると以下のような順で処理されます。 1.mainから始まるので、constクラスを変数cとして宣言 const c; 2.変数cとして宣言されたので、自動的にconstクラスの変数aが宣言され、 const();が呼び出され、a=100;が実行される int a; const(); --->>> const::const(){a = 100;} 3.c.a = 100を表示
- magicalpass
- ベストアンサー率58% (378/648)
>[const c;]は何を定義しているのでしょうか, クラスconstのオブジェクトcを宣言しています。 >[c.a]はどの変数のことをさしているのでしょうか? cがクラスconstのオブジェクトなので、c.aはcのメンバ変数aを指しています。 ここでクラスconstのコンストラクタでaに100が代入されているので、c.aの値は100になっています。