見出し画像

C++(タロット占い)

おはようございます。JavaもPythonも裏ではC++が動いているらしい
JavaとC++の違いについて勉強していきます。

各プログラミング言語

画像1

画像25

画像24

画像25

JAVA

・ほとんどのOSで動かすことができる汎用プログラミング言語。
・大企業の業務システムや基幹システム、金融機関の会計システムなど
 のWEBアプリ開発にも使われている。
・大手ネットショップや銀行のシステム。
・アクセスが集中する大規模WEBサービスにも適している。

C++

・C言語から派生した汎用プログラミング言語。
・C言語の機能や特徴を継承しながら、オブジェクト指向プログラミング
 手続き型プログラミング、データ抽象、ジェネリックプログラミング
 などのプログラミングパラダイムを複数組み合わせられています。
・コンパイル型言語です。
・「ポインター」と「オブジェクト指向」が特徴。
・処理速度が速い。

Microsoft Visual Studioで作ってみよう

・新しいプロジェクトの作成

新しいプロジェクトの作成する
C++ Windows コンソール

画像2

#include <iostream>
int main()
{
 std::cout << "Hello world" << std::endl;
}
Hello world
using namespace std; 
これはJavaでいうところのpackageと同じ、名前空間。

画像3

C++ではC言語の書き方しても認識してくれる。
➤ローカルWindowsデバッガーで実行する

画像4

cout << "Hello C++ World!" << endl;
「cout」は出力(ストリーム出力演算子)
「endl」は改行
#include <iostream>
using namespace std;

int main()
{
	cout << "Hello C++ World!" << endl;
	cout << 5 << "という数字出力" << endl;

	printf("Hello C World\n");
}

画像7

cont << ① << ② << endl;
①を出力して②を出力して改行。(前から順番に出力する。)

#include 
using namespace std; //namespace名前空間(javaでいうpackageと同じ)
int main()
{
	//コンソールに文字を出力
	//※<<演算子(通常は美っとシフト演算子)がオーバーロードされている
	//ストリーム出力演算子
	//前から順に演算(評価)し結果を出す
	cout << "Hello C++ World!" << endl;
	cout << 5 << "という数字出力" << endl;

	//C言語では↓の記述
	printf("Hello C World\n");
	//printf("%s 文字列を入れる", 5);//やばい
}

画像7

cout << 5 << "という数字出力\n" << endl;
          👇(std::をつける)
std::cout << 5 << "という数字出力\n" << std::endl;
#include <iostream>
int main()
{
 std::cout << "Hello world" << std::endl;
}
Hello world

「std::」をつけると仮想空間になる為、「using namespace std;」がなくてもいける。

画像15

#include <iostream>
using namespace std; //namespace名前空間(javaでいうpackageと同じ)
int main()
{
	//コンソールに文字を出力
	//※<<演算子(通常は美っとシフト演算子)がオーバーロードされている
	//ストリーム出力演算子
	//前から順に演算(評価)し結果を出す
	cout << "Hello C++ World!" << endl;
	std::cout << 5 << "という数字出力" << std::endl;

	//C言語では↓の記述
	printf("Hello C World\n");
	//printf("%s 文字列を入れる", 5);//やばい
}

画像10

同じ結果になる

画像15

#include <iostream>
using namespace std; //namespace名前空間(javaでいうpackageと同じ)

int main()
{
	//コンソールに文字を出力
	//※<<演算子(通常は美っとシフト演算子)がオーバーロードされている
	//ストリーム出力演算子
	//前から順に演算(評価)し結果を出す
	
	cout << "Hello C++ World! << endl;
	std::cout << 5 << "という数字出力" << std::endl;

	//C言語では↓の記述
	printf("Hello C World\n");
	//printf("%s 文字列を入れる", 5);//やばい
}

画像10

画像11

オーバーロードされているか検索できる

画像15

#include <iostream>
using namespace std; //namespace名前空間(javaでいうpackageと同じ)

int main()
{
	//コンソールに文字を出力
	//※<<演算子(通常は美っとシフト演算子)がオーバーロードされている
	//ストリーム出力演算子
	//前から順に演算(評価)し結果を出す
	cout << "Hello C++ World!" << endl;
	std::cout << 5 << "という数字出力" << std::endl;

	int i = 0;
	int j = 0;
	string text;
	//コンソールからデータを入力
	cin >> i >> text >> j;
	//取得した情報を表示
	cout << "1回目は" << i << "2回目は" << j << endl;
}

・ヘッダーファイルを作る

ヘッダーファイルはクラスの宣言・定義をするところ

画像11

右クリックで「追加」「新しい項目」
「VisualC++」「ヘッダーファイル」「名前をclass1.hにする」「開く」

画像14

画像10

「class1.h」ができている。

画像13

画像17

#pragma once
class Point{

private:
	int x;
	int y;

public:
	int getX() const;
	int getY() const;
	void setX(int x);
	void setY(int y);
};
Pointクラスを作る。メソッドは基本的にはpublic、メンバ変数は基本的にはprivateとする場合が多いらしい。
private:(ここからはプライベートと言う意味)
プライベートでx、yの変数を定義する。
public:(ここからはパブリックだよという意味)
パブリックで、getX()getY()を定数として、setX(),setY()も作る。

画像15

