C++のおべんきょう

mbedしたいが、いまいちC++が分からないのでまとめてみる。

クラス、継承

http://www.atmarkit.co.jp/fdotnet/bookpreview/bunpouvcpp_1001/bunpouvcpp_1001_01.htmlを参考にしています

class クラス名
{
private:        // ~~非公開部分~~

    データメンバ
    ・・・
        
public:         //~~公開部分~~
    
    メンバ関数    
    ・・・
}
  • クラスは属性(データメンバ)と操作(メンバ関数、メソッド)が合わさったものといえるらしい
  • ひとまとめに扱えるから便利?

オブジェクトと属性

型名 変数名; //オブジェクト
型名* 変数名 = new 型名; //ポインタ的に利用(アドレスが入る)

//フリーストアにオブジェクトを配置
Person* pHanako=new Person();
pHanako->name="Hanako";
pHanako->age=27;
cout<<pHanako->name<<" ("<<pHanako->age<<")\n"; //出力値: Hanako (27)
delete pHanako; //オブジェクトの削除

で宣言(オブジェクトを生成)

  • オブジェクトの配列も出来る
  • 1番目のやり方 : "."で属性にアクセス
  • 2番目のやり方 : "->"で属性にアクセス

メソッド

class 型名
{
  戻り値の名前 メソッド名(パラメータリスト);
  (複数のメソッドを宣言することも可能)
};
戻り値の型 クラス名::メソッド名(パラメータリスト)
{
  文
}


class Person
{
  string name;
  int age;
  void show(); //メソッドの宣言
};

//メソッドの定義
void Person::show()
{
  cout<<name<<" ("<<age<<")\n";
}
  • プログラムが大きくなる場合には、クラスの定義をヘッダファイル(.h)に、メソッドの定義をソースファイル(.cpp)に書くのが一般的(その時はソースファイルの先頭でヘッダファイルをincludeする)
  • ヘッダファイル内で関数定義、変数の実体を定義してはいけない。extern int g_iCounter;みたいにする。

静的メンバ

  • staticでメンバ宣言、定義をすると、静的メンバになる。読み取り専用
  • そのクラスのすべてのインスタンスに適用される。オブジェクトが無くても、クラス名::静的メンバ名でアクセスできる。

アクセス制御

  • オブジェクト内の変数を、外からアクセスできるようにするか否か。
  • private: 以降は外部からアクセス出来ない public: 以降はアクセスできる
  • メソッドなど、オブジェクト内からはprivate:, public:共にアクセス可能。(privateに外部からアクセスできるようにするためにはメソッドを作るなどする)

#include <iostream>
using namespace std;

struct Person
{
  string name;
  int age;

  Person() { cout<<"オブジェクトが生成された\n"; } //オブジェクト生成時に実行される命令
};


int main()
{
  Person x;
  //出力値:オブジェクトが生成された
}

ライブラリ


Please log in to post comments.