モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

クラスの基本/初期化 (C++をもう一度)

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2014/11/25
最終更新最終更新
2017/04/25
記事区分記事区分
一般公開

目次

    低レイヤーのプログラミングとOS開発が趣味。C言語を使っています。

    0
    ステッカーを贈るとは?

    構造体のように初期化する (非推奨)

    #include <iostream>
    using namespace std;
    
    const int MAX_STR = 16;
    
    class MyClass {
    public:
        int m_integer;
        char m_str[MAX_STR + 1];
        void Show();
    };
    
    void MyClass::Show() {
        cout << "val1: " << m_integer << ", "   // ← "" を並べると文字列結合されます (復習)
                "val2: " << m_str     << endl;
    }
    
    int main() {
        MyClass obj[] = {
            { 1, "test1" },
            { 2, "test2" },
        };
    
        int size = sizeof obj / sizeof *obj;
    
        for (int i = 0; i < size; ++i) {
            obj[i].Show();
        }
        return 0;
    }
    

    コンストラクタで初期化する

    #include <iostream>
    using namespace std;
    
    class MyClass {
        int m_integer;
    public:
        void Show();
        MyClass();
        MyClass(int intval);
    };
    
    MyClass::MyClass() {
        m_integer = 0;
    }
    
    MyClass::MyClass(int intval) {
        m_integer = intval;
    }
    
    void MyClass::Show() {
        cout << m_integer << endl;
    }
    
    int main() {
        MyClass obj, obj2(1);
    
        obj.Show();
        obj2.Show();
    
    
        // 配列を用意する場合
        MyClass obj_list[] = {
            MyClass(),
            MyClass(1),
        };
    
        int size = sizeof obj_list / sizeof *obj_list;
    
        for (int i = 0; i < size; ++i) {
            obj_list[i].Show();
        }
        return 0;
    }
    

    既定値ありのコンストラクタで初期化する

    コンストラクタの引数に既定値を設定した場合は、曖昧さ回避のため引数なしのコンストラクタは定義できなくなります。

    #include <iostream>
    using namespace std;
    
    class MyClass {
        int m_integer;
    public:
        void Show();
        MyClass(int intval = 0);
    };
    
    MyClass::MyClass(int intval) {
        m_integer = intval;
    }
    
    void MyClass::Show() {
        cout << m_integer << endl;
    }
    
    int main() {
        MyClass obj, obj2(1);
    
        obj.Show();
        obj2.Show();
    
        return 0;
    }
    

    関数のデフォルト引数 (参考)

    クラスとは関係ありませんが、既定値ありのコンストラクタと関連する事項のためここに記載します。関数にもデフォルト引数を設定することができます。ただし、クラスの場合と同様に二重定義の可能性があるオーバーロードはできません。

    #include <iostream>
    using namespace std;
    
    int MyFunc(int arg1, int arg2 = 0); // プロトタイプ宣言がある場合、
                                        // デフォルト引数はこちらにのみ書く。
    int MyFunc(int arg1, int arg2) {
        return arg1 + arg2;
    }
    
    // int MyFunc(int arg1) { // ← 二重定義となりエラーです。
    //     return arg1;       // デフォルト引数による曖昧さ回避のため
    // }                      // オーバーロードできません。
    
    int main() {
        cout << MyFunc(1) << endl; //=> 1
        cout << MyFunc(1,1) << endl; //=> 2
        return 0;
    }
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    低レイヤーのプログラミングとOS開発が趣味。C言語を使っています。

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • ダウンキャスト (C++をもう一度)
        実行時型情報 RTTI #include <iostream> #include <typeinfo> using namespace std; class MyClass { public: virtual ~MyClass() {} // typeid で正しい RTTI // (RunTime Type Information; 実行時型情報) ...
      • 競技プログラミングの基本処理チートシート (C++)
        限られた時間の中で問題を解くために必要となる、競技プログラミングにおける基本的な処理のチートシートです。競プロにおけるメジャー言語 C++ を利用します。その際 C++11 の機能は利用せず C++03 の機能の範囲内で記述します。 頻度高く定期的に開催されるコンテスト AtCoder Codeforces main.cpp #include <iostream>
      • 構造体と列挙体 (C++をもう一度)
        構造体 #include <iostream> using namespace std; struct MyStruct { char charval; int intval; }; void Show(MyStruct* obj) { cout << obj->intval << endl; } int main() { ...
      • Valgrind による C/C++ メモリリーク検出
        JVM メモリリークでは JDK の jstat や jmap で原因を調査できます。C/C++ では valgrind の Memcheck ツールが利用できます。valgrind には複数のツールが含まれており既定のツールが Memcheck です。他のツールを利用する場合は --tool オプションで指定します。 [簡単な利用例](h
        あおいねずみあおいねずみ2/27/2022に更新
        いいねアイコン画像0
      • Union-Find サンプル
        『プログラミングコンテストでのデータ構造』で紹介されている Union-Find 木で集合を表現すると、以下のクエリを高速に実行できます。集合一つが一つの木となるため、複数の集合がある場合は全体として森になります。 ある要素 a_i と a_j が同じ集合に属しているかどうかの判定 二つの集合を一つの集合にまとめる サンプル [POJ 1182](https://translat