#include <iostream>
//class1.hを組み込む
#include "class1.h"
using namespace std; 

int Point::getX() const {
	return x;
}
int Point::getY() const {
	return x;
}
void Point::setX(int _x) {
	x = _x;
}
void Point::setY(int _y) {
	y = _y;
}

int main()
{
	cout << "Hello C++ World!" << endl;
	std::cout << 5 << "という数字出力" << std::endl;
	int i = 0;
	int j = 0;
	string text;
	//コンソールからデータを入力
	cin >> i >> text >> j;
	//取得した情報を表示
	cout << "1回目は" << i << "2回目は" << j << endl;
	
//Point型変数を新規作成
	Point* p = new Point();
	p->setX(i);
	p->setY(j);
	cout << "" << p->getX()
		<< "" << p->getY()
		<< endl;
}
まだ完全ではない。借りたものは返さないといけない。
※ 自分で使ったメモリは解放する必要がある。(Javaは自動で開放する)
newしたpを開放する。⬇️
//割り当てられたメモリの開放
	delete p;

画像15

#include <iostream>
#include "class1.h"
using namespace std; 

int Point::getX() const {
	return x;
}
int Point::getY() const {
	return x;
}
void Point::setX(int _x) {
	x = _x;
}
void Point::setY(int _y) {
	y = _y;
}

int main()
{
	cout << "Hello C++ World!" << endl;
	std::cout << 5 << "という数字出力" << std::endl;
	int i = 0;
	int j = 0;
	string text;
	//コンソールからデータを入力
	cin >> i >> text >> j;
	//取得した情報を表示
	cout << "1回目は" << i << "2回目は" << j << endl;
	//Point型変数を新規作成
	Point* p = new Point();
	p->setX(i);
	p->setY(j);
	cout << "" << p->getX()
		<< "" << p->getY()
		<< endl;
	//割り当てられたメモリの開放
	delete p;
}
「class1.h 」ヘッダーには継承の仕方が3種類ある。
private:
public:
:private

画像17

#pragma once
class Point{

//プライベート①
private:
	int x;
	int y;

//パブリック②
public:
	//メンバ変数
	int getX() const;
	int getY() const;
	
	void setX(int x);
	void setY(int y);
};


//派生型の宣言
class Roctangle
	:private Point //プライベート継承③
{
private:
	int w; //幅
	int h; //高
public:
	Roctangle(int x , int y , int w , int h)
		:w(w), h(h) //メンバ変数への初期値の代入
	{
		setX(x);
		setY(y);
	}
	int getLeft() const;
	int getRightt() const;
	int getTop() const;
	int getBottom() const;
};

Pointの方にもポインター変数を設定できる

画像16

#pragma once
class Point{
//プライベート①
private:
	int x;
	int y;
//パブリック②
public:
	Point(int x, int y)
		:x(x), y(y)
	{	
	}

	//メンバ変数
	int getX() const;
	int getY() const;
	
	void setX(int x);
	void setY(int y);
};
//派生型の宣言
class Roctangle
	:private Point //プライベート継承③
{
private:
	int w; //幅
	int h; //高

public:
	Roctangle(int x , int y , int w , int h)
		:Point(x,y),w(w),h(h)
	{
		setX(x);
		setY(y);
	}

	int getLeft() const;
	int getRight() const;
	int getTop() const;
	int getBottom() const;
};

画像15

#include <iostream>
#include "class1.h"

using namespace std; 

int Point::getX() const {
	return x;
}
int Point::getY() const {
	return x;
}
void Point::setX(int _x) {
	x = _x;
}
void Point::setY(int _y) {
	y = _y;
}
int Roctangle::getLeft() const {
	return getX();
}
int Roctangle::getRight() const {
	return getX() + w;
}
int Roctangle::getTop() const {
	return getY();
}
int Roctangle::getBottom() const {
	return getY() + h;
}

int main()
{
	
	cout << "Hello C++ World!" << endl;
	std::cout << 5 << "という数字出力" << std::endl;

	int i = 0;
	int j = 0;
	string text;
	//コンソールからデータを入力
	cin >> i >> text >> j;
	//取得した情報を表示
	cout << "1回目は" << i << "2回目は" << j << endl;

	
	Point* p = new Point(i,j);
	//p->setX(i);
	//p->setY(j);
	cout << " x= " << p->getX()
		<< " y= " << p->getY()
		<< endl;

	//割り当てられたメモリの開放
	delete p;
	
	//Roctangle型変数の新規作成
	Roctangle* r = new Roctangle(10, 25, 100, 10);
	cout << "短形型情報の"
		<< "左:" << r->getLeft()
		<< "右:" << r->getRight()
		<< "上:" << r->getTop()
		<< "下;" << r->getBottom()
		<< endl;

	//割り当てられたメモリの開放
	delete r;
		do {
			Roctangle r2(20, 40, 100, 100);
			cout << "短形型情報の"
				<< "左:" << r2.getLeft()
				<< "右:" << r2.getRight()
				<< "上:" << r2.getTop()
				<< "下;" << r2.getBottom()
				<< endl;		
		} while (true);		
}
newしてなければdeleteはいらない

うまく動作してるのかよくわからないけど。また復習するねー。


いいなと思ったら応援しよう!

SOZ
なにとぞ なにとぞー