すっきりわかるjava入門でc言語入門

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
geidou
記事: 10
登録日時: 3年前

すっきりわかるjava入門でc言語入門

#1

投稿記事 by geidou » 3年前

以前、C言語に入門して挫折したのです、話題になっていた書籍『すっきりわかるjava入門』を試しに読んで、コードの書き方がとてもわかりやすく
クラスでやりたいことを書く、メインでこのクラスのこの関数を実行する。この時はこのクラスのこの関数、あの時はこのクラスのこの関数といった具合にまるでYES/NOチャートのように
書くことができるので、プログラミングの楽しさを取り戻しました。

カプセル化・承継・多態性などを学ぶ前に
これをC++に置き換えて学習すればわかりやすくC++をマスターできるのではないかと学習にとりかかりましたが
これはC言語ではできるのかできないのかがわからず学習がストップしてしまいました。

問題はhas-a関係の箇所で

Hero.h

コード:

#include "main.h"

class Hero{
public:
	static int money;
	Hero();
	Hero(string name);
	string name;
	int hp;
	Sword sword;
	int sleep();
	void sit(int sec);
	void slip();
	void rum();

};

Hero.ccp

コード:

#include "Hero.h"

Hero::Hero(){
	
}

Hero::Hero(string name){
	Hero::hp = 50;
	Hero::name =  name;
	cout << Hero::name << "名前入力完了!コンストラクタが呼び出されました" << endl;

}

 int Hero::sleep(){
	
	 cout << Hero::name << "は、眠って回復した" << endl;
	 return 0;

}

 void Hero::sit(int sec){
	 Hero::hp += sec;
	 cout << Hero::name << "は" << sec << "秒座った" << endl;
	 cout << "HPが" << sec << "ポイント回復した。現在HP=" << hp << endl;

 }

 void Hero::slip(){
	 Hero::hp -= 5;
	 cout << Hero::name << "は転んだ" << endl;
	 cout << "5のダメージ" << endl;
 }

 void Hero::rum(){
	 cout << Hero::name << "は逃げ出した" << endl;
	 cout << "GAME OVER" << endl;
	 cout << "最終HPは" << Hero::hp << "でした" << endl;
 }

 
Sword.h

コード:

#include "main.h"
#pragma once

class Sword
{
public:
	Sword(string name);
	Sword();
	~Sword();
	string name;
	int damage;
   void Test(Hero x);
	
};
Sword.cpp

コード:

#include "Sword.h"


Sword::Sword(string name)
{
	damage = 0;
	
	cout << name << "の剣を手に入れた" << endl;
}


Sword::~Sword()
{
}

