前回以下で、クラウド開発環境PaizaCloudクラウドIDE(ここからはPaizaCloudと書きます。)でのHello World(C++編 その1)を書きました。
クラウド開発環境PaizaCloudクラウドIDEでHello World(C++編 その1)
その続きとして今回はC++編のその2です。
もし実際にやってみる場合でPaizaCloudを利用する場合のやり方が必要な場合は上記の前回までの投稿等を参照してください。
C++でのHello World その2
今回のプログラムは以下です。
#include <iostream>
using namespace std;
// HelloWorldクラスの定義
class HelloWorld {
public:
// メンバ関数 hello を定義
void hello() {
cout << "Hello World!" << endl;
}
};
int main(int argc, char* argv[]) {
// HelloWorldクラスのインスタンスを作成
HelloWorld helloWorld;
// メンバ関数を呼び出して出力
helloWorld.hello();
return 0;
}
コンパイルと実行例
ソースファイル名がHelloWorld2.cppとして以下のようにコンパイルします。
$ g++ HelloWorld2.cpp -o HelloWorld2
以下のように実行します。
$ ./HelloWorld2
nanoエディタで編集したとしてPaizaCloudで以下のように出来ました。
今回のプログラムの解説
今回のHello Worldプログラムを解説をしてみます。
C++(オブジェクト指向)では「クラス」という仕組みを使います。
クラスの中には メンバ変数(データ) と メンバ関数(処理のまとまり) をまとめて入れることができます。
今回の例では以下のような流れです:
-
class HelloWorld { ... };
でクラスを定義 -
void hello()
がこのクラスの「メンバ関数(機能)」でここではcout
を使って文字を出力 -
main
関数ではHelloWorld helloWorld;
としてクラスから「インスタンス(実体)」を作り、helloWorld.hello();
でメンバ関数を呼び出す - (※このプログラムにはメンバ変数は含まれていません。)
用語について補足説明
- クラス = 設計図のようなもの
- インスタンス = 設計図から作られた実体
- メンバ関数 = インスタンスが実行できる処理
このクラスとインスタンスの関係はひとまずC言語での変数の型と実際の変数との関係と考えるといいと思います。
プログラムが大きくなっても、クラスを使うと「役割ごとに整理」できるため、コードをわかりやすくまとめることができます。
※ここでは「オブジェクト指向」という言葉には深く踏み込みませんが、C++が持つ大きな特徴のひとつです。
あたらめてC言語とC++について考える
手続き型言語とオブジェクト指向型言語
C言語とC++との比較では、C言語は手続き型言語で、C++はオブジェクト指向型言語として分類されます。しかしですが前回に書きましたが、C++はC言語を拡張する形で後から開発された言語です。そのためC言語の資産を活用しつつオブジェクト指向を導入することができます。
以上を踏まえて言いたいことは、あまり別の言語と考えないで、例えばC言語を勉強したけどC++はオブジェクト指向だから分からないと思わずに、今回のHelloWorldあたりから実際に動かしてみればいかがですかということです。
手続き型とオブジェクト指向は「どちらが難しい」というより、(かなり強引な表現ですが)整理の仕方が違うだけです。でも中身の細かい処理は、どちらも「順次・分岐・繰り返し」の組み合わせで動いています。
ですから、まずは手続き型でプログラミングの基本(変数・if文・for文など)をしっかり理解するのがおすすめです。その基礎は、C++、C#、Java、Pythonなどの言語を学ぶときにも、そのまま役立ちます。
C++(オブジェクト指向型言語)の優位性が分かるためには
これについて私の考えですが、C言語で前項のプログラミングの基本を習得して、構造体でのレコード操作(データ構造とアルゴリズムの基礎)あたりを習得します。それからC++のクラスライブラリを使ってみたり、拡張したり、独自クラスを設計すると実感してくると思います。
もちろん、始めからJavaやC#でも基礎から順番に習得する流れでもいいとは思います。
これも個人的な考えですが、開発現場のエンジニアとしてはオブジェクト指向の独特な用語を完璧に理解しようとしなくていいと思います。
※注意書き
上記内容はエンジニア(志望の方も含めて)の初学者向けにできるだけ平易な表現でまとめています。そのため、専門的に見ると細かい点では正確さを犠牲にしている部分があるかもしれません。ご了承ください。
さいごに
最後の方はごちゃごちゃと文章で書きましたが、最初に戻ってPaizaCloudはすぐにC言語とC++もコンパイル出来るので興味を持ったら実際に実行までやってみればいかがでしょうか。そのまま動いたら関数名を変えるとかメッセージを変えるとかでもいいのでやってみればと思います。あとメンバ変数を追加してみたりするのもいいと思います。(言うまでもなくAIを利用すればいろいろとヒントをもらえると思います。)
最後の方にごちゃごちゃ書いたことはまた実際のプログラムを例示しながらいろいろと書けたらと思います。
ありがとうございました。