[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/28 11:42 / Filesize : 246 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.45【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:09:22 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.44【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1194016813/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

960 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:50:59 ]
今回の場合は、ある特定のうんこの国に着目したから、Kingオブジェクトは1つしか登場しない。

でも、視点を変えて、国がたくさんある場合は話が違ってくる。
うんこの国が複数存在して、首脳会議とかやると、国の数だけ王様にご登場いただかなければならない

まぁ、ここらへんは実際の分析対象の事情による。
プログラムってのは目的があって存在するわけだから、その目的に沿ったように分析しなきゃいけない。

分析の話ついでに、
分析対象は視点によって認識のされ方が変化していくってのを忘れないで。

今回は王様と国民の関係に限定して分析したけど、
王様の家族からすれば、王様は父親だったり夫だったりするわけ。
だから、分析するときには、どういう視点で分析しなきゃいけないのかをまず決めとかなきゃいけない。

今のケースだと、王様と国民の関係って視点で分析したけど、
首脳会議なんか出てきて、国家間の視点に移行したわけだよ。これはこれで、話が違ってくるよね。
「視点が変わった」ってところを強く意識するのを忘れないでね、って話。

961 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:54:28 ]
なるほど、map<int,string,Person>とかにして国を識別するわけではないんですね、ありがとうございました。

962 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:01:49 ]
いや、そのnは要らない。
仮に、float型の変数fに必要だと言うのならfloat f = float(atof(str))でいい。
勿論、float f = atof(str)だけでも構わないし、float f = static_cast<float>(atof(str))としても構わないが。

963 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:21:56 ]
どが3個くらいつく素人ですが・・・。

>>960
うんこ国同士の相互性や関係性をモデル化したプログラムを作るのと、
うんこ国内でのうんこ内政をモデル化したプログラムを作る場合とで、
うんこ国王に実装させるべきメソッドが変わってくるということでしょうか。

964 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:23:26 ]
そもそも国王は必要なんでしょうか…。
とか思い出すと一行も書けなくなる。

965 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:25:05 ]
うんこをさせる、働かせる、給料をやる、とかPersonクラスにある関数と同じ数だけKingクラスのメンバ関数が増えていくんじゃないの

966 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:26:10 ]
国王が必要ない程度ならクラスを使わなくても良さそうな・・・?

俺は>>965と同じ解釈してた

967 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:28:03 ]
taro.Insert(hanako);
上のコードでメモリリークしている様なのですが‥‥

968 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:36:20 ]
サイズが合わないんじゃないの?



969 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:37:58 ]
taroにガベージコレクタを被せてください。

970 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:39:49 ]
>>967
下剤使いすぎたんじゃないの?

971 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:34:56 ]
>>963
まったくもって、そのとおり
もしかすると、いくつか似たようなメソッドが出てくるのかもしれないけど、視点は違ってくる。

世の中に万能なプログラムなど存在しなくて、
目的に合わせて作っていかなきゃいけないという現実が何よりの証拠。

>>964
目的がうんこするだけなら、国王なんていらんのです
ここでは、オブジェクト間の関係を示すため、
うんこの国をふと思いついたので、そういう設定にしただけです

仮にあなた自身の「うんこをするという行為」について分析した場合、
トイレやトイレットペーパー、あなたといったオブジェクトが関係として表れて来るのです。
水を流す、尻をふく、うんこする、というように

はい、うんこは素晴らしいのです

>>965
そんなことはないです
基本的に、それぞれが持っている動作は異なる

例えば、国王が国会での審議を下すという動作を持っているとしても、国民は持たない。
これはそれぞれの「役割」が異なるから。

国王が国民に直接給料をやる、ってことはしないので、
雇い主というクラスに、国民に給料あげるという責務を負わせる。
ここでも、視点が変わったから、これまでのクラスは考え直さなきゃいけない。雇い主だって国民の一部なわけだし。

972 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:37:34 ]
使わない引数の警告を除く

gcc #pragma unused

VC7 or 8 で
unusedインライン関数にあたる関数(可変長引数でOK)を探してます

973 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:48:42 ]
#pragma warning(disable:警告番号)
ではダメ?

974 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:51:07 ]
後戻りを防ぐためにも、設計は上流からね。アジャイルっぽくガシガシ作るのはそれを覚えてからでも遅くない。

975 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 01:55:47 ]
>>971
つまり、クラスを作るとなると必ずどこかで1:nが成立するということでしょうか?
今回の場合複数用意されるであろうPersonクラスがあり、それを管理・操作するKingクラスがある、というような


976 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 09:46:29 ]
ダウンキャストってもの凄い勢いで嫌われてるけどダウンキャスト無しで何とかなる物?

基底クラスのインターフェイス設計が悪いと言われればそれまでだが
派生したオブジェクトを基底クラスのポインタで受けないといけないときとかキャストしないといけないシーンが多すぐるorz

977 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 09:58:07 ]
dynamic_cast使ってキャスト失敗時の処理きちんとやっておけば問題ないんじゃね?

978 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 10:07:54 ]
>>277
Effective C++なんか読んでみるとダウンキャストするよりは
派生クラスのポインタで示すか、
それが出来なければ基底クラスにデフォルトでは何もしない仮想関数を追加しろっていってるけど

機能を追加するたびそんなことやってたらインターフェイス部分が肥大化して
高い位置にあるクラスに対するインターフェイスとしては使いにくくなるわけで・・・

やはり設計は計画的にということなのかorz



979 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 10:13:33 ]
ヘルパ関数にすればいい