void Sword::Test(Hero x){

	x.hp += 10;//ここもほかのクラスの変数を引数に渡すとエラーに・・・

main.h

コード:

#include <iostream>
#include <string>
#include <random>
#include <time.h>
using namespace std;
main.ccp

コード:

#include "main.h"
#include "Hero.h"
#include "Matango.h"
#include "Cleric.h"
#include "Sword.h"
#include "Wizard.h"

int Hero::money = 0;

void main(){
	cout << "こんにちは" << endl;
	srand((unsigned int)time(NULL));
	int T = rand() % 2;
	cout << T << endl;

	cout << "所持金" << Hero::money << endl;

	Hero *r = new Hero();
	Hero x("たかはし");
	Hero* h = new Hero("うんこまん");
	Cleric c("パウエル");
	Sword *s = new Sword("ほのお");
	Wizard *w;
	//x.sword = s; 問題の箇所

   Matango m1;
	m1.hp = 50;
	m1.suffix = 'A';

	Matango m2;
	m2.hp = 48;
	m2.suffix = 'B';

	c.selfAid();
	c.pray(T);
	h->sleep();
	h->sit(5);
	m1.run();
	m2.run();
	h->sit(T);
	h->rum();
	x.rum();

	x.Hero::money +=500;
	cout << "所持金" << Hero::money << endl;
	h->Hero::money += 10;
	cout << "所持金" << Hero::money << endl;

	delete s, r;

}
上記のmain.cppのコードのコメントアウトした部分がエラーになってしまいます。
ほかにもHeroのクラスないでSwordをインスタンス化してもエラーになってしまいます。
Swordのクラス内でHeroのクラスの変数を引数にしたり、変更したりなどはできないのでしょうか?

よろしくお願いいたします。

アバター
へにっくす
記事: 630
登録日時: 8年前
住所: 東京都

Re: すっきりわかるjava入門でc言語入門

#2

投稿記事 by へにっくす » 3年前

* をつけるつけないの違いをちゃんと理解しましょう。
コメントしてるところは、
Sword s; // 型はSword
Sword *p = new Sword("ほのお"); // 型はSword*
s = p; // 型が違うので当然NG
としてるのと同じです。
Sword *s;にすれば、
s = p; // OK
になります。

あといろいろツッコミたいところが・・・
geidou さんが書きました:Swordのクラス内でHeroのクラスの変数を引数にしたり、変更したりなどはできないのでしょうか?
上記に対してはもちろん「できます」
あなたがやり方を知らないだけです。
written by へにっくす

Math

Re: すっきりわかるjava入門でc言語入門

#3

投稿記事 by Math » 3年前

後プロジェクトファイル(.vcxproj) を送っていただけるとコマンドライン・コンパイルが出来るので有難いですね。

アバター
みけCAT
記事: 6274
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: すっきりわかるjava入門でc言語入門

#4

投稿記事 by みけCAT » 3年前

geidou さんが書きました: カプセル化・承継・多態性などを学ぶ前に
これをC++に置き換えて学習すればわかりやすくC++をマスターできるのではないかと学習にとりかかりましたが
これはC言語ではできるのかできないのかがわからず学習がストップしてしまいました。
C言語を学びたいのかC++を学びたいのかはっきりしていただけますか?
geidou さんが書きました: 上記のmain.cppのコードのコメントアウトした部分がエラーになってしまいます。
提示された部分にコメントアウトされたコードは見当たりません。
main.ccpはありますが、main.cppは見当たりません。(コメントアウトは見つかりました)
どこのことでしょうか?
geidou さんが書きました: main.ccp

コード:

void main(){
グローバルな場所で戻り値の型がintでないmain関数を定義するのは、C++の(標準)規格に違反しているので、やらないべきでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6274
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: すっきりわかるjava入門でc言語入門

#5

投稿記事 by みけCAT » 3年前

geidou さんが書きました:ほかにもHeroのクラスないでSwordをインスタンス化してもエラーになってしまいます。
Swordの定義がHeroのクラスを定義しようとしている場所から見えない状態でインスタンス化しようとしているからでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Math

Re: すっきりわかるjava入門でc言語入門

#6

投稿記事 by Math » 3年前

>カプセル化・承継・多態性などを学ぶ前に
>これをC++に置き換えて学習すればわかりやすくC++をマスターできるのではないかと学習にとりかかりましたが
>これはC言語ではできるのかできないのかがわからず学習がストップしてしまいました
これは”順番”が逆ですよ。”カプセル化・承継・多態性などを学ぶ”のに適した言語が”Java"ですよ。C/C++は”なんでもござれ”の言語で”360度対応..機械の制御からゲームそして科学・工学技術等あらゆるデザインパターンに対応可能なので道に迷って挫折するでしょう。いまはJavaを手中にする時です。竹藪の中の雀より一羽の手の中の雀の方が価値があります。Javaで正しいデザインパターンを学ぶべきで2大言語といわれるJava,C#の1つをマスターすべきです。C++はつかみどころのないものなので”必要がある”とき調べればわかるでしょう。

geidou
記事: 10
登録日時: 3年前

Re: すっきりわかるjava入門でc言語入門

#7

投稿記事 by geidou » 3年前

たくさんの返信をありがとうございます。
返信が遅くなり申し訳ありません。

へにっくす様・ みけCAT様
時間が無くソースコードのみったくない所までそのまま載せてしまいました…
また、質問文までめちゃくちゃですみません。


Math様
ヘッダーを書いてコードを書いてあっち見てこっち見てのわずらわしさを感じておりました。
また、インクルード関係も頭がごっちゃになりそうです。
目的がゲーム制作なのでjavaだとjar形式が好きでないとの理由だけでc++に手を出してみました。
C#だとexeファイルにできるし、javaで習うことをそのまま使えそうなC#でまずやってみようかなと思い始めました。

難しいわかりずらいという理由からC++をまた中途半端に離れてしまうのか
完成を目的としてわかりやすいC#にとりかかるべきか悩み始めてしまいました。。。

Math

Re: すっきりわかるjava入門でc言語入門

#8

投稿記事 by Math » 3年前

それなら迷わず”C#"にすべきです。C# の”#”はC++++ の意味で C++ の欠点である”ヘッダー”をなくし 基本メモリー管理をなくした言語で最先端(javaよりはるか先、C++も後を追いかけてる)の言語です。
C++からC#へ変えるるとずっと楽になるし後々C++をみると”遅れてる”と思うようになりますよ。 

Math

Re: すっきりわかるjava入門でc言語入門

#9

投稿記事 by Math » 3年前

C#とC++は似てる。(C#はC++を洗練したもの。詳しくは当時人気のあった”Delphi"の開初者がMicrosofに移って開発した。
https://ja.wikipedia.org/wiki/%E3%82%A2 ... C%E3%82%B0
TurboPascal,TurboCの後継だから使い易いよね。

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

Re: すっきりわかるjava入門でc言語入門

#10

投稿記事 by tk-xleader » 3年前

jar形式のファイルが気に入らないということですが、exewrapという、jar形式→exe形式の変換を行うツールを使えば、exe形式のJava製アプリを作成することができます。
C#を改めて勉強するということであれば関係のない話ではありますが…

Math

Re: すっきりわかるjava入門でc言語入門

#11

投稿記事 by Math » 3年前

C#とjavaを比較すればC#にきまりでしょう!
javaは遥かにC#に追い抜かれようやくjavaFXでNet4のレベルになったところです。

javaのメリットはPCではあまりありません。

geidou
記事: 10
登録日時: 3年前

Re: すっきりわかるjava入門でc言語入門

#12

投稿記事 by geidou » 3年前

あれからC#の勉強を進めてみました。
『すっきりわかるjava入門』を使って学習を進めて
ついにポリモーフィズムを使う意味がわかりました。

C++の学習を始めた時は『やさしいc++』を使っていたのですが、学習をいくら進めても
だから、なぜこの機能でこんな事をするの?これをどの場面でどう使うの?って次から次と出てくる新しい単語に疑問ばかりが先行して頭には入ってこなかったです。

しかし、現在は英語で例えると英単語を覚えただけ。
英会話ができるようになるには適切な英単語の使い方を知らなけれならないといけないということで
これからはたくさんコードを書いて会話ができるように頑張ります。
ありがとうございました。

Math

Re: すっきりわかるjava入門でc言語入門

#13

投稿記事 by Math » 3年前

>ついにポリモーフィズムを使う意味がわかりました。
ポリモーフィズムが分かればC++は軽くこなせるでしょう。後は枝葉末節です。
所で”解決”にはならないのでしょうか...?

geidou
記事: 10
登録日時: 3年前

Re: すっきりわかるjava入門でc言語入門

#14

投稿記事 by geidou » 3年前

解決ボタンがあるのですね。失礼いたしました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る