C++入門(1) ーざっくり基本ー
C++を使う上での基本的な事柄についてメモ
■クラス
(1) 一番基本的な書き方
C言語との大きな違いはクラスを組み合わせてプログラムを組み上げて行く点
クラスとは構造体のメンバーに関数が加わったようなもの
クラスの定義の仕方は構造体の場合と基本的には同じ
class bookList () {
char title[256];
char author[512];
void showData();
};
構造体で使ったstruct のかわりにクラスではclassを付けて作る。
このように関数であるshowData()をメンバーに含めることができる。
変数や関数の名前は最初は小文字、単語の先頭を大文字にするのがC++では通例のようだ。
(2)アクセス制限をつける
C++ではクラスのメンバーを外部から見たり変更したりできるかどうかを個別に指定する
ことができる。
class bookList () {
private:
char Title[256];
char Author[512];
public:
void showData();
};
「private:」「public:」がその指定をしている部分。private, publicは予約語で
private・・・クラス内部だけで見ることができ、外部からは参照できない
public ・・・外部から見たり使ったりできる
という指定になる。「アクセス指定子」と呼ばれるらしい。アクセス指定子の最後にコロン(:)
をつける。ラベルのような感じ。
最初の様にアクセス指定子を省略したとき、メンバーはprivateに設定される。
(=デフォルトはprivate)
(3)メンバ関数の定義
クラスの定義でメンバ関数がどのようなことをするのか関数の中身を書いてしまうことも
できるが(インライン)、通常は関数の中身の記述は別に書く。書くときは
void bookList::showData()
{
//関数の内容を書くところ
}
のように属しているクラスの型名のあとにコロン二つ(::)を書き、そのあとに自身の関数名を書く。
通常クラスの定義はヘッダファイルに書き、関数の定義は.cppの拡張子の付いたソースファイル
の中に書く。
C言語で構造体や関数の宣言はヘッダファイルに書いて、関数の実体はソースファイルに書いた
ものの延長と考えておけばわかりやすい?
(4)コンストラクタとデストラクタ
GUIプログラムでWindowを作ると、まず必ずその中にボタンやテキスト入力欄といった部品を
作ることが必要になってくる。Windowクラスのオブジェクトから見れば自身の初期設定。
この初期設定を行なう関数が、クラスには必ず作られる決まりになっている。
その初期設定用関数がコンストラクタ。
①コンストラクタは名前が決まっていて、クラスの型名と同じ関数名になる。
②コンストラクタは型を持たない。
したがって初期設定する事項を書き加えるときは
MainWindow::MainWindow()
{
//初期設定する事柄を書く
}
のようにクラス名と同じ名前の関数を探して、その中に処理を書いていけばいい。
コンストラクタは引数は持てる。
コンストラクタと対を成すのがクラスのオブジェクトが破棄されるときに実行されるデストラクタ
と呼ばれる関数。これもクラスに必ず自動的に作られる。
デストラクタ名もやっぱり名前が決まっていて、クラスの型名の前にチルダ(~)を付けたものになる。
デストラクタも型を持たない。
MainWindow::~MainWindow()
{
//後始末を書く
}
(5)関数のオーバーロード
関数名が同じでも、引数が違えば別の関数として扱いますよ というのがC++で加わった
新機能、オーバーロード。日本語だと多重定義ともよばれる。
C言語では引数の型が違うだけで同じ機能の関数なのに、関数名がダブれないために関数名を
一部変更しなければならなかったり、同じような処理をまた書かなければならなかったりで
いろいろ不便をしたらしい。その解消のための機能。
■ヘッダファイル
C言語ではヘッダファイルをインクルードするときに、ヘッダファイル名の最後に(.h)のサフィックス
を付けなければならなかったが、C++では基本的にヘッダファイル名だけを書くのがルールの
ようだ。
■変数の宣言場所
C言語では冒頭に変数の宣言をまとめて書いたが、C++では宣言の場所の縛りがなくなった。
変数を使うときに宣言と初期化を同時に書いてOK。
■コマンドラインプログラムの表示出力の違い
coutを使って表示するようになる。cousole outの略。<iostream>をインクルードする。
cout<<"文字列"
<<がストリームの入出力演算子。
でも従来のprintfも使える。
■クラス
(1) 一番基本的な書き方
C言語との大きな違いはクラスを組み合わせてプログラムを組み上げて行く点
クラスとは構造体のメンバーに関数が加わったようなもの
クラスの定義の仕方は構造体の場合と基本的には同じ
class bookList () {
char title[256];
char author[512];
void showData();
};
構造体で使ったstruct のかわりにクラスではclassを付けて作る。
このように関数であるshowData()をメンバーに含めることができる。
変数や関数の名前は最初は小文字、単語の先頭を大文字にするのがC++では通例のようだ。
(2)アクセス制限をつける
C++ではクラスのメンバーを外部から見たり変更したりできるかどうかを個別に指定する
ことができる。
class bookList () {
private:
char Title[256];
char Author[512];
public:
void showData();
};
「private:」「public:」がその指定をしている部分。private, publicは予約語で
private・・・クラス内部だけで見ることができ、外部からは参照できない
public ・・・外部から見たり使ったりできる
という指定になる。「アクセス指定子」と呼ばれるらしい。アクセス指定子の最後にコロン(:)
をつける。ラベルのような感じ。
最初の様にアクセス指定子を省略したとき、メンバーはprivateに設定される。
(=デフォルトはprivate)
(3)メンバ関数の定義
クラスの定義でメンバ関数がどのようなことをするのか関数の中身を書いてしまうことも
できるが(インライン)、通常は関数の中身の記述は別に書く。書くときは
void bookList::showData()
{
//関数の内容を書くところ
}
のように属しているクラスの型名のあとにコロン二つ(::)を書き、そのあとに自身の関数名を書く。
通常クラスの定義はヘッダファイルに書き、関数の定義は.cppの拡張子の付いたソースファイル
の中に書く。
C言語で構造体や関数の宣言はヘッダファイルに書いて、関数の実体はソースファイルに書いた
ものの延長と考えておけばわかりやすい?
(4)コンストラクタとデストラクタ
GUIプログラムでWindowを作ると、まず必ずその中にボタンやテキスト入力欄といった部品を
作ることが必要になってくる。Windowクラスのオブジェクトから見れば自身の初期設定。
この初期設定を行なう関数が、クラスには必ず作られる決まりになっている。
その初期設定用関数がコンストラクタ。
①コンストラクタは名前が決まっていて、クラスの型名と同じ関数名になる。
②コンストラクタは型を持たない。
したがって初期設定する事項を書き加えるときは
MainWindow::MainWindow()
{
//初期設定する事柄を書く
}
のようにクラス名と同じ名前の関数を探して、その中に処理を書いていけばいい。
コンストラクタは引数は持てる。
コンストラクタと対を成すのがクラスのオブジェクトが破棄されるときに実行されるデストラクタ
と呼ばれる関数。これもクラスに必ず自動的に作られる。
デストラクタ名もやっぱり名前が決まっていて、クラスの型名の前にチルダ(~)を付けたものになる。
デストラクタも型を持たない。
MainWindow::~MainWindow()
{
//後始末を書く
}
(5)関数のオーバーロード
関数名が同じでも、引数が違えば別の関数として扱いますよ というのがC++で加わった
新機能、オーバーロード。日本語だと多重定義ともよばれる。
C言語では引数の型が違うだけで同じ機能の関数なのに、関数名がダブれないために関数名を
一部変更しなければならなかったり、同じような処理をまた書かなければならなかったりで
いろいろ不便をしたらしい。その解消のための機能。
■ヘッダファイル
C言語ではヘッダファイルをインクルードするときに、ヘッダファイル名の最後に(.h)のサフィックス
を付けなければならなかったが、C++では基本的にヘッダファイル名だけを書くのがルールの
ようだ。
■変数の宣言場所
C言語では冒頭に変数の宣言をまとめて書いたが、C++では宣言の場所の縛りがなくなった。
変数を使うときに宣言と初期化を同時に書いてOK。
■コマンドラインプログラムの表示出力の違い
coutを使って表示するようになる。cousole outの略。<iostream>をインクルードする。
cout<<"文字列"
<<がストリームの入出力演算子。
でも従来のprintfも使える。