KAEDE Hack blog

JavaScript 中心に ライブラリなどの使い方を解説する技術ブログ。

JS の知識を前提として C++ を学習する - cin, cout, 関数化

参考

柴田望洋

https://www.amazon.co.jp/dp/B0787YH4L2/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

ヘッダ

node.js の import みたいな感じで

include を使う

std と count

using namespace std;

これで std の使用を明示すると

cout をそのまま 使えるようになるらしい。

これがないと std::cout って使うときに std を明示しないといけないらしい。

cout は「標準入力ストリーム」って言うらしい。

数を数えるカウントとは全く別らしい。C OUT !!!! アウト!!!!

これに挿入記号の << を使うことで console.log() ができる

実際に動かすと

#include <iostream>
using namespace std;
int main() {
  cout << "Hello cpp \n";
}

コードがこれで

[Done] exited with code=0 in 0.437 seconds

[Running] cd "/Users/kaede/code/cpp/" && g++ main.cpp -o main && "/Users/kaede/code/cpp/"main
Hello cpp

この結果が出る。

in out stream の ライブラリを import して

std の namespace を明示して

最初に実行される main 関数で、console.log にあたる C OUT に 文字列を打ち込む!!

js との違いとして、' のシングルクォートで文字列をくくるのはダメで、;セミコロンがないと即エラーが出る。

アラート

  cout << "\aHey Guys! We have a gift for you!\n";

VScode だからか警告音が出ない...

文字列の連結

  cout << 
    "ABC"
    "PPP" 
    "XYZ" 
  ;

ABCPPPXY

空白や改行を挟んで文字列を複数入れても、連結されて表示される

文字列 数値 文字列の出力

JS だと

`text ${number} text`

だが

cpp は

  cout << "18 + 63 = "  << 18 + 63 << "some text";

18 + 63 = 81some text

となる。異なる型のをつなげるときは、inserter の << で区切る必要があるらしい

変数と計算複数出力

cpp は型を明示しないといけないので

main の中で宣言して使う

int main() {
  int x = 2;
  int y = 3;
  cout << "x: " << x;
  cout << "\n x + y: " << x + y;
  cout << "\n (x + y) / 2 : " << (x + y) / 2 ;
}
x: 2
x + y: 5
(x + y) / 2 : 2

x と y と 合計と 平均 を出力する

console.log や println と違って改行記号を文末か次の文頭に表示しないといけない。

キーボードからの入力受け付け

C in

さっきの C out の逆。

f:id:kei_s_lifehack:20210311164848p:plain

Code Runner の OUTPUT の場所では打てないが、設定で解決できるようだ

f:id:kei_s_lifehack:20210311170113p:plain

設定で runInTerminal って検索してチェックしたら Terminal で実行できた

コードはこう

  int num = 0;
  cout << "What is your favorite number?\n";
  cin >> num;
  cout << "I will punch you " << num << " times.\n"
What is your favorite number?
5  
I will punch you 5 times.

c out の出力先に

出力先 <- 文字列

で "好きな数字を言え" をターミナルに表示して

入力先 -> 変数

で 変数 number に 入力された数値を突っ込む

出力先 <- 文字列 << 変数の数値

で 文字列と変数の値が出る!!ヨシ!!!

double で小数点まで計算する

main.cpp:4:11: warning: implicit conversion from 'double' to 'int' changes value from 0.25 to 0 [-Wliteral-conversion]
  int x = 0.25; 

int に小数点の入った数値を入れるとエラーが出るので、double を使う

  double x = 1; 
  cout << x/4;

0.25

小数点が出る計算の時は double

コメントアウト

js と同じ単一行

// some code

html と同じ複数行

/*
  double x = 1; 
  cout << x/4;
*/

スラッシュ アスタリスクで初めて

アスタリスク スラッシュで終わらせる。

後から変えられない const

cpp には Math.PI とかがないらしいので 自分で定義する

こう言う後から変わるわけがないものは const で変更できなく定義する。

js ではカジュアルに使っていたが、cpp では デフォルトで使うことにはならないのかな?

ts だと

const App: React.FC = { } 

みたいに const と type を両方使っていた

同じように書く。

const double PI = 3.1416

関数化する

js では とにかく脳死で const に入れていればヨシ!!だった。

入れたい。とにかく入れたい。変数は無理だから関数でもいい。処理を入れたい。

そしてその名前だけで C out に渡したい。

int main() {
  double radius;
  const double PI = 3.1416;
  cout << "Input Radius:";
  cin >> radius;

  cout << 2 * PI * r;
}

これの計算を cout に直接渡しているのを関数化した。

int getCircumference(double radius) {
  const double PI = 3.1416;
  return 2 * radius * PI;
}
int main() {
  double radius;
  cout << "Input Radius:";
  cin >> radius;
  cout << getCircumference(radius);
}

getCircumference(radius) を作って それを main で呼び出すことにした。

cpp では 数値計算の関数は int の型にするらしい。

main で type を宣言した上で、関数で 引数として使う際も再度 type を明示して、

変数は関数内部で宣言して使い、return する。

main で PI を宣言しても 関数内部では使えなかった。

関数はなぜか 6章の内容でいくまで遠いので、自分から探しに行ってよかった。

( const の章は 1.4 章 )