質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2465閲覧

オブジェクト生成、コンストラクタについて

wug

総合スコア13

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/05/25 11:56

・次のオブジェクトを生成した場合どうなるか?
・誤っている場合は修正せよただし、関数引数の初期化は使わないものとする
という問題が出されたのですが
Shop(int ssales):sales(ssales){}
Shop* shopXP(new Shop);
Shop* shopSP(new Shop(300));
があまり理解していないので解説をお願いします。

lang

1#include <iostream> 2using namespace std; 3 4//店舗クラス定義 5class Shop { 6 int sales; 7public: 8 Shop(int ssales):sales(ssales){} 9}; 10//////////////////////////////////////////////////////// 11int main() 12{ 13 Shop* shopXP(new Shop); 14 Shop* shopSP(new Shop(300)); 15 16 delete shopXP; 17 delete shopSP; 18 return 0; 19}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

lang

1Shop(int ssales):sales(ssales){}

は、初期化リストを使用したコンストラクタです。

初期化リストはコンストラクタのパラメータの後に「:」を置いて以下のように定義します。
クラス名(パラメータリスト)**:メンバ変数名1(初期値1), メンバ変数名2(初期値2)・・・**←初期化リスト
{
// コンストラクタの処理
}

改行がないのでわかりにくいかもしれませんが、
salesをssalesの値で初期化するだけの一般的なコンストラクタです。

lang

1Shop* shopXP(new Shop);

これは誤りです。
Shopクラスは引数を指定しないコンストラクタを保持していないので、
new Shopがコンパイルエラーになります。

たとえばsalesの初期値を0でオブジェクトを生成する場合は、コンストラクタの引数に0を指定するか、
以下のように引数を受けず、salesを0で初期化するようなコンストラクタを
Shopクラスに実装する必要があります。
(関数引数の初期化を使用してはいけないとあるので。)

lang

1Shop():sales(0){}

lang

1Shop* shopSP(new Shop(300));

これは正しいオブジェクトの生成です。
Shopクラス型のポインタ変数shopSPに、生成したShopクラスのオブジェクトへのポインタを格納しています。
Shopクラスのコンストラクタに300を指定していますので、salesには300が格納されています。

投稿2015/05/25 12:39

編集2015/05/25 12:41
wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wug

2015/05/25 13:04

とても分かりやすい解説ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問