MIS.W 公式ブログ

早稲田大学公認、情報系創作サークル「早稲田大学経営情報学会」(MIS.W)の公式ブログです!

かんたんなC++のかきかた【カウントダウンカレンダー2016冬3日目】

C++できません、51代のぶれです。 今回はふわーっとしたC++の説明をしたいと思います。Cを少しやったことがある人向けであり、正確な表現や情報でない可能性が高く、また全くプログラミングをしたことがない!という人だと少しきついかもしれません。

C++とは?

C++とは、Cから派生した言語で、今でも機能拡張が盛んな言語です。実行速度が速く、また、標準でたくさんのライブラリが提供されているため、Cに比べて比較的楽にコードを書くことができます。前述の便利なライブラリがあるため、プログラミング初心者には、個人的にはC言語よりC++の方がわかりやすいと思います。みなさん、怖がらずにC++を始めましょう。C++は簡単ですよ! 最初は

今日から君もC++er

main.c

include<stdio.h>

int main(void){ printf("hello world!\n"); return 0; }

ここにCのハローワールドがあります。実行するとhello world!と出てくるおなじみのアレです。 これをC++にしてみましょう。 まず、ファイルの拡張子をC++にしてみましょう。

main.c -> main.cpp

これでコンパイラはこのコードをC++と認識してコンパイルします。ちなみにちゃんとコンパイルできます。 C++はCの上位互換のようなものなのでCのコードはきちんとコンパイルできます。 次に、includeするファイルを変えてみましょう。

#include<stdio.h> -> #include<iostream>

これでC++の機能がいくつか使えるようになりました。printfなどCのものも使えます。 次に、main関数のvoidを消してしまいましょう。

int main(void){ -> int main(){

最近のCでは既にvoidを書かなくても良いようですが、C++でもこれは問題ありません。消してしまいましょう。 最後にprintf関数をC++のものにしてしまいましょう。

printf("hello world!\n"); -> std::cout<<"hello world!"<<std::endl;

ん?ここまではほとんど同じだったのに大きく変わりましたね。簡単に意味を説明すると、std::coutというものに"hello world"という文字を挿入しています。std::endlは改行の意味です。そしてプログラムはstd::coutの中身を表示しています。Cのprintfでは%dやら%cやらよくわからないものを書いていたと思いますが、C++ではとてもシンプルです。 ここで出来上がったコードを見てみましょう。

main.cpp

include<iostream>

int main(){ std::cout<<"hello world!"; return 0; }

美しいですね。これがC++の第一歩となります。

文字列の処理

C言語で文字列の処理をしようとしたとき、ポインタ、配列などの摩訶不思議な言葉が出てきて戸惑った人も 多いでしょう。

char c1[256]="mis.w";//char型の配列に初期化列を代入 char *c2="mis.w";//char型のポインタの指示するメモリに代入

意味わからないですね。なんなんですか[]とか*とかって。C++ではそんなものを考える必要はありません。 すべてC++が勝手にやってくれています。

#include<string> std::string str="mis.w"; //[]も*もいらない str+="advent"; //足し算もへっちゃら std::string str2=str+"calendar"; //新しい変数も簡単に作れる std::cout<<str2<<std::endl; //mis.wadvencalendar

std::stringという型を使うために<string>をincludeしてください。あとは見てのとおりです。簡単ですね。

入出力

C言語ではprintf, scanfというよくわからない代物がありました。%dやら%cやら、ここでもなにやらよくわからないものが出てきましたね。

int i=10;//変数iに10を代入 char *c="abc"; scanf("%d",&i); //%dで入力された整数を受け取り、iのアドレスに渡す scanf("%s",c); //%sで入力された文字列を受け取り、cのポインタに渡す printf("%d%s",i,c); //%dで整数iを受け取り、%sで文字列cを受け取り、出力する

何言ってるかわかりますか?僕はよくわからないのでてきとーにコメントを書いています。たぶんこんな感じじゃないですかね。 一方C++では簡単です。

int i; std::string str; std::cin>>i>>str; //iとstrに入力した整数や文字列を渡す std::cout<<i<<str; //iとstrを出力する

とてもわかりやすいですね。>>で入力,<<で出力、ただそれだけです。std::cinとは名前の通りstd::coutの入力を受け付ける版です。

おわりに

ここではかるくC++の初歩、文字列の処理と入出力について説明しました。if文やfor文など、Cで書けるものはすべて書けるので、Cがわかる人なら簡単なプログラムが既に書けるようになっています。 Cで頻出するポインタを無視していったのでC++ではポインタがないのでは?と思うかもしれませんが、ちゃんとあります。しかし、今は考える必要がありません。 そんな面倒なものはどうしても必要になるまで無視しておけばいいのです。 面倒なものや低級で理解しにくいもの、C++では一切知らなくてもコードは十分に書けるのです。 なお、今回のコードはすべて1度もコンパイルしてないので間違えていたらごめんなさい。