980 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 10:26:22 ]
ヘルパ関数とはなんでしょうか?
ぐぐってみたけどいまいち納得のいく説明がないです・・・

981 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 12:47:14 ]
>>868
亀杉だがあらかじめ引数が変化することが分かってるなら動的引数なんて方法もあるな

982 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:31:36 ]
取得したデータをfile.txtというテキストファイルを自動生成してそこに出力したくて

//取得データのfile.txtファイルの自動生成
FILE *fp;
fp = fopen("file.txt","w");

と書きました。
コンパイルしたら

error C2065: 'fp' : 定義されていない識別子です。

と表示されました。fpというのはどのような宣言をすればいいのでしょうか。
環境はWindows XP Pro SP2、メモリ2G、VC++2005(Express)です。
アドバイスお願いします。

983 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:39:16 ]
>>982
そのコードを見る限りでは、それで問題なさそうだよ。

・#include <stdio.h> があるか
・C++ではなくCなら変数宣言はブロックの先頭じゃなきゃいけない
・直前のコメントを消してみる
などをチェキ


984 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 14:57:35 ]
>>983
#include<stdio.h>がありませんでした。
追加してみたけど変わりませんでした。

Cとかかれていたサンプルプログラムをいじっているのですが拡張子が*.cppなのでC++なのでしょうか。
int main(){
直後に
FILE *fp;
を置いたらエラーが消えました!
ありがとうございました!

もうひとつ質問で申し訳ないのですが
*.cはC言語でしょうけど*.cppというのはCでもC++でもあるのでしょうか。
判別方法というのはあるのでしょうか。


985 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:11:53 ]
>>984
大概のコンパイラは*.cをC、.cppをC++と見なしてコンパイルする。
C99以外のCなら大抵の場合C++としても通るから、普通は.cppで問題ない。
(ただしDLLのソースとかでエクスポート関数がある場合は注意)

986 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:12:00 ]
>>984
一般的なコンパイラならファイル名が*.cppならC++とみなして
コンパイルすると思うけど、
それをCとしてコンパイルする手段はあるだろうし、
あなたがどうやってコンパイルしているかわからないので、
何とも言えず。

気になるようだったら、main()の最初に
#ifdef __cplusplus
printf("C++なの\n");
#else
printf("Cなの\n");
#endif
とでも入れてどっちが表示されるか試してみるといいかもね。


987 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 15:14:04 ]
>>985-986
なるほど〜。
ありがとうございます。

コンパイルの方法は
VC++のソリューションエクスプローラーのソースファイルを右クリックする
といった方法でやっています。


988 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:07:49 ]
へぇ、VC++では右クリックでコンパイルされるのか。珍しいI/Fだな。



989 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 16:18:43 ]
コンテキストメニューからソースファイル単位のコンパイルってことだろ

990 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 17:31:22 ]
template<bool>
struct CompileTimeChecker
{
CompileTimeChecker(...);
};
template<> struct CompileTimeChecker<false> {};

#define STATIC_CHECK(expr, msg)\
 {\
  class ERROR_##msg {}; \
  (void)sizeof(CompileTimeChecker<(expr) != 0>(ERROR_##msg()));\
 }

int main()
{

 STATIC_CHECK(true, HOGEHOGE)

}

Modern C++のCompileTimeCheckerというコンパイル時にエラーチェック
をするマクロなのですが、コンパイルが通るはずの条件で呼び出して
も、VC++ 2008では以下のエラーが出てコンパイルできません。

関数型へのキャストが正しくありません。
'CompileTimeChecker<__formal> (main::ERROR_HOGEHOGE (__cdecl *)(void))':
sizeof オペランドが正しくありません。

g++ v4でも
関数へのsizeof?が不正だといわれます。何か間違ってるところはありますか?
本のソースそのままなのですが。

991 名前:990 mailto:sage [2007/12/27(木) 17:39:24 ]
ちなみにBCCでは通りました。

992 名前:990 mailto:sage [2007/12/27(木) 18:00:30 ]
どうやらsizeofに一時オブジェクトを渡すのは不正みたいですね。
以下でうまくいくようです。著者はどうやってコンパイルできたか
疑問です。コンパイラの違いでしょうか?ソースも間違っている
みたいです。

template<bool>
struct CompileTimeChecker
{
 CompileTimeChecker(...){} //定義が必要だった
};

#define STATIC_CHECK(expr, msg) \
{\
 class ERROR_##msg {};\
 CompileTimeChecker<(expr) != 0> c = CompileTimeChecker<(expr) != 0>((ERROR_##msg())); \
 (void)sizeof(c); \
}

993 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 18:10:10 ]
>>992
BCCしか使ってないんじゃね?

994 名前:990 mailto:sage [2007/12/27(木) 18:16:35 ]
>>993
いくつかのコンパイラで試したと書いてありましたが
それらでは問題なかったんでしょうね。
もはや (void)sizeof(c); \ の行は不要ですね。
どうやらエラーが出ていたのは一時オブジェクトではなく
sizeof(Widget())という形が関数に対してsizeofが行われて
いると判断されてたみたいです。これはもちろん不正ですが。

995 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:27:19 ]
995

996 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:33:48 ]
pc11.2ch.net/test/read.cgi/tech/1198755167/
はい新スレ
>>1の名前は気にしないでくれ。間違えた。

997 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:36:50 ]
擦れた手乙埋め

998 名前:998 mailto:sage [2007/12/27(木) 20:41:39 ]
99−



999 名前:999 mailto:sage [2007/12/27(木) 20:42:00 ]
999666999666

1000!

1000 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:42:22 ]
1000は俺が取るよ。

1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<246KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef