クラスとは一言で言うと、Cの構造体がレベルアップしたものです。
ですので、Cの構造体を構造体を少しだけ拡張したものと思ってください。
そもそもCの構造体とは、複数の型の変数を一纏めにしたものでした。
例えば、このような形で記述します。
学生構造体
struct Student { //構造体タグ名
int number; //int 型メンバ変数 学籍番号
char name[20]; //char型メンバ変数 氏名
int japanese; //int 型メンバ変数 国語
int math; //int 型メンバ変数 数学
int science; //int 型メンバ変数 理科
};
構造体では変数をまとめられるだけでしたが、C++のクラスでは関連する
手続き(関数)もまとめることができます。
例えば、このような形で記述します。(^_^;)
学生クラス
class Student { //クラス名
public: //キーワード
//メンバ関数 学生情報を設定する
int SetStudentInfo(int num, char *name, int ja, int ma, int sci);
//メンバ関数 学籍番号から3教科の合計点を求める
int GetSum(int student_num);
private: //キーワード
int number; //メンバ変数 学籍番号
char name[20]; //メンバ変数 氏名
int japanese; //メンバ変数 国語
int math; //メンバ変数 数学
int science; //メンバ変数 理科
};
classはクラス宣言をしているだけので、ちょうど構造体のstructと同じような役割ですね。
クラスに含まれる要素を総称して、メンバといいます。
public, private は、以前 お約束 の記事で紹介したC++のキーワードになります。
詳しい説明はまた別の記事でしたいと思います。
まずは、こういう形式だというイメージを捉えてください。
オブジェクトの概念
クラスは、変数に対する型のようなもので、それ自体には値を格納することはできません。
そのため、クラスという設計図を元に値を格納できる実体を作る必要があります。
この実体がオブジェクトという モノ になります。
Cの構造体でも型を定義した後、使うときに実体を宣言しましたね。あれと同じです。
それでは、今日はこのへんで。成し遂げたいことのために挑みつづけると多忙な毎日が送れます^^
次回はクラスとメンバ関数の定義やオブジェクトの生成などを詳しく説明したいと思います。
今日の名言
自分の心に描く夢の実現に向かって努力する時、普段なら思いもよらぬ、成功が得られる。
空中に楼閣を建てても無駄骨には終わらない。楼閣は空中に建てるものだ。
さあ、その下に土台を建てよう。
ヘンリー・デイビッド・ソロー
大胆は勇気を、臆病は恐怖をもたらす。
プブリウス・シルス
結局のところ、「こんなことは馬鹿げてはいないか」という恐怖心以外に、
この世に馬鹿げたものは存在しない。
アンリ・フォーコニエ
2013年7月31日水曜日
名前空間とは?
前回の最後に、 std::cout, std::endln の std:: の部分が面倒であるという話をしました。
ソースファイルにこんなおまじないを追加すると、std::を書かなくて済み
少しだけ手間が省けます。
using namespace std;
名前空間stdを使用したC++版超有名!?なプログラム
どうでしょうか、おまじない追加前は、std::coutやstd::endlは std という名前空間の中にあることを
明示する必要がありました。
しかし、using namespace std; を記述すれば、その後はcout, endl と記述するだけでよいのです。
名前空間もC++の大事な概念です。
いきなり難しい話になってしまいました。(汗)
今はこういう話がある程度に流していただいて構いません。
この仕組みを使うことで、グローバル変数や関数の有効範囲を分割できます。
実際にどういう時に使うかというと、複数のライブラリやソースファイルを使用する場合です。
例えば次の2つのソースファイルを見てください。
peach.cpp pine.cpp
: :
int GetPrice() { int GetPrice() {
return 150; return 298;
} }
: :
peach.cpp と pine.cpp は同じ場所にあるものとします。
そして、両方で GetPrice()という関数を宣言しています。
このままだと、コンパイル時に関数名が重なってしまい、リンクエラーになってしまいます。
これを解決するためには、関数の有効範囲に名前をつけて分割し、重複しないようにします。
名前空間を定義した2つのファイル
peach.cpp pine.cpp
namespace Peach { namespace Pine {
int GetPrice() { int GetPrice() {
return 150; return 298;
} }
} }
では、いざこの関数を使いたいときはどうするか?
どちらのGetPrice()を使うか区別できないと困りますよね。(^_^;)
そこで、名前空間内の変数や関数を使うときに
「名前空間名::関数名(変数名やクラス名)」 と記述します。
先ほどの例に当てはめると、このようになります。
cout << Peach::GetPrice() << endl;
cout << Pine::GetPrice() << endl;
もし頻繁に同じ名前空間を使うのであれば、std:: の時と同様、ソースファイルの頭に
この例ではusing namespace Peach; と記述すると、Peach:: を指定する必要がなくなります。
ただし、使用する側で重複が発生した場合には、結局 名前空間名:: が必要です。
using namespace宣言は、共通関数などに限定した使い方がよいでしょう。^^
今日の名言 超長いです(^_^;)
少女時代の私は綺麗だと思われたくてたまりませんでした。私なんか誰の目にも止まらない、
美しいと褒めてくれるはずもないと思い込んでいたからです。「あんたみたいな、みにくいアヒルの子に、ハンサムな彼氏なんかできっこないわ」と、よく姉妹たちにからかわれたものでした。
私はいつも恥ずかしい思いをしていました。服は叔母さんのお古の仕立て直しばかりだし、
ダンスもスケートもからきし駄目だし、よその女の子みたいに綺麗じゃないし、パーティーではいつも仲間はずれだし...。
いまでもはっきり覚えています。クリスマス・パーティーの席で私がいつものように一人ぼっちでいると、一人の若者が「踊りませんか」と話しかけてくれたうれしさを!彼の名はフランクリン・D・ルーズヴェルト。
二十年以上もの間、私は劣等感と恐怖心に苛まれてきました。私の家系は、母も祖母も叔母たちも、揃いも揃ってニューヨーク社交界きっての美人揃いなのに、どうしたわけか私一人だけが不器量なので恥ずかしくてたまらなかったのです。母はよく訪問客に語ったものです。「エレノアったら、あんまり年寄り臭いので、皆からおばあちゃんとよばれているのですよ」
こんな私に勇気を与える転機となったのは、私よりもっと不幸な方々を助けてあげる事でした。例えば、1910年には、夫はニューヨーク州の上院議員として、他の18人の議員とともに、ある悪徳議員と闘っていましたので、アルバニーの私達夫婦の家は会議所みたいになり、毎日毎晩のように泊まりこみで討議が続けられていました。いたたまれなくなった私が他の議員の方々の奥さんに会ってみると、ホテルの一室でションボリ一人暮らしをしている方々が多いのにびっくりしました。ご主人以外は誰ひとり知らない、この気の毒な奥さん方を元気づけ、励ましているうちに、いつしか私にも勇気と自信が湧いてきました。
この世の中で恐怖心ほど人の心を傷つけるものはありません。私よりはるかに不幸な方々を助けることにより、私は自分の恐怖と闘い、ついにそれを克服したのです。恐ろしくて手が出なかったことを何とかしてやり遂げれば、誰でも恐怖心を克服できる、と私は信じます。ただしそのためには、絶えずこうしたことをやり続けて、成功の実績を積み重ねることが第一です。
エレノア・ルーズヴェルト
ソースファイルにこんなおまじないを追加すると、std::を書かなくて済み
少しだけ手間が省けます。
using namespace std;
名前空間stdを使用したC++版超有名!?なプログラム
#include <iostream> using namespace std; int main(void) { cout << "Hello, Work!" << endl; return 0; } |
どうでしょうか、おまじない追加前は、std::coutやstd::endlは std という名前空間の中にあることを
明示する必要がありました。
しかし、using namespace std; を記述すれば、その後はcout, endl と記述するだけでよいのです。
名前空間もC++の大事な概念です。
いきなり難しい話になってしまいました。(汗)
今はこういう話がある程度に流していただいて構いません。
この仕組みを使うことで、グローバル変数や関数の有効範囲を分割できます。
実際にどういう時に使うかというと、複数のライブラリやソースファイルを使用する場合です。
例えば次の2つのソースファイルを見てください。
peach.cpp pine.cpp
: :
int GetPrice() { int GetPrice() {
return 150; return 298;
} }
: :
peach.cpp と pine.cpp は同じ場所にあるものとします。
そして、両方で GetPrice()という関数を宣言しています。
このままだと、コンパイル時に関数名が重なってしまい、リンクエラーになってしまいます。
これを解決するためには、関数の有効範囲に名前をつけて分割し、重複しないようにします。
名前空間を定義した2つのファイル
peach.cpp pine.cpp
namespace Peach { namespace Pine {
int GetPrice() { int GetPrice() {
return 150; return 298;
} }
} }
では、いざこの関数を使いたいときはどうするか?
どちらのGetPrice()を使うか区別できないと困りますよね。(^_^;)
そこで、名前空間内の変数や関数を使うときに
「名前空間名::関数名(変数名やクラス名)」 と記述します。
先ほどの例に当てはめると、このようになります。
cout << Peach::GetPrice() << endl;
cout << Pine::GetPrice() << endl;
もし頻繁に同じ名前空間を使うのであれば、std:: の時と同様、ソースファイルの頭に
この例ではusing namespace Peach; と記述すると、Peach:: を指定する必要がなくなります。
ただし、使用する側で重複が発生した場合には、結局 名前空間名:: が必要です。
using namespace宣言は、共通関数などに限定した使い方がよいでしょう。^^
今日の名言 超長いです(^_^;)
少女時代の私は綺麗だと思われたくてたまりませんでした。私なんか誰の目にも止まらない、
美しいと褒めてくれるはずもないと思い込んでいたからです。「あんたみたいな、みにくいアヒルの子に、ハンサムな彼氏なんかできっこないわ」と、よく姉妹たちにからかわれたものでした。
私はいつも恥ずかしい思いをしていました。服は叔母さんのお古の仕立て直しばかりだし、
ダンスもスケートもからきし駄目だし、よその女の子みたいに綺麗じゃないし、パーティーではいつも仲間はずれだし...。
いまでもはっきり覚えています。クリスマス・パーティーの席で私がいつものように一人ぼっちでいると、一人の若者が「踊りませんか」と話しかけてくれたうれしさを!彼の名はフランクリン・D・ルーズヴェルト。
二十年以上もの間、私は劣等感と恐怖心に苛まれてきました。私の家系は、母も祖母も叔母たちも、揃いも揃ってニューヨーク社交界きっての美人揃いなのに、どうしたわけか私一人だけが不器量なので恥ずかしくてたまらなかったのです。母はよく訪問客に語ったものです。「エレノアったら、あんまり年寄り臭いので、皆からおばあちゃんとよばれているのですよ」
こんな私に勇気を与える転機となったのは、私よりもっと不幸な方々を助けてあげる事でした。例えば、1910年には、夫はニューヨーク州の上院議員として、他の18人の議員とともに、ある悪徳議員と闘っていましたので、アルバニーの私達夫婦の家は会議所みたいになり、毎日毎晩のように泊まりこみで討議が続けられていました。いたたまれなくなった私が他の議員の方々の奥さんに会ってみると、ホテルの一室でションボリ一人暮らしをしている方々が多いのにびっくりしました。ご主人以外は誰ひとり知らない、この気の毒な奥さん方を元気づけ、励ましているうちに、いつしか私にも勇気と自信が湧いてきました。
この世の中で恐怖心ほど人の心を傷つけるものはありません。私よりはるかに不幸な方々を助けることにより、私は自分の恐怖と闘い、ついにそれを克服したのです。恐ろしくて手が出なかったことを何とかしてやり遂げれば、誰でも恐怖心を克服できる、と私は信じます。ただしそのためには、絶えずこうしたことをやり続けて、成功の実績を積み重ねることが第一です。
エレノア・ルーズヴェルト
2013年7月29日月曜日
プログラミングの心構え
前回、超有名な!?プログラムは心構えが足りないと書きました。
その心構えについてです。
再掲 超有名!?なプログラム
実はこのプログラム、オプションを付けてコンパイルすると警告がでます。
root@ubuntu:~# cc -Wall -o hellowork hellowork.c
hellowork.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
hellowork.c: In function ‘main’:
hellowork.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
-Wall オプションをつけるとコンパイラの警告チェックが厳しくなります。
プログラムに致命的ではないが、何らかの問題があることを指摘してくれます。
警告の内容は、こんな感じです。^^;
main()関数の戻り値が書いてないから、デフォルトの int にするけどいいよね?
main()関数の戻り値書いてないけどいいの?、voidではないみたいだけど。
この警告に限れば、 無視して実行しても動作上の影響はありませんが、
警告一つで、実行できなかったり、期待通り動作しないという場合もあります。
また、システム開発の現場では、ソフトウェアの品質問題にも繋がるため
極力なくすようにしているかと思います。
せっかくコンパイラが親切に教えてくれているのです。
-Wall オプションを付けて日頃から、警告のないプログラムを作成したいものです。
そもそも人に何か指摘されるのって、嫌じゃないですか?
警告のないようキチンと書くとこうなります。
キチンとした超有名!?なプログラム
キチンとしたC++版超有名!?なプログラム
どうでしょうか? -Wall をつけてコンパイルしても warning がでなくなっているはずです。
コンパイラがぐうの音も出せない、品質が良いプログラムになりました。^^
ところで、C++版の方の std::cout, std::endl って記述は何か面倒くさいなと感じませんか?
次回はこの辺りについて触れたいと思います。
今日の名言
肝だめしに夜、墓地を一人で歩く少年は、さも陽気そうに口笛をぴーぴー吹き鳴らす。
すると恐怖心は口笛で「吹き飛ばされ」、墓地を歩くのが怖くもなんともなくなる。これと同じように、
自分のふさぎきった心を口笛で吹き飛ばして、他人までふさぎの巻き添えにしないよう気を配る者が、もっといてもよさそうなものだ。楽しそうに振舞っていると、いつか本当に楽しくなる。物事に
熱中するにはこの手に限る。仕事にしろ会議にしろ、面白くてたまらないといった態度で取り掛かれば、いつの間にか本当に熱中している自分に気がつくものだ。
デール・カーネギー
もし何かを恐れているなら、他の人々もまたあなたと同様、何かに対して恐怖心を持ったことを思い出していただきたい。「こんなことを人から言われやしないか?」、「上司から叱られるかもしれない」、「近所の連中の噂話が気になる」-こうして並べてみると、どれもこれも未来のことばかりだ。
つまり過去は怖くないのだ。何が起こったかをちゃんと分かっているし、思ったほど大したことでもなかったのだから。しかし未来は一寸先もわからない!未来の恐怖と闘う方法は簡単である。
「なぜ恐ろしいのか」という理由を一つ一つ考えてみれば、怖さも薄れてくる。最悪の事態がどの程度なのかわかれば、怖がることもなくなる。あなたは、こう呟くだろう。「何だ、あれ位の事など!」
デール・カーネギー
その心構えについてです。
再掲 超有名!?なプログラム
#include <stdio.h> main() { printf("Hello, Work!\n"); } |
実はこのプログラム、オプションを付けてコンパイルすると警告がでます。
root@ubuntu:~# cc -Wall -o hellowork hellowork.c
hellowork.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
hellowork.c: In function ‘main’:
hellowork.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
-Wall オプションをつけるとコンパイラの警告チェックが厳しくなります。
プログラムに致命的ではないが、何らかの問題があることを指摘してくれます。
警告の内容は、こんな感じです。^^;
main()関数の戻り値が書いてないから、デフォルトの int にするけどいいよね?
main()関数の戻り値書いてないけどいいの?、voidではないみたいだけど。
この警告に限れば、 無視して実行しても動作上の影響はありませんが、
警告一つで、実行できなかったり、期待通り動作しないという場合もあります。
また、システム開発の現場では、ソフトウェアの品質問題にも繋がるため
極力なくすようにしているかと思います。
せっかくコンパイラが親切に教えてくれているのです。
-Wall オプションを付けて日頃から、警告のないプログラムを作成したいものです。
そもそも人に何か指摘されるのって、嫌じゃないですか?
警告のないようキチンと書くとこうなります。
キチンとした超有名!?なプログラム
#include <stdio.h> int main(void) { printf("Hello, Work!\n"); return 0; } |
キチンとしたC++版超有名!?なプログラム
#include <iostream> int main(void) { std::cout << "Hello, Work!" << std::endl; return 0; } |
どうでしょうか? -Wall をつけてコンパイルしても warning がでなくなっているはずです。
コンパイラがぐうの音も出せない、品質が良いプログラムになりました。^^
ところで、C++版の方の std::cout, std::endl って記述は何か面倒くさいなと感じませんか?
次回はこの辺りについて触れたいと思います。
今日の名言
肝だめしに夜、墓地を一人で歩く少年は、さも陽気そうに口笛をぴーぴー吹き鳴らす。
すると恐怖心は口笛で「吹き飛ばされ」、墓地を歩くのが怖くもなんともなくなる。これと同じように、
自分のふさぎきった心を口笛で吹き飛ばして、他人までふさぎの巻き添えにしないよう気を配る者が、もっといてもよさそうなものだ。楽しそうに振舞っていると、いつか本当に楽しくなる。物事に
熱中するにはこの手に限る。仕事にしろ会議にしろ、面白くてたまらないといった態度で取り掛かれば、いつの間にか本当に熱中している自分に気がつくものだ。
デール・カーネギー
もし何かを恐れているなら、他の人々もまたあなたと同様、何かに対して恐怖心を持ったことを思い出していただきたい。「こんなことを人から言われやしないか?」、「上司から叱られるかもしれない」、「近所の連中の噂話が気になる」-こうして並べてみると、どれもこれも未来のことばかりだ。
つまり過去は怖くないのだ。何が起こったかをちゃんと分かっているし、思ったほど大したことでもなかったのだから。しかし未来は一寸先もわからない!未来の恐怖と闘う方法は簡単である。
「なぜ恐ろしいのか」という理由を一つ一つ考えてみれば、怖さも薄れてくる。最悪の事態がどの程度なのかわかれば、怖がることもなくなる。あなたは、こう呟くだろう。「何だ、あれ位の事など!」
デール・カーネギー
2013年7月28日日曜日
C, C++で最初のプログラム
前置きが非常に長くなりましたが、いよいよ最初のプログラミングの始まりです。^^;
CとC++の関係
C++はCの機能を拡張した言語であると説明しました。
そのためCの文法や関数は、ほとんどそのままC++で使うことができます。
例えば以下のような、Cの超有名なプログラムは、C++でコンパイルしても、実行できるのです。
超有名!?なプログラム
いいですか、Hello, World! ではなく Hello, Work! ですよ(*´艸`*)
やるぞ、プログラミングって意気込みを表現しています。
#include <stdio.h> は printf()関数を使うために必要です。
printf()関数で文字列を表示できます。
\nは改行です。(バックスラッシュとエヌで表記します。)
このプログラムをTerminalで hellowork.c というファイル名で作成します。
1. Ubuntu の Dash Home から Terminal を検索し、クリックして起動
2. gedit hellowork.c と入力するとエディタが起動するので上のプログラムを入力
3. 保存して閉じる
コンパイル&実行結果
Cではコマンドラインでの入力は以下のようになります。
cc -o hellowork hellowork.c
意味は、hellowork.c というプログラムをコンパイルし、hellowork という実行ファイルを作成せよ。
そして、C++ではこうなります。(拡張子を.cppにしたファイルを作成してください。)
g++ -o hellowork hellowork.cpp
こちらの意味は、hellowork.cppというプログラムを...(以下略)
最初のコマンドが Cだとcc、C++だとg++ になるという違いがあります。
-o の後に実行ファル名を指定できます。
なるべく分かりやすい名称にするとよいと思います。
注)もし、g++ がないと言われたら... 簡単です、インストールしてください(^_^;)
root@ubuntu:~# g++ -o hellowork hellowork.cpp
The program 'g++' can be found in the following packages:
* g++
* pentium-builder
Try: apt-get install <selected package>
root@ubuntu:~# apt-get install g++
実行についてですが、ドット スラッシュ プログラム名 で作成したプログラムの実行となります。
こんな感じです^^
どうでしょうか、簡単ですね。
効果的な学習のために、見るだけでなく実際にやってみることが、とても大事です。
最後に超有名!?なプログラムをC++で書くとどうなるか、を記載してみます。
C++版超有名!?なプログラム
使用するコンパイラは g++ の方ですので注意してください。
#include <iostream> は std::cout(), std::endl()関数を使うために必要です。
std::cout()関数で文字列を表示できます。
std::endl()関数で改行できます。
実はこれらの超有名!?なプログラムは 開発者としての心構えが不足しています。
次回はそのあたりの話をしたいと思います。
今日の名言
次の心得を守れば、十中八九成功する - 自信をもつこと、そして仕事に全力を尽くすこと。
トーマス・E・ウィルソン
恐怖の目で未来を眺めるのは、危険極まりない。
エドワード・ヘンリー・ハリマン
CとC++の関係
C++はCの機能を拡張した言語であると説明しました。
そのためCの文法や関数は、ほとんどそのままC++で使うことができます。
例えば以下のような、Cの超有名なプログラムは、C++でコンパイルしても、実行できるのです。
超有名!?なプログラム
#include <stdio.h> main() { printf("Hello, Work!\n"); } |
いいですか、Hello, World! ではなく Hello, Work! ですよ(*´艸`*)
やるぞ、プログラミングって意気込みを表現しています。
#include <stdio.h> は printf()関数を使うために必要です。
printf()関数で文字列を表示できます。
\nは改行です。(バックスラッシュとエヌで表記します。)
このプログラムをTerminalで hellowork.c というファイル名で作成します。
1. Ubuntu の Dash Home から Terminal を検索し、クリックして起動
2. gedit hellowork.c と入力するとエディタが起動するので上のプログラムを入力
3. 保存して閉じる
コンパイル&実行結果
Cではコマンドラインでの入力は以下のようになります。
cc -o hellowork hellowork.c
意味は、hellowork.c というプログラムをコンパイルし、hellowork という実行ファイルを作成せよ。
そして、C++ではこうなります。(拡張子を.cppにしたファイルを作成してください。)
g++ -o hellowork hellowork.cpp
こちらの意味は、hellowork.cppというプログラムを...(以下略)
最初のコマンドが Cだとcc、C++だとg++ になるという違いがあります。
-o の後に実行ファル名を指定できます。
なるべく分かりやすい名称にするとよいと思います。
注)もし、g++ がないと言われたら... 簡単です、インストールしてください(^_^;)
root@ubuntu:~# g++ -o hellowork hellowork.cpp
The program 'g++' can be found in the following packages:
* g++
* pentium-builder
Try: apt-get install <selected package>
root@ubuntu:~# apt-get install g++
実行についてですが、ドット スラッシュ プログラム名 で作成したプログラムの実行となります。
こんな感じです^^
root@ubuntu:~# ./hellowork Hello,Work! root@ubuntu:~# |
どうでしょうか、簡単ですね。
効果的な学習のために、見るだけでなく実際にやってみることが、とても大事です。
最後に超有名!?なプログラムをC++で書くとどうなるか、を記載してみます。
C++版超有名!?なプログラム
#include <iostream> main() { std::cout << "Hello, Work!" << std::endl; } |
使用するコンパイラは g++ の方ですので注意してください。
#include <iostream> は std::cout(), std::endl()関数を使うために必要です。
std::cout()関数で文字列を表示できます。
std::endl()関数で改行できます。
実はこれらの超有名!?なプログラムは 開発者としての心構えが不足しています。
次回はそのあたりの話をしたいと思います。
今日の名言
次の心得を守れば、十中八九成功する - 自信をもつこと、そして仕事に全力を尽くすこと。
トーマス・E・ウィルソン
恐怖の目で未来を眺めるのは、危険極まりない。
エドワード・ヘンリー・ハリマン
2013年7月27日土曜日
クラスとは何ぞや?
C++の重要な概念であるクラスとは データ と 手続き をまとめたものです。
Cではデータと手続きの管理がバラバラだったので、複雑なアプリケーションは
非常にわかりにくいプログラムとなっていました。
C++では、関連したデータや手続きをクラスという一つの部品にします。
この部品は必要に応じて再利用できますので、複雑なプログラムがわかりやすくなる
というメリットがあります。
クラスは簡単に言うと部品の設計図なので、そのままでは利用できません。
使うためには設計図を元にメモリを割り当て(インスタンス化)、実体を生成します。
そして、この実体のことをオブジェクトといいます。
クラスはオブジェクトになって初めて利用できるようになるのです。
オブジェクト指向
データと手続きをまとめた部品(オブジェクト)ごとにプログラムを作成していく考え方を
オブジェクト指向プログラミングといいます。
このオブジェクト指向をサポートしたプログラミング言語のことを
オブジェクト指向言語といいます。
最近の潮流としては C++、Java、C# がそうでしょうか。
オブジェクト指向と聞いてもまだモヤモヤ感があるかもしれません。
何が モノ なんだろうか?と気になって夜も眠れなくなったり...
というのはモチロン冗談です^^
そんなに悩むようなことは一つもありません。
ですから、ここで諦めずに着実についてきてください。
だんだんと分かるようになってきますよ(^^)
今日の名言
私は今年で86歳になるが、この歳になるまでに、相当な数の人々が下積みから這い上がって
成功するのを見届けてきた。成功者になるために一番大切なことは、「自分にもできる」という
信念である。思い切って事に当たらない限り、決して名声も成功も得られない。
ジェイムズ・ギボンズ枢機卿
人間のできることならなんだって出来るという気になれば、たとえどんな困難にあっても、いつかは
必ず目標を達成できる。これと反対に、ごく単純な事柄でさえ、自分には無理だと思いこめば、
たかがモグラの積み上げた土くれに過ぎぬものが、目も眩むような高山に見える。
エミール・クーエ
勇気とは恐怖心に抵抗することである。これは恐怖をぜんぜん知らないということではない。
恐怖を我が物にするということである。人間にはどこか臆病なところがあるからこそ「大胆」
というのが褒め言葉になるのだ。ノミがいい例だ。もし恐怖の欠如が勇気であるならば、
ノミこそは神の想像した一番勇気のある生物である。相手が眠っていようと目覚めていようと
ノミは平気で攻撃を仕掛ける。ノミにとって我々人間に手向かうことは、赤ん坊が全世界の
軍隊に手向かうようなものだが、ノミは一向に気にしない。ノミは昼も夜も危険と死の真っ只中に
いるが、千年前の昔にもあった、大震災が起こる前の、街を歩く人間のように、平気な顔
である。クライブやネルソンやプットナムを「恐怖を知らぬもの」として数え上げる場合、
こうした連中にもう一つノミをつけ加える事を忘れてはならない。
-そして先頭に立たせることだ。
マーク・トウェイン
Cではデータと手続きの管理がバラバラだったので、複雑なアプリケーションは
非常にわかりにくいプログラムとなっていました。
C++では、関連したデータや手続きをクラスという一つの部品にします。
この部品は必要に応じて再利用できますので、複雑なプログラムがわかりやすくなる
というメリットがあります。
クラスは簡単に言うと部品の設計図なので、そのままでは利用できません。
使うためには設計図を元にメモリを割り当て(インスタンス化)、実体を生成します。
そして、この実体のことをオブジェクトといいます。
クラスはオブジェクトになって初めて利用できるようになるのです。
オブジェクト指向
データと手続きをまとめた部品(オブジェクト)ごとにプログラムを作成していく考え方を
オブジェクト指向プログラミングといいます。
このオブジェクト指向をサポートしたプログラミング言語のことを
オブジェクト指向言語といいます。
最近の潮流としては C++、Java、C# がそうでしょうか。
オブジェクト指向と聞いてもまだモヤモヤ感があるかもしれません。
何が モノ なんだろうか?と気になって夜も眠れなくなったり...
というのはモチロン冗談です^^
そんなに悩むようなことは一つもありません。
ですから、ここで諦めずに着実についてきてください。
だんだんと分かるようになってきますよ(^^)
今日の名言
私は今年で86歳になるが、この歳になるまでに、相当な数の人々が下積みから這い上がって
成功するのを見届けてきた。成功者になるために一番大切なことは、「自分にもできる」という
信念である。思い切って事に当たらない限り、決して名声も成功も得られない。
ジェイムズ・ギボンズ枢機卿
人間のできることならなんだって出来るという気になれば、たとえどんな困難にあっても、いつかは
必ず目標を達成できる。これと反対に、ごく単純な事柄でさえ、自分には無理だと思いこめば、
たかがモグラの積み上げた土くれに過ぎぬものが、目も眩むような高山に見える。
エミール・クーエ
勇気とは恐怖心に抵抗することである。これは恐怖をぜんぜん知らないということではない。
恐怖を我が物にするということである。人間にはどこか臆病なところがあるからこそ「大胆」
というのが褒め言葉になるのだ。ノミがいい例だ。もし恐怖の欠如が勇気であるならば、
ノミこそは神の想像した一番勇気のある生物である。相手が眠っていようと目覚めていようと
ノミは平気で攻撃を仕掛ける。ノミにとって我々人間に手向かうことは、赤ん坊が全世界の
軍隊に手向かうようなものだが、ノミは一向に気にしない。ノミは昼も夜も危険と死の真っ只中に
いるが、千年前の昔にもあった、大震災が起こる前の、街を歩く人間のように、平気な顔
である。クライブやネルソンやプットナムを「恐怖を知らぬもの」として数え上げる場合、
こうした連中にもう一つノミをつけ加える事を忘れてはならない。
-そして先頭に立たせることだ。
マーク・トウェイン
C++とは
何だか難しそうだなとか思っている方、ご安心ください^^
C++は、Cの機能を拡張してできた言語ですので、Cの知識をそのまま活用することができます。
例えば、printf()関数などはC++でも使用できるのです。
最初のうちは、いざとなったらCで記述するとかいう気持ちでも良いのです。
もちろん Cを全く知らない方が、最初にC++を始めても全く問題ありません。
むしろこのまま、C++, Java, C# とひたすらにオブジェクト指向の道を突き進むのが
世の中のニーズにマッチしており、仕事が見つかり易いのかもしれません。
新しいものをどんどん取り入れていかないと、時代の流れに取り残されてしまいます。
私自身、ここ数年は特にそう感じています。
袖振り合うも多生の縁
ということで、 せっかくこのページを見ていただいたのですし、
是非一緒にプログラミングの世界を楽しみながら学習していきましょう^^
なお、実際の現場では両方の言語が混在してシステム開発が行われているという
ケースがザラにあります。
ですので、結局はC、C++両方の知識は必要になってきます。
一旦こんな機能があるんだという全体像をざっくり捉えたあと、必要な部分を掘り下げて
いけば、いつの間にか出来るようになります。
大事なのは、忘れないよう継続して取り組むことです。
C++のスゴイところまとめ
C言語の機能がほとんど使える
C++で拡張された書き方
オブジェクト指向プログラミングの機能
オブジェクト指向プログラミングとは
オブジェクト指向プログラミングでは、データとそれを操作する手続き(要は関数のこと)を
ひとまとまりとして扱います。このデータと手続きのまとまりをオブジェクトと言うのです。
これで今日からあなたもオブジェクト指向とは何かが説明出来ますね^^
今日の名言
一日に少なくともひとつは自分の力にあまることを成し遂げようとしない限り、
どんな人間でもたいした成功は期待できない。
エルバート・ハバード
障害を克服できると信ずるものだけが、本当に障害を克服することが出来る。
一日に一つでも恐怖の対象を克服しない者は、まだ人生の第一課さえ学んでいない。
ラルフ・ワルド・エマーソン
とてもできそうもないと思える事柄でも、思い切ってぶつかることだ。
恐怖心はあっというまに溶け去るだろう。
デール・カーネギー
進退きわまって四方八方敵だらけとなり、もう一刻も持ちこたえられないという気持ちになっても
決しいてそこで諦めてはいけません。情勢が一変するのは、まさにこれからなのですから。
ハリエット・ビーチャー・ストー
C++は、Cの機能を拡張してできた言語ですので、Cの知識をそのまま活用することができます。
例えば、printf()関数などはC++でも使用できるのです。
最初のうちは、いざとなったらCで記述するとかいう気持ちでも良いのです。
もちろん Cを全く知らない方が、最初にC++を始めても全く問題ありません。
むしろこのまま、C++, Java, C# とひたすらにオブジェクト指向の道を突き進むのが
世の中のニーズにマッチしており、仕事が見つかり易いのかもしれません。
新しいものをどんどん取り入れていかないと、時代の流れに取り残されてしまいます。
私自身、ここ数年は特にそう感じています。
袖振り合うも多生の縁
ということで、 せっかくこのページを見ていただいたのですし、
是非一緒にプログラミングの世界を楽しみながら学習していきましょう^^
なお、実際の現場では両方の言語が混在してシステム開発が行われているという
ケースがザラにあります。
ですので、結局はC、C++両方の知識は必要になってきます。
一旦こんな機能があるんだという全体像をざっくり捉えたあと、必要な部分を掘り下げて
いけば、いつの間にか出来るようになります。
大事なのは、忘れないよう継続して取り組むことです。
C++のスゴイところまとめ
C言語の機能がほとんど使える
C++で拡張された書き方
オブジェクト指向プログラミングの機能
オブジェクト指向プログラミングとは
オブジェクト指向プログラミングでは、データとそれを操作する手続き(要は関数のこと)を
ひとまとまりとして扱います。このデータと手続きのまとまりをオブジェクトと言うのです。
これで今日からあなたもオブジェクト指向とは何かが説明出来ますね^^
今日の名言
一日に少なくともひとつは自分の力にあまることを成し遂げようとしない限り、
どんな人間でもたいした成功は期待できない。
エルバート・ハバード
障害を克服できると信ずるものだけが、本当に障害を克服することが出来る。
一日に一つでも恐怖の対象を克服しない者は、まだ人生の第一課さえ学んでいない。
ラルフ・ワルド・エマーソン
とてもできそうもないと思える事柄でも、思い切ってぶつかることだ。
恐怖心はあっというまに溶け去るだろう。
デール・カーネギー
進退きわまって四方八方敵だらけとなり、もう一刻も持ちこたえられないという気持ちになっても
決しいてそこで諦めてはいけません。情勢が一変するのは、まさにこれからなのですから。
ハリエット・ビーチャー・ストー
お約束
ソースファイルとヘッダファイルの拡張子
ファイルの拡張子は一般的には以下のようになっています。
C ソースファイル "c" ヘッダファイル "h"
C++ ソースファイル "cpp", "cxx" ヘッダファイル "h", "hpp"
このサイトでは 青字になっている拡張子で説明していきます。
プログラム記述時の注意
正常に動作するプログラムを作るための注意点です。
① 原則、半角で記述(コメントや""ダブルクォーテーション内では使えます)
② 半角カナ使用禁止(汎用性を損ねます)
③ 全角スペースは特に注意(謎のコンパイルエラーに遭遇します)
④ 大文字と小文字は区別する(ifとIFでは別物として扱われます)
⑤ コメント形式は /* */, //の2通りを使う(どちらかに統一したいですね)
/* からコメントが始まり */ で終わりです。入れ子などにしてしまうと混乱のもとです。
// はその一行がコメントになります。
⑥ 予約語に注意
コンパイラが使用するキーワードですので、その用途以外では使えません。
~予約語とは~
変数名や関数名は、プログラマが独自に名前を決めて定義できます。予約語とはこの時に
名前として使用できない単語です。
Cでは次の単語が予約語です
さらにC++では上記の他に次の単語が加わります。
C++は、その名の通りCを拡張した言語なのでCの予約語は全部含まれるのです。
これらは使っていくうちに自然と覚えられますので、全部知らなくても大丈夫です。
もし全部知ってたらかなりのツワモノですね(^_^;)
予約語になっているものは、コンパイル時に特別な命令として解釈されるので
はじめから使えないようになっているのです。
今日の名言
君は本当に自分の抱いた理想像に到達しているだろうか。もし自分の行為を反省して
「イカン、あれは大失敗だった。ついカッとなって、怒らせなくてもよい人を怒らせてしまった。
もっとよく考えてから話せばよかった」と言い聞かせる勇気がなければ、君はまだまだ
理想像に到達していない。
ドワイト・D・アイゼンハワー
勇者の気持ちを味わいたければ、ありったけの気力を振り絞って、勇者らしく振る舞うことだ。
その時、恐ろしくていたたまれない気持ちは、勇気凛々としてじっとしていられない気持ちに、
取って代わられるだろう。
ウィリアム・ジェイムズ
ファイルの拡張子は一般的には以下のようになっています。
C ソースファイル "c" ヘッダファイル "h"
C++ ソースファイル "cpp", "cxx" ヘッダファイル "h", "hpp"
このサイトでは 青字になっている拡張子で説明していきます。
プログラム記述時の注意
正常に動作するプログラムを作るための注意点です。
① 原則、半角で記述(コメントや""ダブルクォーテーション内では使えます)
② 半角カナ使用禁止(汎用性を損ねます)
③ 全角スペースは特に注意(謎のコンパイルエラーに遭遇します)
④ 大文字と小文字は区別する(ifとIFでは別物として扱われます)
⑤ コメント形式は /* */, //の2通りを使う(どちらかに統一したいですね)
/* からコメントが始まり */ で終わりです。入れ子などにしてしまうと混乱のもとです。
// はその一行がコメントになります。
⑥ 予約語に注意
コンパイラが使用するキーワードですので、その用途以外では使えません。
~予約語とは~
変数名や関数名は、プログラマが独自に名前を決めて定義できます。予約語とはこの時に
名前として使用できない単語です。
Cでは次の単語が予約語です
auto | break | case | char | const | continue | default |
do | double | else | enum | extern | float | for |
goto | if | int | long | register | return | short |
signed | sizeof | static | struct | switch | typedef | union |
unsinged | void | volatile | while |
さらにC++では上記の他に次の単語が加わります。
C++は、その名の通りCを拡張した言語なのでCの予約語は全部含まれるのです。
and | and_eq | asm | bitand | bitor | bool | catch |
class | compl | const_cast | delete | dynamic_cast | explicit | export |
false | friend | inline | mutable | namespace | new | not |
not_eq | operator | or | or_eq | private | protected | public |
reinterpret_cast | static_cast | templete | this | throw | true | try |
typeid | typename | using | virtual | wchar_t | xor | xor_eq |
これらは使っていくうちに自然と覚えられますので、全部知らなくても大丈夫です。
もし全部知ってたらかなりのツワモノですね(^_^;)
予約語になっているものは、コンパイル時に特別な命令として解釈されるので
はじめから使えないようになっているのです。
今日の名言
君は本当に自分の抱いた理想像に到達しているだろうか。もし自分の行為を反省して
「イカン、あれは大失敗だった。ついカッとなって、怒らせなくてもよい人を怒らせてしまった。
もっとよく考えてから話せばよかった」と言い聞かせる勇気がなければ、君はまだまだ
理想像に到達していない。
ドワイト・D・アイゼンハワー
勇者の気持ちを味わいたければ、ありったけの気力を振り絞って、勇者らしく振る舞うことだ。
その時、恐ろしくていたたまれない気持ちは、勇気凛々としてじっとしていられない気持ちに、
取って代わられるだろう。
ウィリアム・ジェイムズ
動作環境
説明
C/C++言語のプログラムはWindowsのコマンドプロンプトやLINUXなどの
CUI(キャラクターユーザインタフェース)環境で動くものと、
WindowsのVisualStudioやLinuxのEclipseのようなGUI(グラフィカルユーザインタフェース)環境で
動くものがあります。
このサイトのプログラムは、LinuxかつCUIの環境で動作するものを扱います。
理由は、テキストエディタやコンパイラが付属しており作業開始しやすいことや
LinuxやCUIを知っておくと、実務で必ず役に立つからです。
現場でLinuxが使われていることは多いですし、何でもGUIで操作できる
簡単便利な環境があるとは限らないのです。
ですから、IT業界でメシを食うなら、コマンドは必須の知識ですね。
また、コマンドを入力することで、コンピュータの内部処理も理解できるというメリットもあります。
そして何より全てをキーボードで操作していると、とても仕事をしてる気になれます(^^♪
Linux環境を構築する
おそらく多くの人が、使用するPCがWindowsでしょうから、プログラミングのため
何とかしてLinuxを動作させる必要があります。
方法は いくつかありますが、おススメなのがWindowsで VMware というツールで
仮想のLinux PCを立ち上げ、そこでプログラミングを実行することです。
昔は仮想環境を構築するとホストPCの動作全般が遅くなってしまい、イライラしたものですが
今ではパソコンも相当ハイスペックになりましたし、VMwareの方も改善され
非常に使いやすくなってきています。
また、使用ディストリビューションは断然 Ubuntu が良いです。
数あるディストリビューションの中でも、抜群の安定感で開発環境向きだと思います。
必要に応じて、日本語化するのも簡単です。
あと仮想PCのメリットは、万が一環境が壊れたとしても、Windowsの方には影響がないので
PCが立ち上がらない、ネットもできないという リスクが回避できます^^
インストールとか設定は機会をみて記事にしたいかと(汗)
プログラミングから実行までの大まかな流れ
①"XXX.c"(C) や "XXX.cpp"(C++) という拡張子のソースファイルにプログラムを記述する。
②ソースファイル をコンパイルする
出来上がったファイルはオブジェクトファイルといいます。
③オブジェクトファイルをリンクする
プログラム実行に必要なシステムファイルやライブラリと結合します。
リンクに成功すると実行可能ファイルが作成されます。
④プログラムを実行する
先ほどの実行可能ファイルを使用します。
こうして、最初は見よう見まねでも、作っては試すを繰り返していくと、徐々に力がついてきます。
当ブログについて
紹介するプログラムは、Windouws7 Home Premium 64bit+VMware 5.02+Ubuntu 12.04.2の
環境で動作確認しています。
万が一内容誤り、誤字脱字等を見つけた場合や、ご意見・ご要望・ご不満など
ございましたら、是非お知らせください。^^
今日の名言
あくまで自分自身と自分の取り組んでいるアイデアを信ずるなら、
たいてい成功することが私にはわかった。
チャールズ・F・ケタリング
人間は逃げ場がなくなれば、不幸と災難に耐え抜き、それを克服することが出来るものだ。
人間には、自分でも驚くほど強力な知恵と能力が隠れている。それを利用する気になりさえ
すればよい。我々は、自分の潜在的な力に気がついていないだけである。
デール・カーネギー
C/C++言語のプログラムはWindowsのコマンドプロンプトやLINUXなどの
CUI(キャラクターユーザインタフェース)環境で動くものと、
WindowsのVisualStudioやLinuxのEclipseのようなGUI(グラフィカルユーザインタフェース)環境で
動くものがあります。
このサイトのプログラムは、LinuxかつCUIの環境で動作するものを扱います。
理由は、テキストエディタやコンパイラが付属しており作業開始しやすいことや
LinuxやCUIを知っておくと、実務で必ず役に立つからです。
現場でLinuxが使われていることは多いですし、何でもGUIで操作できる
簡単便利な環境があるとは限らないのです。
ですから、IT業界でメシを食うなら、コマンドは必須の知識ですね。
また、コマンドを入力することで、コンピュータの内部処理も理解できるというメリットもあります。
そして何より全てをキーボードで操作していると、とても仕事をしてる気になれます(^^♪
Linux環境を構築する
おそらく多くの人が、使用するPCがWindowsでしょうから、プログラミングのため
何とかしてLinuxを動作させる必要があります。
方法は いくつかありますが、おススメなのがWindowsで VMware というツールで
仮想のLinux PCを立ち上げ、そこでプログラミングを実行することです。
昔は仮想環境を構築するとホストPCの動作全般が遅くなってしまい、イライラしたものですが
今ではパソコンも相当ハイスペックになりましたし、VMwareの方も改善され
非常に使いやすくなってきています。
また、使用ディストリビューションは断然 Ubuntu が良いです。
数あるディストリビューションの中でも、抜群の安定感で開発環境向きだと思います。
必要に応じて、日本語化するのも簡単です。
あと仮想PCのメリットは、万が一環境が壊れたとしても、Windowsの方には影響がないので
PCが立ち上がらない、ネットもできないという リスクが回避できます^^
インストールとか設定は機会をみて記事にしたいかと(汗)
プログラミングから実行までの大まかな流れ
①"XXX.c"(C) や "XXX.cpp"(C++) という拡張子のソースファイルにプログラムを記述する。
②ソースファイル をコンパイルする
出来上がったファイルはオブジェクトファイルといいます。
③オブジェクトファイルをリンクする
プログラム実行に必要なシステムファイルやライブラリと結合します。
リンクに成功すると実行可能ファイルが作成されます。
④プログラムを実行する
先ほどの実行可能ファイルを使用します。
こうして、最初は見よう見まねでも、作っては試すを繰り返していくと、徐々に力がついてきます。
当ブログについて
紹介するプログラムは、Windouws7 Home Premium 64bit+VMware 5.02+Ubuntu 12.04.2の
環境で動作確認しています。
万が一内容誤り、誤字脱字等を見つけた場合や、ご意見・ご要望・ご不満など
ございましたら、是非お知らせください。^^
今日の名言
あくまで自分自身と自分の取り組んでいるアイデアを信ずるなら、
たいてい成功することが私にはわかった。
チャールズ・F・ケタリング
人間は逃げ場がなくなれば、不幸と災難に耐え抜き、それを克服することが出来るものだ。
人間には、自分でも驚くほど強力な知恵と能力が隠れている。それを利用する気になりさえ
すればよい。我々は、自分の潜在的な力に気がついていないだけである。
デール・カーネギー
2013年7月26日金曜日
はじめに
アクセスいただき、ありがとうございます^^
このブログは、主にC/C++言語の初心者の方を対象としています。
言語の機能を簡単なサンプルプログラムを交えながら紹介していきます。
また、現場で役立つ技術や便利ツールなどもお伝えできればと思っています。
Cをかじってみてなんとなく使える、C++を始めたけどよく分からんぞオブジェクト指向、
そう感じている方の理解の一助となれば幸いです。
ブログの特徴として、毎回の記事の最後に今日の名言を掲載していきます。
一人で勉強しているとモチベーションの維持が難しいと思います。
やる気を奮い立たせ明日への活力となる、そんな名言ばかりです。
是非、こちらもお楽しみください^^
ここで、少し自己紹介をさせてください。
実は、ソフトウェア業界経験は浅い方です。(7年目)
というのも、卒業後すぐに就職せず色々な回り道を経て今に至るからです。
それでも一本道で同じ業界にいる人間に、 決して負けないレベルまで到達できています。
こんなことなら、 最初から寄り道しなければよかったなどど若干後悔しています。
もし、 そうしていれば画期的な開発をして一躍有名人になっていたかも! ?(・ω<)
何が言いたいかというと、 物事を始めるのに遅すぎるということはない、
思い立ったら即決断する行動力がビジネススキルとして必要、の2点です。
後でやろうなどと思ったことは、 結局やらず終いになってしまうものです。
私自身も常日頃、 知り得た情報から実際に行動に落とし込むところまでを
こんなことなら、
もし、
何が言いたいかというと、
思い立ったら即決断する行動力がビジネススキルとして必要、の2点です。
後でやろうなどと思ったことは、
私自身も常日頃、
意識的に取 り組んでいます。
また、行動した結果どうだったかを分析し次に繋げる。
こうしてPDCAサイクルを回しつづけると、
私には、あとほんの少しの工夫が必要なようなのですが。(^_^;)
まずは実践です。
最後はお約束のあの言葉で締めたいと思います。
いつやるの? 今でしょ!
今日の名言
勇気ある人間になりたければ、以下の5つの心得をしっかり守ることだ。
何事に出会ってもびくともしない人間になること請け合いである。
壱 本当に勇気があるかのように振る舞う。こうすれば元気が出てきて、
「自分だって、あれくらいのことは出来るのだ」という気になるから妙だ。
弐 よく考えてみれば、失望落胆して壁に行き当たった人の多くが、立派にそれを乗り越えて
きているのだ。他人にできたことが自分にもできぬはずがない。
参 人間の生命力は、リズムに従って盛んになったり衰えたりしている。意気消沈して人生に
立ち向かう意欲を失えば、どん底まで落ち込んで這い上がれなくなる。だが、あくまで勇気を
失わなければ、今まで自分を抑え続けてきた力を一転し、失意から抜け出す力に転化できる。
四 昼間より夜のほうが気が滅入るものだ。勇気は太陽と一緒にやってくる。
五 勇気は、人の偉大さを測る物差しである。自分の理想像のレベルに達するまで頑張ることだ。
デール・カーネギー
登録:
投稿 (Atom)