今,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件)
- 最新から表示
- 回答順に表示
No.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++の予約語なので、クラス名として記述することができません。
別なクラス名に変更して、実際に動作を確認してみて下さい。
No.4
- 回答日時:
> [const c;]は何を定義しているのでしょうか,
自動記憶域期間を持つconst int型の局所オブジェクトcを定義しています。
> [c.a]はどの変数のことをさしているのでしょうか?
そんなものは存在しませんので、コンパイルできません。
No.3
- 回答日時:
いや、ちょっとまって。
これってちゃんとコンパイルできないでしょ?
本当にこのままのでしたか?
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 言語をやったことがあるなら、そちらの構造体でもいいです。
まずは、構造体の仕組みやメンバ変数の使いかたをおさらいしてください。
No.2
- 回答日時:
>> [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を表示
No.1
- 回答日時:
>[const c;]は何を定義しているのでしょうか,
クラスconstのオブジェクトcを宣言しています。
>[c.a]はどの変数のことをさしているのでしょうか?
cがクラスconstのオブジェクトなので、c.aはcのメンバ変数aを指しています。
ここでクラスconstのコンストラクタでaに100が代入されているので、c.aの値は100になっています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# Cの関数の引数のconst *charについて 5 2023/04/25 13:05
- JavaScript WordPressのコンタクトフォーム7にて送信者の位置情報を送らせたい 2 2022/09/14 23:28
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
イベントにAddHandlerされてい...
-
FriendとPublicの違い。。。
-
C#のクラス設計について教えて...
-
MFCのドラッグ&ドロップについて
-
クラスのアドレスを引数として...
-
オーバーライド関数の呼び出し...
-
既定のコンストラクタがない?
-
MRUの一時回避 VC++2008 MFC
-
MFCアプリのコマンドラインでパ...
-
C++ protectedにアクセス不可
-
vba sendKeysを送る相手のソフ...
-
MFC CSplitter内にコントロール...
-
ダイアログ表示時にチェックボ...
-
VC++ MFC CFrameWndって・・・
-
このコンパイルエラーの意味に...
-
ボタンのオーナードローについて
-
派生クラスから基本クラスprote...
-
DLLからEXEのクラスを呼び出す...
-
CMainFrameクラスの使い方
-
MessageBoxを継承したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FriendとPublicの違い。。。
-
既定のコンストラクタがない?
-
(UWSC) 「#32770」の意味わかり...
-
クラスのアドレスを引数として...
-
ダイアログ表示時にチェックボ...
-
イベントにAddHandlerされてい...
-
【ASP.NET】 独自で作成したク...
-
MFCアプリのコマンドラインでパ...
-
DebugクラスとTraceクラスの違い
-
ボタンのオーナードローについて
-
OnInitDialog()の関数の組み込み方
-
IncludeではなくClassで宣言す...
-
関数の呼び出し元の検索
-
このコンパイルエラーの意味に...
-
C++ protectedにアクセス不可
-
C++で継承元のクラスの代入演算...
-
DataGridViewのセルに斜線を引...
-
C#で通常のbuttonコントロール...
-
エディットコントロールのイベ...
-
CMainFrameクラスの使い方
おすすめ情報