プロが教える店舗&オフィスのセキュリティ対策術

今,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]はどの変数のことをさしているのでしょうか?教えてください。

A 回答 (5件)

[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++の予約語なので、クラス名として記述することができません。
別なクラス名に変更して、実際に動作を確認してみて下さい。
    • good
    • 0

> [const c;]は何を定義しているのでしょうか,



自動記憶域期間を持つconst int型の局所オブジェクトcを定義しています。

> [c.a]はどの変数のことをさしているのでしょうか?

そんなものは存在しませんので、コンパイルできません。
    • good
    • 0

いや、ちょっとまって。


これってちゃんとコンパイルできないでしょ?
本当にこのままのでしたか?

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 言語をやったことがあるなら、そちらの構造体でもいいです。
まずは、構造体の仕組みやメンバ変数の使いかたをおさらいしてください。
    • good
    • 0

>> [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を表示
    • good
    • 0

>[const c;]は何を定義しているのでしょうか,



クラスconstのオブジェクトcを宣言しています。


>[c.a]はどの変数のことをさしているのでしょうか?

cがクラスconstのオブジェクトなので、c.aはcのメンバ変数aを指しています。
ここでクラスconstのコンストラクタでaに100が代入されているので、c.aの値は100になっています。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!