スレを勃てるまでもないC/C++の質問はここで 9
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/04/18(土) 11:46:21過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
http://pc12.2ch.net/test/read.cgi/tech/1235921779/
0002デフォルトの名無しさん
2009/04/18(土) 12:03:41∧,,∧ ∧,,∧ ∧,,▲ ∧,,∧
(,,・∀・) ミ,,・∀・ミ (;;・∀・) ミ,,・∀・ミ
〜(_u,uノ @ミ_u,,uミ @(;;;;uuノ 〜ミ_u,,uミ
0003デフォルトの名無しさん
2009/04/18(土) 12:47:01∧,,∧ ∧,,∧ ∧,,▲ ∧,,∧
(,,・∀・) ミ,,・∀・ミ (;;・∀・) ミ,,・∀・ミ
〜(_u,uノ @ミ_u,,uミ @(;;;;uuノ 〜ミ_u,,uミ
0004デフォルトの名無しさん
2009/04/18(土) 13:25:02∧,,∧ ∧,,∧ ∧,,▲ ∧,,∧
(,,・∀・) ミ,,・∀・ミ (;;・∀・) ミ,,・∀・ミ
〜(_u,uノ @ミ_u,,uミ @(;;;;uuノ 〜ミ_u,,uミ
0005デフォルトの名無しさん
2009/04/18(土) 13:43:56∧,,∧ ∧,,∧ ∧,,▲ ∧,,∧
(,,・∀・) ミ,,・∀・ミ (;;・∀・) ミ,,・∀・ミ
〜(_u,uノ @ミ_u,,uミ @(;;;;uuノ 〜ミ_u,,uミ
0006デフォルトの名無しさん
2009/04/18(土) 15:32:080007デフォルトの名無しさん
2009/04/18(土) 15:37:070008デフォルトの名無しさん
2009/04/18(土) 15:50:41ちょっぴり反省してみるorz
どこでもよいかもだけど
前スレの>>998
ソースの最後(どうでもよい)に
rewind(stdin);
getchar();
書くと入力待ちで止まるよ…
てかどうやってコンパイルしたのかな
IDEかな…
0009デフォルトの名無しさん
2009/04/18(土) 16:01:030010デフォルトの名無しさん
2009/04/18(土) 16:04:37getch()が一番使いやすいと思うんだけど。
0011デフォルトの名無しさん
2009/04/18(土) 17:27:15fgetsとsscanfを使う方がいいと思うよ
0012デフォルトの名無しさん
2009/04/18(土) 23:12:14{
int a=0;
while(1){
scanf("%d",&a);
if(a==1||2)
continue;
printf("(tAt)ノ\n");
}
return 0;
}
1または2以外の数を入力したら下の顔文字が出力される。
と思ったらそうはなりません。
何処が間違ってるのでしょうか?
||ってこういう風には使えないのでしょうか?
0013デフォルトの名無しさん
2009/04/18(土) 23:14:320014デフォルトの名無しさん
2009/04/18(土) 23:19:21先日、C言語の勉強を始めた者です。まだまだ参考書の始めの方なのですが、エラーが起きてよくわからないことになってしまいました。
いまだにキーボードから数値を入力させて、それを表示する程度のものの自己流改変なのですが、なぜか二つ目を入力した後にエラーが起きて止まってしまいます。
それと、途中でプログラムの流れを止める方法がわからないので、それも出来れば教えていただけませんでしょうか?
とりあえず理想としては、エンターを押してからもう一度押す迄
変数X + 1の答えを変数Xに代入し続けるようなプログラムが作りたいのです。
一応、ソースを書いておきます。
#include <stdio.h>
int main(void)
{
int PS;
float PS2;
float PS3;
printf("まずは整数を入力してください。");
scanf("%d",PS);
printf("次は、小数を入力してください。");
scanf("%f",PS2);
printf("最後にもう一度、小数を入力してください。");
scanf("%f",PS3);
int end;
printf("では、なにか数字を入力してエンターを押すと、結果が表示されます。");
scanf("%d",end);
0015デフォルトの名無しさん
2009/04/18(土) 23:19:29でけたー
ありがとー(o^_^o)
0016デフォルトの名無しさん
2009/04/18(土) 23:20:47;
printf("そして次は少数一回目は %f ですよね?",PS2);
;
printf("そして最後は、 %f となっておりますよね?",PS3);
;
int red;
printf("最後に、面白いものを見せましょう。適当に数字を入れてエンターを押してください。");
scanf("%d",red);
printf("exeファイルのダブルクリックをしていなければ、適当に入れてもらった数字を足した数を「%d」内に表示しておきます。では、さようなら。",end + red);
return 0;
}
最後のprintf()が終わっても自動的に閉じないようにするには、いったいどうすればいいのでしょう?
初歩の初歩の私ですが、どうかご教授をお願いします。
0017デフォルトの名無しさん
2009/04/18(土) 23:23:420018デフォルトの名無しさん
2009/04/18(土) 23:31:32まず人のソースを見て真似るところから始めれ
そんなソース書く奴今まで見たことないぞ
0019デフォルトの名無しさん
2009/04/18(土) 23:47:57最後の閉じないってのは単純にコマンドライン上でそのプログラムを実行すればいいんじゃね
0020デフォルトの名無しさん
2009/04/18(土) 23:54:17#include <stdio.h>
int main()
{
double d;
printf("浮動小数点数を入力してください。");
scanf("%lf%*c", &d);
printf("入力した値=%f\n", d);
printf("Hit any key\n");
scanf("%*c");
return 0;
}
0021デフォルトの名無しさん
2009/04/19(日) 00:26:34※1.return 0; の前に入力を待つには、char cc; scanf("%c%*c", &cc);
※2.C++でなくてCのはずなのに、実行文の途中で変数を宣言している。
※3.scanfで変数に値を入れるのは、scanf("%d", &変数名);
※4.デバッグ&コンパイルして実行してみると改行が無い。
printf(".....\n", ....);
0022デフォルトの名無しさん
2009/04/19(日) 00:40:50システムがあるとします。
(共有メモリはどれか一つのPC上に存在する)
この場合ネットワーク越しにアクセス可能な共有メモリが
欲しくなってしまったのですが、ググってもズバリなページを
見つけることが出来ませんでした。
どなたかヒントになるような知識をお持ちの方、
お教え願えないでしょうか?
0023デフォルトの名無しさん
2009/04/19(日) 00:47:120024デフォルトの名無しさん
2009/04/19(日) 00:59:58本当に共有メモリをネットワーク透過で使いたい場合、敢て挙げるなら分散共有メモリとか。
そうじゃなけりゃ分散オブジェクトとかでググれば?
0025デフォルトの名無しさん
2009/04/19(日) 01:47:36今C言語のポインタを勉強しているのですが、
p : pの指すアドレスを参照
p+1 : pの指すアドレスを+1
p++, p=p+1 : pにpの指すアドレス+1を代入
*(p++), *p++ : pの指すアドレスの内容を参照後にpの指すアドレスを+1
*(++p), *++p : pの指すアドレスを+1した後にpの指すアドレスの内容を参照
*p : pの指すアドレスの内容を参照
*p+1, (*p)+1 : pの指すアドレスの内容に+1
*(p+1) : pの指すアドレスを+1した内容を参照
(*p)++ : pの指すアドレスの内容を参照後にpの指すアドレスの内容を+1
++(*p) : pの指すアドレスの内容を+1した後にpの指すアドレスの内容を参照
&p : ポインタ変数p自体のアドレス
このような解釈でよいのでしょうか?
自分で色々と試したのですが、認識の確認のため投稿させて頂きました。
誤りや他の記述方法があれば教えてください。
よろしくお願いします。
0026デフォルトの名無しさん
2009/04/19(日) 01:59:183〜4か月かけて、なおかつ3人ぐらいの人数で役割分担して作れるプログラミングってなんでしょうか?
ちなみに、Cプログラムで、習い始めて半年くらい。
Cについて一通り習いました。
考えたんですが、オセロとかは難しすぎますかね?
0027デフォルトの名無しさん
2009/04/19(日) 01:59:38pが charへのポインタなら +1だけど、shortへのポインタなら +2される。
一般的に書くと、sizeof(ポインタが指す先の型)だけ変化する。
0029デフォルトの名無しさん
2009/04/19(日) 02:26:19間違ってるところはない。
0030デフォルトの名無しさん
2009/04/19(日) 02:26:49俺もオセロ作ったけどCPUなしなら1か月もかからなかった
0031デフォルトの名無しさん
2009/04/19(日) 02:27:08コンパイラあるんなら自分でそれぐらい確認出来るだろ
エアコンパイラ状態?
0032デフォルトの名無しさん
2009/04/19(日) 06:02:56きっちり書いてみたんですけど、でも例えば関数内で new に失敗して std::bad_alloc が
発生するようなケースを考えていると、結局は全て throw(std::exception) と書かなきゃ
いけないような気がします。throw の宣言はどう書くのが一般的 (慣例的になるか?) なんでしょうか。
0033デフォルトの名無しさん
2009/04/19(日) 06:21:34だから a と b が NULL 以外の同じメモリブロックを差していても a==b が true になる
保証はないし、当然ポインタ同士の減算結果も保証してない。具体的には DOS のような
16bit マシン上のラージメモリモデルなんかは ++ が sizeof(型) 増える保証なんてない。
0034デフォルトの名無しさん
2009/04/19(日) 06:26:06要素数にしていくつ離れているかを返すことになっている。
0035デフォルトの名無しさん
2009/04/19(日) 06:36:00まぁ ANSI で正確にはどう規定されているかとかまでは知らんけど。
0036デフォルトの名無しさん
2009/04/19(日) 06:42:210037デフォルトの名無しさん
2009/04/19(日) 06:53:00003814,16
2009/04/19(日) 10:48:17丁寧にありがとうございます。書いてないけど知りたかった改行の方法まで書かれてて、本当に助かります。
ところで、「%*c」というのはどういう意味なのでしょうか?
0039デフォルトの名無しさん
2009/04/19(日) 10:49:010040デフォルトの名無しさん
2009/04/19(日) 10:53:30ポインタの使用例:
#include <stdio.h>
void f(int *p) { *p = 3; }
int main(void)
{
int i;
i = 100;
printf("%d\n", i);
f(&i);
printf("%d\n", i);
return 0;
}
0041デフォルトの名無しさん
2009/04/19(日) 10:57:04ttp://ja.wikipedia.org/wiki/Scanf
0042デフォルトの名無しさん
2009/04/19(日) 11:34:030043デフォルトの名無しさん
2009/04/19(日) 11:34:45ありがとうございます。
0044デフォルトの名無しさん
2009/04/19(日) 11:41:37今とあるクラス(Aと過程)を更に別のクラス(Bと過程)で使おうとしてるんだが
Bクラスの中では、Aクラスを可変で使おうと思ってる
そこでAクラス内部にリスト処理を追加しようか、Bクラス内部で追加しようかで悩んでる
具体的には
Aクラスを↓のように追加するか
class AClass
{
private:
AClass *next,*prev;
};
Bクラスで
class BClass
{
private:
typedef struct _tag_hogehoge{
AClass *pA;
struct _tag_hogehoge *next, *prev;
} hogehoge;
};
果たしてどちらがいいだろうか?
オブジェクト指向ならAクラスに追加だけど
高速性を重視にしてるから、Bクラスの方が早いんだよね
みなさんならどうしますか?
0045デフォルトの名無しさん
2009/04/19(日) 11:43:52std::list使う。
0046デフォルトの名無しさん
2009/04/19(日) 11:47:130047デフォルトの名無しさん
2009/04/19(日) 11:54:49レス有難うございます
>>45
std::listですが、これはランダムアクセスが遅い為に考慮しませんでした
ランダムアクセスでも高速で取得出来る様な独自のリスト処理を
AクラスかBクラスのどちらかに追加しようと思っています
>>46
うーん、そうでしょうか?
オブジェクト指向だからこそ、Aクラス自信のインスタンスは
Aクラスで処理するものだと考えております
0048デフォルトの名無しさん
2009/04/19(日) 12:07:31管理するオブジェクトが知っていればいいんじゃないかな?
自分自身に next,prevがひっついてるとリスト構造を強要されるけど、
無ければ配列やハッシュマップなど他の管理方法をとることもできる。
あくまで原則論で、高速化などのために崩すこともあるけど。
0049デフォルトの名無しさん
2009/04/19(日) 12:15:53>ランダムアクセスでも高速で取得
なら、std::vectorを使えば?
0050デフォルトの名無しさん
2009/04/19(日) 12:26:33どうせ役に立たないから書いたとしても throw() 以外書かない、が一般的。
Boost なら Avoid exception-specifications. ってなってる。
ttp://www.boost.org/development/requirements.html#Guidelines
C++ Coding Standards (Herb Sutter他著)でも Avoid exception specifications って節がある。
0051デフォルトの名無しさん
2009/04/19(日) 12:43:47レス有難うございます
>原則としてAは自分自身のことだけ知っているべきで、自分がどう管理されるかは
>管理するオブジェクトが知っていればいいんじゃないかな?
そうですね。有難うございます。
Bクラスの方にすることに決めました
>>49
Aクラスの情報を引き出す際にインデックスは勿論ですが
文字列名や保持してるデータと称号して、該当するデータを引き出すため
std::vectorでも相性が合わないため、考慮しませんでした。
レス下さった方々本当に有難うございました。
0052デフォルトの名無しさん
2009/04/19(日) 13:18:11tmp=getCreateAddress();
tmp->setData();
ってな感じ。自己拡張で便利何だけどな
0053デフォルトの名無しさん
2009/04/19(日) 16:10:10std::bitset<5> hoge;
これで5ビットの長さのビット配列が確保できると思いますが
これを実行時に決めたいのです。
どのようにすればいいのでしょうか?
0054デフォルトの名無しさん
2009/04/19(日) 16:33:54boost ライブラリでダイナミックに使えるやつがあるっぽいよ
ttp://www.kmonos.net/alang/boost/classes/dynamic_bitset.html
0056デフォルトの名無しさん
2009/04/19(日) 23:05:34#include <stdio.h>
void main()
{
int nan;
double d;
printf("整数を入れてください:");
scanf("%d",&nan);
printf("浮動少数点:");
scanf("%d",&d);
printf("%D",nan);
printf("%d",d);
return 0;
}
望むような結果すら得られない。多分入力された整数と浮動小数点数を表示したいんだろうけどな。
0057デフォルトの名無しさん
2009/04/19(日) 23:12:164ヶ所ほど見つけたけどめんどいから指摘しない
赤ペンで画面に書けるなら楽だけどw
0058デフォルトの名無しさん
2009/04/19(日) 23:14:10scanf("%lf",&d);
printf("%d\n",nan);
printf("%f\n",d);
0059デフォルトの名無しさん
2009/04/19(日) 23:15:3320秒ほど実行したところで、ウィンドウの×ボタンとかが変なところに表示され
一見動きが止まってしまいます
しかしALT+F4等ではちゃんと終了できる状態なんですが
これってどういう事なんでしょうか
0060デフォルトの名無しさん
2009/04/19(日) 23:19:26といっても、俺もあまり変わらないくらいのものしか書けないんだけどな。
あと、この友人には英語の勉強が必要な気がする。
「numはnumberの略なんだよ」っていうのを聞いてこの友人が書いたのが「nan」だからな。
ちなみに昨日はritan 0;って書いてたし。
同じような処理のものを書いてみたらどうなるんだろうと自分でも書いてみたけど、最初のコンパイルでいきなりエラーが出て泣きたくなった。
0061デフォルトの名無しさん
2009/04/19(日) 23:39:08ありがとうございます。使いどころについてあれこれ思案してみたんですけど、
「宣言外 (つまり想定外) の例外は全部 abort ルーチンに行けば良い作り」という
限定的な状況で有用なものですよね。
呼び出し上位の try-catch で自前例外も汎用 std::exception も対応している設計だと
throw(何とか) 宣言はあまり意味がなさそうです。
0062デフォルトの名無しさん
2009/04/20(月) 00:52:21あと、いちいちチェックしないといけないのでthrow()以外の例外指定を使うと性能面で不利という話もあったはず。
0063デフォルトの名無しさん
2009/04/20(月) 01:12:03その関数のなかでstd::bad_allocを回収して対処ができるならcatchすればいいし、
メモリアロケートに失敗したらもうお手上げだって言うなら、上位のハンドラに任せればいい。
0064デフォルトの名無しさん
2009/04/20(月) 01:18:13const Telegram& telegram = *PriorityQ.begin();
BaseGameEntity* pReceiver = EntityMgr->GetEntityFromId(telegram.Receiver);
Telegram構造体の参照 telegramに対してtd::set<Telegram> PriorityQのbegin()に
間接参照演算子をつけて代入しています。
ここをconst Telegram&にする理由がわかりません。
const Telegramにしてもコンパイル通るのですが、どういう違いがあるんでしょうか?
0065デフォルトの名無しさん
2009/04/20(月) 11:14:10const Telegramだと代入コピー
const Telegram& telegramの方だと
*PriorityQ.begin()の中身が変わっても、telegramの参照先は中身が変わる
const Telegram telegramの方だと
*PriorityQ.begin()の中身が変わっても、telegramの参照先は代入コピーされた時のまま、つまり中身は変わらない
0066デフォルトの名無しさん
2009/04/20(月) 11:16:53×*PriorityQ.begin()の中身が変わっても、telegramの参照先は代入コピーされた時のまま、つまり中身は変わらない
○*PriorityQ.begin()の中身が変わっても、telegramの中身は代入コピーされた時のままなので、*PriorityQ.begin()が変わっても反映されない
0067デフォルトの名無しさん
2009/04/20(月) 12:08:08リソースリークしててどんどんリソース消費してると
そういう現象になる場合があるよ
0068デフォルトの名無しさん
2009/04/20(月) 15:29:05APIやら.NETやら色々あってよく分かりません
最終的にはDirectXに触れたいのですが全く理解できませんでした
まずなにからやればよいのでしょうか?
0069デフォルトの名無しさん
2009/04/20(月) 15:52:02今はVC++2008を使っています。
0070デフォルトの名無しさん
2009/04/20(月) 15:57:36なるほど!よくわかりました。ありがとうございます。
0071デフォルトの名無しさん
2009/04/20(月) 16:11:29C++Builder2009付属品のCodeGear C++ Compilerを使えば
CodeGuardオプション-vGを付けてコンパイルすればアクセスオーバーラン
を実行時に検出してログを出力してくれる
0072デフォルトの名無しさん
2009/04/20(月) 16:20:38Windows SDKから学ぶといいよ
0073デフォルトの名無しさん
2009/04/20(月) 16:38:45ありがとうございます
0074デフォルトの名無しさん
2009/04/20(月) 16:48:430075デフォルトの名無しさん
2009/04/20(月) 17:09:14戻り値の型とかはすべて左側によっていたほうが読みやすいよな常考
void (*signal(int sig, void (*func)(int)))(int); より
(void *(int)) signal(int sig, void (*func)(int)); みたいな感じのほうがいいよねっ!!
なにか深い理由があって今のようになったのか、なんとなくなのか
仕様策定当時、反対意見はあったのか、なかったのか知りたいです
0076デフォルトの名無しさん
2009/04/20(月) 17:22:29VC++だったら、/GS オプション。
0077デフォルトの名無しさん
2009/04/20(月) 20:40:200078デフォルトの名無しさん
2009/04/20(月) 20:51:43知識ゼロならまずパソコンの電源のON・OFFからだな。
それからマウスの使い方と…(ry
…んでプログラミングをしたくなったら、
どのくらいになりたいかを決めるべき。
1.単なる遊びや趣味(職業プログラマではない)&&実用を求めない
2.単なる遊びや趣味(職業プログラマではない)&&実用を求める。
3.職業ではないが、フリーソフトを公開するなど準プロレベルで相当やり込みたい。
4.職業プログラマになりたい。
5.神級ハッカーになりたい。
0079デフォルトの名無しさん
2009/04/20(月) 20:54:06なるべく高いヤツ買うと、途中で投げ出すのがもったいなくって続くかも。
008077
2009/04/20(月) 20:56:14C言語に慣れる目的で友人と2Dゲー作ろうとしているんだ
今のところは趣味レベル目的でう
008177
2009/04/20(月) 20:57:40書店で少し見たんだがどれを買えばいいのか分からない
008278
2009/04/20(月) 21:09:10無責任にオススメを語るのは
悪い気がするから、他の人にお願いします。
俺はもうC++ばっかなんだよ。。。
0083デフォルトの名無しさん
2009/04/20(月) 21:10:42intのdは何の略か教えて
0084デフォルトの名無しさん
2009/04/20(月) 21:16:200085デフォルトの名無しさん
2009/04/20(月) 21:25:16digitだという説と、あとなんか別のd****だっていう説を聞いた気がする。
でも忘れた。
0086デフォルトの名無しさん
2009/04/20(月) 21:26:23対照的に%iは八進・十六進でも入力できる指定なのだから。
(printf系では%dと%iで違いはないけど)
0087デフォルトの名無しさん
2009/04/20(月) 21:39:29decimalって小数点って意味じゃない?
と思いきや10進数decimal numberのことか。
008877
2009/04/20(月) 21:40:03C言語超入門って技術論社の奴だ
勉強してみるよ
0089デフォルトの名無しさん
2009/04/20(月) 22:07:28のようにstd::vectorでクラスポインタの連結を使用としたんですが
hoge.push_back( new hogehoge( ) );
と書くと、push_back時に勝手に(new hogehoge( ))が更にコピーされる為
new hogehoge( )の分がメモリリークしてしまうんですが
これは大人しく
std::vector<hogehoge> hoge;
と書くべきでしょうか?
↑だと沢山連結しようとすると何か遅い気がするのですが
そうでもないでしょうか?
0090デフォルトの名無しさん
2009/04/20(月) 22:33:01boost::ptr_vector使え
解放すると勝手にデストラクタを呼び出す
0091デフォルトの名無しさん
2009/04/20(月) 22:34:39あとクラスhogehogeのコピーコンストラクタを正しく書け
0092デフォルトの名無しさん
2009/04/20(月) 22:42:50009377
2009/04/20(月) 23:00:31ここの住人はコンパイル作業コマンドプロンプトでやってるのか?
0094デフォルトの名無しさん
2009/04/20(月) 23:10:23環境によってそれぞれだろ。
0095デフォルトの名無しさん
2009/04/20(月) 23:10:54有難うございます
コピーコンストラクタは書いていませんでした
>>>89はメモリリークする原因を勘違いしてたんじゃないか?
std::vectorに渡したクラスのアドレスと
vectorから引き出したクラスアドレスは異なっていましたので
vectorに渡す際のnew hogehoge( );は解放されずリークしていました
0096デフォルトの名無しさん
2009/04/20(月) 23:17:24vectorに渡したポインタが取り出すときに違うってのは、ないと思うんで、
どっかでバグってるんじゃないの?
0097デフォルトの名無しさん
2009/04/20(月) 23:31:27デストラクタが明示的に呼ばれないけどちゃんと消してる?
0098デフォルトの名無しさん
2009/04/21(火) 00:06:060099デフォルトの名無しさん
2009/04/21(火) 00:06:250100デフォルトの名無しさん
2009/04/21(火) 00:07:21メインはIDEでやるにせよ、簡単なクラスの単体テストとかはコマンドでやることが多いかな。
でも人それぞれだな。
0101デフォルトの名無しさん
2009/04/21(火) 00:11:16あ、もちろん代入演算子も書いとけよ
クラス内でnew/deleteする場合はコピーコンストラクタと代入演算子を
ちゃんと書いておかないとメモリリークを引き起こしたり二重deleteなどの
問題を引き起こす
0102100
2009/04/21(火) 00:15:49>push_back時に勝手に(new hogehoge( ))が更にコピーされる為
と
>new hogehoge( )の分がメモリリークしてしまうんですが
ってのが意味的につながらない気がする。
「更にコピー」ってなんだ?
hogehoge* p=new hogehoge( );
でこのまま放置するとメモリリークすることは知ってるよね?
最後にdeleteするんですよ。
>コピーコンストラクタは書いていませんでした
いや、書いてないかどうかというのが問題なわけではないのでは?
書かなくても(コンパイラが自動生成する物で)大丈夫なクラスは大丈夫だし、
だめなものはダメ。
そしてhogehogeクラスが大丈夫なほうかだめな方かはソースを見ている君にしか分からない。
0103デフォルトの名無しさん
2009/04/21(火) 00:19:240104デフォルトの名無しさん
2009/04/21(火) 00:37:12思ったのですが、違うのでしょうか?
#include <stdio.h>
#include <time.h>
#define addMacro(a,b) ((a)+(b))
int addFunc(int a, int b) { return a + b; }
inline int inlineFunc(int a, int b) { return a + b; }
void test1() { for ( int i = 0; i < 10000000; i++ ) addMacro(a,b); }
void test2() { for ( int i = 0; i < 10000000; i++ ) addFunc(a,b); }
void test3() { for ( int i = 0; i < 10000000; i++ ) inlineFunc(a,b); }
int main( int argc, char **argv) {
clock_t s;
s = clock();
test1();
printf("test1:%ld\n", clock() - s);
s = clock();
test2();
printf("test2:%ld\n", clock() - s);
s = clock();
test3();
printf("test3:%ld\n", clock() - s);
return 0;
}
0105デフォルトの名無しさん
2009/04/21(火) 00:38:19printf("d=%.2f\n", d);
0106デフォルトの名無しさん
2009/04/21(火) 00:39:16実際にinlineが適用されているかどうかはデバッガで
コンパイラが吐き出したコードを覗いてみるしか知る方法が無い
0107デフォルトの名無しさん
2009/04/21(火) 00:49:32010877
2009/04/21(火) 01:00:030109デフォルトの名無しさん
2009/04/21(火) 01:14:480110デフォルトの名無しさん
2009/04/21(火) 01:16:52for(int i=0; i<=10; i++) num += (1 << i);
0111デフォルトの名無しさん
2009/04/21(火) 01:20:150112デフォルトの名無しさん
2009/04/21(火) 03:46:450113デフォルトの名無しさん
2009/04/21(火) 04:02:46確保しなきゃだめですか? itoa() とかどうやってるんだろ。
0114デフォルトの名無しさん
2009/04/21(火) 04:16:000115デフォルトの名無しさん
2009/04/21(火) 04:18:30○itoa()
もう寝るぽ…
0116デフォルトの名無しさん
2009/04/21(火) 05:02:07throw しているブロックのスタックが巻き戻されたら無効になりそうなんですけどどういう
仕組みになってるんですか?
try{
foo();
} catch(const my_exception& ex){...}
foo(){
throw my_exception();
}
0117デフォルトの名無しさん
2009/04/21(火) 12:03:04やりとりする値を格納するData構造体をmodel内に所有させて
Data* GetData();
というGetterで渡して覗き見させてたのですが
modelの派生クラスで扱う値が増えた場合
Data構造体も派生させるとview側でダウンキャストが必要になりあまり良くない気がしますし
Data構造体に全ての値を持たせると親クラスでは使わないデータも持たせることになりこれもきれいじゃない気がします
MODELとViewを連携させる良い仕組みは無いでしょうか
また、派生して拡張、という行為自体がis-aに相応しくない気がするのですが
こういう場合はどういうクラス構造にしたらよいでしょうか
0118デフォルトの名無しさん
2009/04/21(火) 12:06:220119デフォルトの名無しさん
2009/04/21(火) 12:26:55派生クラスで追加したい変数は Dataの外にメンバ変数として持たせればいいのでは?
getメソッドも新たに追加した変数ごとに追加する。
0120デフォルトの名無しさん
2009/04/21(火) 13:09:14今度は多態的に利用するときに、拡張部分へアクセスできるインターフェイスをどうするかで悩むんだりする
0121デフォルトの名無しさん
2009/04/21(火) 13:17:38もしそのインスタンスに拡張部分があることを知ってるのならば、子クラスのインスタンスだ
とわかってるはずなんだし。
0122デフォルトの名無しさん
2009/04/21(火) 13:45:35環境による
スレッドローカルで調べてみては
0123デフォルトの名無しさん
2009/04/21(火) 20:58:34ってあった場合、末尾のfって何を表してるんでしょうか?
0124デフォルトの名無しさん
2009/04/21(火) 20:59:51ありがとうございます。やっぱりプラットフォーム固有の方法になりますよね。
0125デフォルトの名無しさん
2009/04/21(火) 21:02:19float型リテラル
0126デフォルトの名無しさん
2009/04/21(火) 21:45:5932.0だとdouble型定数扱い。
ところが32.0fって言う風にfを付けるとfloat型定数扱いにしろっていう意味になる。
0128デフォルトの名無しさん
2009/04/21(火) 22:53:31sprintfとかそんな関数できるだけ使わずにforとかビット演算とか出来るなら再帰関数
を使ってカッコよく書きたい
0129デフォルトの名無しさん
2009/04/21(火) 22:59:110130デフォルトの名無しさん
2009/04/21(火) 23:21:01union
>>129
それじゃポインタだろう
0131デフォルトの名無しさん
2009/04/21(火) 23:21:44クラス1 C++
クラス2 C
クラス3 Java
クラス4 C#
クラス5 PHP
これであってますか?
0132デフォルトの名無しさん
2009/04/21(火) 23:33:28クラス2 C
クラス3 C#
クラス4 Java
クラス5 PHP
0133デフォルトの名無しさん
2009/04/22(水) 00:20:56C メモリー管理が大変、変数が関数の先頭にあるので読みづらい
C++ テンプレートゴリゴリ使われたらデバッグ大変かも
C# つかったことないけどマイクロソフト仕様で苦労するかも GUI向け?
Java ライブラリ覚えるまで苦労しそう、開発環境整えるのに一苦労?
PHP セキュリティー面の心配とHTMLと混じると読みづらいとか?
正直C++以外わからんヽ(´ー`)ノ
0134デフォルトの名無しさん
2009/04/22(水) 01:05:00それは書いている奴がロートルなのか、ロートルに教わった不勉強の所為。
普通は、適宜ブロック内で定義するから関数の先頭に纏まる訳ではない。
それと、C#も.Netの関数を把握するまでは思うように使いこなせないと思う。
尤も、Cだとそう言った便利な関数が殆どないから全部手作りになるけど。
0135デフォルトの名無しさん
2009/04/22(水) 01:21:09どこで定義してるかわかりやすくなっていい
0136デフォルトの名無しさん
2009/04/22(水) 01:23:270137デフォルトの名無しさん
2009/04/22(水) 01:29:380138デフォルトの名無しさん
2009/04/22(水) 01:30:080139デフォルトの名無しさん
2009/04/22(水) 01:57:480140デフォルトの名無しさん
2009/04/22(水) 02:02:210141デフォルトの名無しさん
2009/04/22(水) 02:28:580142デフォルトの名無しさん
2009/04/22(水) 03:18:090143デフォルトの名無しさん
2009/04/22(水) 05:32:51え?
時代に逆行しすぎだろw
0144デフォルトの名無しさん
2009/04/22(水) 07:13:43WORKING-STORAGE SECTION.
0145デフォルトの名無しさん
2009/04/22(水) 09:28:530146デフォルトの名無しさん
2009/04/22(水) 09:35:33char *buffer;
* をどっちよりに付けるか人によって違うけど何か違うの?
0147デフォルトの名無しさん
2009/04/22(水) 10:02:00は昔ながらの記述方式。今でも標準
char* p;
は比較的新しい記述方式
char* p1, p2;
と書くとp1はchar*だけど、p2はcharなので注意
typedef p_char char*;
p_char p1, p2;
と書くとp1, p2ともchar*
俺は場面によってどちらが見やすいかで使い分けてるけどな
0148デフォルトの名無しさん
2009/04/22(水) 10:42:34これはひどい
0149デフォルトの名無しさん
2009/04/22(水) 10:49:02今 Java のオブジェクトに C のポインタをハンドラとして持たせようとしているんだけど
long にするか int で良いのか迷ってます。
0150デフォルトの名無しさん
2009/04/22(水) 10:50:31>p_char p1, p2;
これはマジ辞めてくれ。for文の中でgotoで無理やりループを見たときと同じ衝撃だ
0151デフォルトの名無しさん
2009/04/22(水) 10:53:190152デフォルトの名無しさん
2009/04/22(水) 11:05:58常にIDEでソースを読むわけじゃないし
ttp://ja.wikipedia.org/wiki/Typedef
・批判
一部の人々は、typedefを広範に使用することに反対している。
ほとんどの議論は、typedefは単に変数の実際のデータ型を隠すだけであるという考えに集中する。
例えば、Linuxカーネルハッカーであり、ドキュメント作成を行っているGreg Kroah-Hartmanは、
関数プロトタイプ宣言を除いて、typedefの使用をやめさせようとしている。
彼は、typedefを使用することが、必要以上にコードを混乱させるだけでなく、
プログラマが巨大な構造体を単純な型と誤認識して使用してしまうことがあると主張している。
0153デフォルトの名無しさん
2009/04/22(水) 11:12:20衝撃受けたな。WinSDKの構造体やらはポインタは全てLP***ってなってるけど
俺は使うときは必ずTCHA *pszHoge;とかにしてるよ。LP***は絶対に使わない
0154デフォルトの名無しさん
2009/04/22(水) 11:14:29>gotoで無理やりループを見たときと同じ
衝撃なのか、変なやつだな。
0155デフォルトの名無しさん
2009/04/22(水) 11:15:360156デフォルトの名無しさん
2009/04/22(水) 11:19:50time_tがlongでtypedefされてることを意識してればあるいは防げたかもしらん
0157デフォルトの名無しさん
2009/04/22(水) 11:20:27言語仕様がそうなるんじゃ。
0158デフォルトの名無しさん
2009/04/22(水) 11:23:02nearポインタとかfarポインタの名残りっぽいけど
いつまで引っ張るんだよw
0159デフォルトの名無しさん
2009/04/22(水) 11:23:07有用性は置いておくとして
0160デフォルトの名無しさん
2009/04/22(水) 11:25:13混在することはまずないんだけど。
0161デフォルトの名無しさん
2009/04/22(水) 11:37:11すでに廃止される予定とか、混乱の悪寒
0162デフォルトの名無しさん
2009/04/22(水) 12:04:41( ・∀・)人(・∀・ )ナカーマ
俺もLPシリーズはイライラするので使わない。
0163デフォルトの名無しさん
2009/04/22(水) 12:28:44Windowsと関係ないアプリケーションのコアは普通のC/C++で書いてくれ。
0164デフォルトの名無しさん
2009/04/22(水) 12:56:31あれのおかげで余計な手間が増えた気がする
0165デフォルトの名無しさん
2009/04/22(水) 12:59:46スパッとJavaに移行したい
0166デフォルトの名無しさん
2009/04/22(水) 13:45:250167デフォルトの名無しさん
2009/04/22(水) 13:50:55コメント/文字リテラル部分を見分けるように慣れてしまっているから、
意外と辛い。定数くらいならなじみのない英単語や妙ちくりんなローマ字を
こねくり回さなくて済むので便利だが。
0168デフォルトの名無しさん
2009/04/22(水) 13:52:090169デフォルトの名無しさん
2009/04/22(水) 14:08:190170デフォルトの名無しさん
2009/04/22(水) 14:08:570171デフォルトの名無しさん
2009/04/22(水) 15:18:490172デフォルトの名無しさん
2009/04/22(水) 15:47:270173デフォルトの名無しさん
2009/04/22(水) 15:52:200174デフォルトの名無しさん
2009/04/22(水) 16:40:55これを使ったときって、うまくいくときといかないときがあるんだが…。
char c; scanf("%c%*c",&c);をやると、二回エンターを押さなきゃいけないときと一回でいいときとあるし…。これはどういう要因でなるの?
0175デフォルトの名無しさん
2009/04/22(水) 17:12:48一応書いておくと、64ビットアプリではポインタも64ビットになるのが普通。
0176デフォルトの名無しさん
2009/04/22(水) 17:42:560177デフォルトの名無しさん
2009/04/22(水) 17:55:01配列はしょせん有限の要素数しかない。
再帰データ型はその名の通り、理論上はどこまでも続くように値を構成できる。
0178デフォルトの名無しさん
2009/04/22(水) 18:37:55そして履歴が残るはずなんですが
新しくタブを開いたとき、前の履歴が表示されるはずなんですが
これが消えてます
こんな感じで ひとつの履歴は残ってるんですが
残りふたつの履歴が残っていないのです
http://jun.2chan.net:81/b/src/1240381925587.jpg
キャッシュも十分な領域を確保しました
PC板は使えない連中なので
すいません
0179デフォルトの名無しさん
2009/04/22(水) 18:39:32死ね
0180デフォルトの名無しさん
2009/04/22(水) 18:42:52あー、Win板にもIE8スレとかあるけどそっちはどう?
0181デフォルトの名無しさん
2009/04/22(水) 18:45:14あー予想通りやっぱりバグってるな
バグフィックスされるまでIE7で様子見だな
0182デフォルトの名無しさん
2009/04/22(水) 19:02:130183デフォルトの名無しさん
2009/04/22(水) 19:10:120184デフォルトの名無しさん
2009/04/22(水) 19:14:34while(i)
i++;
たいへんなコードです!
いつまでも放置しているととても危険です!
0185デフォルトの名無しさん
2009/04/22(水) 19:53:100186デフォルトの名無しさん
2009/04/22(水) 19:56:450187デフォルトの名無しさん
2009/04/22(水) 19:57:290188デフォルトの名無しさん
2009/04/22(水) 19:58:340189デフォルトの名無しさん
2009/04/22(水) 20:12:510190デフォルトの名無しさん
2009/04/22(水) 20:16:17実際はともかく
0191デフォルトの名無しさん
2009/04/22(水) 21:48:10配列のはじめのひとつ前へのデクリメントは有効なのでしょうか?
(どちらもポインタの指す値が無意味なのは承知の上ですが…)
char s[10];
char *p
p = &s[9];
++p; // 有効
p = &s[0];
--p; // ←コレ
0192デフォルトの名無しさん
2009/04/22(水) 21:53:49それはダメよん
C++のSTLもその当たりを考慮してわざわざリバース・イテレータ
というものを提供している
0193デフォルトの名無しさん
2009/04/22(水) 22:11:04hogecls &(hogecls::operator=)(const hogecls &obj)
{
if(this != &obj)
{
this->hoge = obj.getHogehoge( );
}
return *this;
}
上のように代入コピーを行ってるんだが
gccやborlandではビルド成功して動作するのに
VCだけ、const hogehoge &がthisポインタとして動作しないようなエラーが発生する
((hogehoge *)&obj)->getHogehoge( );
だとビルドは成功するが、勿論不正落ち
どうしたらいいだろうか・・・
0194デフォルトの名無しさん
2009/04/22(水) 22:32:52関数名と&関数名のどっちが正しいの?
例えば
int my_func(int num){return num;}
void func_ptr_arg_test(int(*p)(int)){}
これで
func_ptr_arg_test(my_func);
func_ptr_arg_test(&my_func);
どっちが正しいの?
g++ではどっちも通るんだけど。。。
0195デフォルトの名無しさん
2009/04/22(水) 22:37:36いやそれだけでどうしろと・・
>>194
どっちでもいいと正式に定められてる
0196デフォルトの名無しさん
2009/04/22(水) 22:42:14どちらでも正しいです。関数名は関数のアドレスを返すという規約なので。
ちなみに、クラスのメンバ関数も修飾::名前でアドレスを返すはずなんですが
VC++2009では&をつけないとエラーになります。不思議です。
0197デフォルトの名無しさん
2009/04/22(水) 22:42:48勿論、func_ptr_arg_test(&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&my_func)でもいい。
0198194
2009/04/22(水) 22:50:24あと、呼び出しまで含めて
int(*p)(int);
p=my_func;
p(10);
(*p)(10);
p=&my_func;
p(10);
(*p)(10);
これはどれでも良いってのはしってる。
でも状況次第で何故かだめなことがある気がするのだが・・・
今更ながら、全コンパイラが標準仕様を守っているわけではないと言うことか。
0199デフォルトの名無しさん
2009/04/22(水) 22:51:34そりゃさすがにエラーになったぞ
0200デフォルトの名無しさん
2009/04/22(水) 22:52:030201デフォルトの名無しさん
2009/04/22(水) 23:08:400202デフォルトの名無しさん
2009/04/23(木) 01:39:36ありがとうございます。ということは、巻き戻し処理の時は
先頭でぴったりとまるような条件分岐にする必要があるっていうことですよね・・・うーむ。
0203デフォルトの名無しさん
2009/04/23(木) 05:44:40先頭をこえるデインクリメントは
オーバーフローする危険があるからだめ→オーバーフロー後は未定義動作
って話なので、実際のところ一つ前を指しても問題は起こらないけどね
0204デフォルトの名無しさん
2009/04/23(木) 07:19:570205デフォルトの名無しさん
2009/04/23(木) 13:56:370206デフォルトの名無しさん
2009/04/23(木) 14:01:040207デフォルトの名無しさん
2009/04/23(木) 14:07:210208デフォルトの名無しさん
2009/04/23(木) 14:10:06const定数で配列の要素を初期化できるとふんでいたのですが、クラスの場合不可能なのでしょうか?
ちなみにBをグローバルにするとコンパイルは通りました。
--
class A{
static const int B;
int C[B];
};
const int A::B=32;
int main(){ A a;}
--
error C2057: 定数式が必要です。
warning C4200: 非標準の拡張機能が使用されています : 構造体または共用体中にサイズが 0 の配列があります。
--
0209デフォルトの名無しさん
2009/04/23(木) 14:30:07class A{
static const int B = 32;
int C[B];
};
と書けばよい。VC++2008ならこれでいいが、この書き方を認めないコンパイラもあり、その場合は
class A{
enum { B = 32 };
int C[B];
};
とする(enumハックと呼ばれる。)
ちなみにBをグローバルにする場合も
const int B = 32;
class A{
int C[B];
};
ならいいが
extern const int B;
class A{
int C[B];
};
ではだめだ。int C[B]; のところでBの値が分からないからね。
0210デフォルトの名無しさん
2009/04/23(木) 14:33:42IEEE754の話?
ビットパターンとしては符号ビットがセットされているものとされてないものという区別があるけど本質的にはどちらもゼロの意味。
0211デフォルトの名無しさん
2009/04/23(木) 16:54:4100000000(2) と 10000000(2) の2種類が存在しますよね?
ためしに
int i = 0;
int j = -0;
やってメモリも見ましたが 同じ0x00000000 でした
この場合10000000(2) は表現できないのでしょうか?
これといった使い道は思いあたりませんが
技術的興味からです
あえていえば 10000000(2) を右シフトして -0 から値を生成するとかどうでしょうかね?
0212デフォルトの名無しさん
2009/04/23(木) 16:59:48レスありがとう。
そんな書き方できるとは思いませんでした。
enumでいけるんですねぇ。汎用性考えてEnumのほう使ってみます。
助かりました。
0213デフォルトの名無しさん
2009/04/23(木) 17:01:572の補数でぐぐれ
8bitの整数だとして
10000000 は -128 だボケ死ね
0214デフォルトの名無しさん
2009/04/23(木) 17:02:37その問題は数学者に聞いたほうが良い解がもらえそう。
コンピュータ的には0が2個あるといろいろ不便だと思う。
IEEE754は浮動少数の国際規格だっけ??
0215デフォルトの名無しさん
2009/04/23(木) 17:03:36つか1の補数を表現するような言語は身近にないかも
0216デフォルトの名無しさん
2009/04/23(木) 17:12:52union nz {
int i;
char c[4];
};
int main(void)
{
union nz z;
z.c[0] = z.c[1] = z.c[2] = 0;
z.c[3] = 0x80;
printf("%d\n", z.i);
return 0;
}
0217デフォルトの名無しさん
2009/04/23(木) 17:44:32いや、Cに2の補数でないといけないなんて縛りはないぞ。
見かけないのは2の補数以外を使うアーキテクチャが絶滅しかけているため。
0218デフォルトの名無しさん
2009/04/23(木) 17:51:350219デフォルトの名無しさん
2009/04/23(木) 18:12:100220デフォルトの名無しさん
2009/04/23(木) 18:15:06偽になる整数値が+0と-0の二種類になるだけでは?
0221デフォルトの名無しさん
2009/04/23(木) 18:40:050222デフォルトの名無しさん
2009/04/23(木) 22:45:350223デフォルトの名無しさん
2009/04/24(金) 01:50:11こうだろ。ちゃんと -0.000000 と表示するじゃないか
union nz {
double d;
char c[8];
};
int main(void)
{
union nz z;
z.c[0] = z.c[1] = z.c[2] = z.c[3] = z.c[4] = z.c[5] = z.c[6] = 0;
z.c[7] = 0x80;
printf("%f\n", z.d);
return 0;
}
0224デフォルトの名無しさん
2009/04/24(金) 02:15:59ヒープで10KBの領域とって使うのって
どっちが高速なんでしょうか?
ログをまとめて吐くためのバッファにしようとしてます。
0225デフォルトの名無しさん
2009/04/24(金) 02:22:34MBとかGB単位でメモリ積んでいるパソコンなら違いはないと断言しよう。
その他の利点・欠点を勘定して決めろ。
0226デフォルトの名無しさん
2009/04/24(金) 02:23:490227デフォルトの名無しさん
2009/04/24(金) 11:23:55それぞれの行で空白やカンマを区切りに分割して色々処理したいときに
strtokとか使わないc++ぽい一番簡潔な方法を教えて下さい
0228デフォルトの名無しさん
2009/04/24(金) 11:27:10Boost使う。
0229デフォルトの名無しさん
2009/04/24(金) 11:31:02Boostのなんですか正規表現ですか
0230デフォルトの名無しさん
2009/04/24(金) 11:35:46Boostは次世代C++に取り込まれるライブラリを目指して開発されている。
実際にBoostから標準に採用されているものもある。
で、boost::tokenizerが貴方にぴったりでしょう。
0231デフォルトの名無しさん
2009/04/24(金) 11:38:45どうもです
標準だけじゃ簡単にはいかんということですか
0232デフォルトの名無しさん
2009/04/24(金) 11:51:37ttp://d.hatena.ne.jp/t_suwa/20070113
俺は文字処理あんまり得意じゃないけど、STLつかってSplitくらいは実装できると思うよ。
だからがんばれ!
0233デフォルトの名無しさん
2009/04/24(金) 11:55:32良い記事をありがとう
空白のあとカンマ区切りなんですぐ応用できそうです
0234デフォルトの名無しさん
2009/04/24(金) 11:56:15C99版は可変長配列を使っているし、C++版はstd::vectorを使っている。
0235デフォルトの名無しさん
2009/04/24(金) 13:03:25boostって便利なのか?
0236デフォルトの名無しさん
2009/04/24(金) 13:06:40俺もできるだけ使いたくない。
けど、正規表現のためだけに使ってる。
0237デフォルトの名無しさん
2009/04/24(金) 13:11:50いつでもboostとか使えるとは限らないし
0238デフォルトの名無しさん
2009/04/24(金) 13:13:34boostは抵抗があって、glibc(つーか標準関数)は抵抗ないの?
例えばGUIライブラリは? socketは?
boostに入っていると言うだけで、ある程度は「枯れて」いるんだから
自分で書くよりも余程楽できると思うんだけどね。
0239デフォルトの名無しさん
2009/04/24(金) 13:20:52俺はむしろboostの方を信頼するんだけど。
いつでも使えるとは限らないけど、正直 俺自身が書いたコードよりは信用できると思っているwww
0240デフォルトの名無しさん
2009/04/24(金) 13:22:13ごめん
× >俺はむしろb…(ry
○ >俺も君と同じ意見で、むしろb…(ry
だな。
0241デフォルトの名無しさん
2009/04/24(金) 13:26:45ここで
for( ; number > 0 ; --number ){〜}
と等価な処理を簡潔に書こうと思って
while(number--){〜}
としたら。ループ脱出時のnumberの値が前者が0,後者が-1となり等価にかけなかった。
前者と等価でより簡潔なループ書ける人いたら教えてください。
なお、シングルスレッドで、{〜}の中ではnumberの値は変化しません。
0242デフォルトの名無しさん
2009/04/24(金) 13:36:19++number; while (--number) printf("%d\n", number);
do printf("%d\n", number); while (--number);
0243デフォルトの名無しさん
2009/04/24(金) 13:37:130244デフォルトの名無しさん
2009/04/24(金) 13:40:460245デフォルトの名無しさん
2009/04/24(金) 13:43:46重みのあるコードだったぜ、やるね、あんた。
0246デフォルトの名無しさん
2009/04/24(金) 13:48:54GUIライブラリ(WinSDKやら)は使わざる終えないから気にせず使ってる
でもGDI+は使わない。何故なら、GDI+で実装できることはWinSDKを用いれば自分で作れるから
C/C++の標準関数も気にしない。C/C++を知ってる人が見れば誰でも分かるだろうから
boostはC++知ってても知らない人は知らないライブラリだから、俺は抵抗があるの
0248デフォルトの名無しさん
2009/04/24(金) 14:00:270250デフォルトの名無しさん
2009/04/24(金) 16:12:58なんだかなぁ。WinSDKになくてGDI+にある関数はどうするんだろうとか、
C/C++の標準関数と言っても例えばtzset()みたいな関数が誰でも分かるとは思い難いし、
ましてstd::replace_copy_if()なんて突然出てきたらboost::ptr_vectorより面食らいそうだし、
言い訳がましく聞こえるだけなんだけどねぇ。
0251デフォルトの名無しさん
2009/04/24(金) 16:19:420252デフォルトの名無しさん
2009/04/24(金) 16:19:53フリーである以上、自己責任で使うことになるから、バグのイイワケに使えなくなる。
だから、仕事じゃ、俺は、極力、使いたくない。
0253デフォルトの名無しさん
2009/04/24(金) 16:21:55シェアウェアなら言い訳になるのかい?
ライセンスを読んでみると言い訳には到底使えなさそうなことが書いてあると思うのだが。
そもそもWindowsとかOS自身が実質無保証じゃね?
0254デフォルトの名無しさん
2009/04/24(金) 16:22:09それを使う方がバグは減るだろう。商用可能なら
0255デフォルトの名無しさん
2009/04/24(金) 16:28:51標準から外れたことをするとその分不利になるし
0256デフォルトの名無しさん
2009/04/24(金) 16:45:59フリーのライブラリだと、「なんで、そんなもの使った?別のもの使えよ!
さもなくば、自分で作れ!」って言われることが多いのだよ。
0257253
2009/04/24(金) 16:54:05ああ、あれか、一般企業で言うと、
ウイルスバスターを入れていたのに感染したんです。
じゃあしょうがないね
的なノリか。
分かった気がする。
0258デフォルトの名無しさん
2009/04/24(金) 16:54:19そいつが一から作った物は、もっと悪くなることが予想できる。
0259デフォルトの名無しさん
2009/04/24(金) 17:03:000260デフォルトの名無しさん
2009/04/24(金) 17:03:44正規表現が使えるようになったのはかなり嬉しいことだと思わないか?
0261デフォルトの名無しさん
2009/04/24(金) 17:06:540262デフォルトの名無しさん
2009/04/24(金) 17:18:41下っ端プログラマなら、何がどうなろうが、
なんらかの対策をして直すなりなんなりしなくてはならない話だから、
関係ない話だ。
もっと上のレベルでの期間とか金とか信頼・信用とか契約の
話で、だいぶ違うし、かなり重要なところ。
つまり、下っ端なら下っ端ほど、バグがでにくくて安定してて楽に作れる
優秀な有名どころのフリーのものを使いたがるが、
上の立場になればなるほど、そう言うのは使いたくなくなってくる。
まぁ、俺の経験則からみた見解だ
0263デフォルトの名無しさん
2009/04/24(金) 17:25:42一理あるね。わざわざシェアの他企業のフレームワークを使ってる会社もある
そのフレームワークにもバグが合った話を聞いた時は噴いたな
0264デフォルトの名無しさん
2009/04/24(金) 17:26:42>>262ねw
0265デフォルトの名無しさん
2009/04/24(金) 17:29:23でもインストールしてもいいならじゃんじゃん使う。
GoF本にも書いてあったじゃないか。
経験のある設計者は一から問題を解こうとしない。
ウェブにあるプログラムを再開発しないと書いてあったのは
達人プログラマだったっけ?
まぁそんなとこ。先人は偉いなぁ。
0266デフォルトの名無しさん
2009/04/24(金) 17:32:310267デフォルトの名無しさん
2009/04/24(金) 17:35:30自分が作って自分がテストしたコードも
誰かが作って多くのユーザーがテストをし続けているコードも
どっちにもバグは発生する。
「コードをネコが食べちゃった」ですむのならご自由にどうぞ
というのが達人プログラマの教え。
僕?僕は君よりもアンドリューハントの言うことを信じるなぁ。
そんだけ。所詮は宗教かな。
0268デフォルトの名無しさん
2009/04/24(金) 19:43:01意味が分かりません
0269デフォルトの名無しさん
2009/04/24(金) 20:13:160270デフォルトの名無しさん
2009/04/24(金) 20:29:14コンパイルしたプログラムなんだけど、
ソースコードの無駄な改行のあるなしの違いだけで
はき出すバイナリが違う物になるんだが、
どうして?
0271デフォルトの名無しさん
2009/04/24(金) 20:34:110272デフォルトの名無しさん
2009/04/24(金) 20:39:54コンパイラ製作者に聞いて
0273デフォルトの名無しさん
2009/04/24(金) 21:09:44そうか。
ありがとう。
0274デフォルトの名無しさん
2009/04/24(金) 23:03:52単体では動作せず、複数のプログラムから再利用できる汎用性が高いものっていう認識なんだが、
そうだとすると例えばマクロだけで書いた物もライブラリという呼び名が適用できる?
0275デフォルトの名無しさん
2009/04/24(金) 23:08:20C/C++の標準関数(stdio.h、stdlib.h>もライブラリだよ
>単体では動作せず、複数のプログラムから再利用できる汎用性が高いものっていう認識なんだが
この認識で基本はおk
マクロだけはライブラリとは呼べないと思う
何故ならマクロはビルド時に置換するだけだから
0276デフォルトの名無しさん
2009/04/24(金) 23:16:380278デフォルトの名無しさん
2009/04/25(土) 01:57:30operator!=(const hoge_str&, const hoge_str&)
こんなコード書く奴をどうやって制裁すべきでしょうか
0279デフォルトの名無しさん
2009/04/25(土) 02:21:22何でもかんでもフレンド関数にすんなと言っとけ
0280デフォルトの名無しさん
2009/04/25(土) 07:42:00中身の実装によるだろうけど
これやばいよね?シナコードに大量に含まれてるんだが
0281デフォルトの名無しさん
2009/04/25(土) 07:44:160282デフォルトの名無しさん
2009/04/25(土) 10:08:070283デフォルトの名無しさん
2009/04/25(土) 11:07:54だからそもそも意味がわからないし、コンパイラにぶっちされるんでないか?
0284デフォルトの名無しさん
2009/04/25(土) 14:35:02printf("スレを立てるまでもない-
-質問\n");
というように、- の記号で繋いでやればいいのではないのでしょうか?
何故か全部エラーになってしまうのですが。
お願いします。
0285デフォルトの名無しさん
2009/04/25(土) 14:50:24"質問¥n");
で良いんじゃね? どこで覚えたのそれ。
0286デフォルトの名無しさん
2009/04/25(土) 14:57:43フレンドにする必要もないだろ。
bool operator!=(const hoge_str& lhs, const hoge_str& rhs)
{
return !(lhs == rhs);
}
で、278はBoost.Operators使えって言いたいんでしょ(違
0287デフォルトの名無しさん
2009/04/25(土) 15:48:03新しい発想過ぎて驚きだな。-演算子でつなぐなんて、一体全体誰が言ったの?
そんなやつは早々に見切り付けてついて行かない方が良いよ。
0288284
2009/04/25(土) 19:14:56なんか自分が勘違いして覚えてしまってたのかもしれません。
>>285さんの方法で無事できました。
ありがとうございました。
0289デフォルトの名無しさん
2009/04/25(土) 19:47:01しまったら一番古いのをd[0]に2番目に古いのをd[1]…とずらして一番新しいのを
d[2499]に入れるようにどんどんずらしていきたいんですが、どのように書けばいいですか?
0290デフォルトの名無しさん
2009/04/25(土) 20:01:15でできるけど、追加するたびにいちいち詰めるのは無駄だな。
0291デフォルトの名無しさん
2009/04/25(土) 20:08:35push_backするときにある値以上のサイズならpop_frontするようなdequeを作る
0292デフォルトの名無しさん
2009/04/25(土) 20:11:440293デフォルトの名無しさん
2009/04/25(土) 20:15:550294デフォルトの名無しさん
2009/04/25(土) 20:23:47そのようにとしか
0295デフォルトの名無しさん
2009/04/25(土) 20:34:470296デフォルトの名無しさん
2009/04/25(土) 20:36:08なんども繰り返す処理だからもっと軽い方法があったらそれでいこうと思ってたけど
これでずらすことにします
0297デフォルトの名無しさん
2009/04/25(土) 20:57:340298デフォルトの名無しさん
2009/04/25(土) 21:02:470299デフォルトの名無しさん
2009/04/25(土) 21:03:42計64KBまでにしたほうがいいが
0300デフォルトの名無しさん
2009/04/25(土) 21:08:29STL全然勉強してないんだけどやっぱりSTL覚えておいたほうが良いよね
0301デフォルトの名無しさん
2009/04/25(土) 21:11:21同様のことをC言語で自作したらそうとうくたびれる。
どうしても速度を追求したい人が、C言語やアセンブラを検討する。
0302デフォルトの名無しさん
2009/04/25(土) 21:13:45http://www5c.biglobe.ne.jp/~ecb/cpp/07_08.html
0303デフォルトの名無しさん
2009/04/25(土) 21:19:28そもそもSTL禁止なC++なんて、ほとんど有用性ないだろ。
0304デフォルトの名無しさん
2009/04/25(土) 21:20:330305デフォルトの名無しさん
2009/04/25(土) 22:12:550306デフォルトの名無しさん
2009/04/25(土) 22:26:11std::stackとかもなかなか。
厳密にはSTLじゃないがstd::stringは使うよな。
0307デフォルトの名無しさん
2009/04/25(土) 22:34:51STL遅い
0308デフォルトの名無しさん
2009/04/25(土) 22:42:320309デフォルトの名無しさん
2009/04/25(土) 22:45:06boostは現在、各人が勝手に作っているだけ。規格が定まっていない。
0310デフォルトの名無しさん
2009/04/25(土) 22:56:010311デフォルトの名無しさん
2009/04/25(土) 23:02:200312デフォルトの名無しさん
2009/04/25(土) 23:06:02何言ってんだちゃんと実測しろ
doubleとか構造体をstd::sortに掛けると
qsort()より早いぞ
バイトコピーである必要がないしな
0313デフォルトの名無しさん
2009/04/25(土) 23:11:250314デフォルトの名無しさん
2009/04/25(土) 23:22:380315デフォルトの名無しさん
2009/04/26(日) 00:06:09const付けられるもの(付けられると気付いた物)に機械的にconst付けていったら
まぶしいくらいconstだらけになった。
そんなもん?
0316デフォルトの名無しさん
2009/04/26(日) 00:07:210317デフォルトの名無しさん
2009/04/26(日) 00:08:37至る所constだらけになるのは普通。
0318デフォルトの名無しさん
2009/04/26(日) 00:09:13ありがとう。
0319デフォルトの名無しさん
2009/04/26(日) 00:09:200320デフォルトの名無しさん
2009/04/26(日) 00:11:00圧倒的に遅いものと比べて、それより速かったからといって、
「遅くない」という結論は導けないと思うのだけど。
0321デフォルトの名無しさん
2009/04/26(日) 00:15:09tr1がstd::に入って、大手を振って使えるようになる日がちゃんとくるのだろうか。
本当に今年中に来るんだろうなC++0x
0322デフォルトの名無しさん
2009/04/26(日) 00:20:38みんなunionって使う?
使いどころが今ひとつわからない代物なんだが。
classと比べて勝っている点は何?メモリの拙訳以外には役立つの?
0323デフォルトの名無しさん
2009/04/26(日) 00:25:01そういう話をしているんじゃない
「STLは遅い」と言うから反例を一例上げただけだ
0324デフォルトの名無しさん
2009/04/26(日) 00:26:410325デフォルトの名無しさん
2009/04/26(日) 00:36:11反例になってないといってるんだが
0326デフォルトの名無しさん
2009/04/26(日) 00:42:220327デフォルトの名無しさん
2009/04/26(日) 01:06:27反例になってるじゃないか
ヴォケかお前は
0328デフォルトの名無しさん
2009/04/26(日) 01:10:190329デフォルトの名無しさん
2009/04/26(日) 03:33:15boost参考ページが少ないもん
0331デフォルトの名無しさん
2009/04/26(日) 08:59:08const char * const first=p+3;
const char * const last=p+10;
ここで
std::string(イテレータ始め、イテレータ終わり)
というコンストラクタがあるので、これを利用するつもりで
std::string str(first,last);
と書いたらstrが"3456789"になった。
これで一見動作は良さそうなのだが、
lastが指す先が配列の次の文字になっていそうでGPFになるんじゃないかと不安だ。
大丈夫かね?
実際には末尾にヌル文字があるから大丈夫なのか?
0332デフォルトの名無しさん
2009/04/26(日) 09:22:120333デフォルトの名無しさん
2009/04/26(日) 09:30:32しかし
const char * const last=p+9;
だと
std::string str(first,last);
と書いた時strが"345678"になってしまう。
俺としてはstr="345679"を得たいのだ。
lastすなわちp+9が指すのは文字'9'のところのアドレスだから、
イテレータとして渡すとその1文字前までがstrの内容になってしまうため。
const char * const last=p+10;
は必須だよね?
0334デフォルトの名無しさん
2009/04/26(日) 09:43:16s.end() = s.begin() + s.size();
だから、
もしsをまるまるコピーするならば、 s.size() 個必要だから
+10でいいんだった
0335デフォルトの名無しさん
2009/04/26(日) 09:44:31そうだよね。
ありがとう。
0336デフォルトの名無しさん
2009/04/26(日) 09:45:29全部コピーの場合はstring str(s.begin(), s.end() );だからな。
s.size() = s.end() - s.begin() だ。
0337デフォルトの名無しさん
2009/04/26(日) 11:14:39else{return 0;}
と
if(〜){return 1;}
return 0;
は動作が等価だと思うのですが、どちらが速く動作しますか?
0338デフォルトの名無しさん
2009/04/26(日) 11:18:00後者を推奨するが。
if(!A) continue;
if(!B) continue;
・・・
という書き方は、ifの有効範囲を間違えることが無くなっていい。
0339デフォルトの名無しさん
2009/04/26(日) 11:19:12if(B){
・・・
}
}
と書くと括弧で混乱する元。
0340デフォルトの名無しさん
2009/04/26(日) 11:20:41でいいんじゃないか?
0342デフォルトの名無しさん
2009/04/26(日) 11:28:42if(A && B){ ・・・}
if(A) if(B){・・・}
だと、前者が速いことが多かった。
前者は式の計算量が多くなるけど、分岐予測があったとしても後者の方が駄目ね。
0343デフォルトの名無しさん
2009/04/26(日) 11:37:09面白い経験則だな。
0344デフォルトの名無しさん
2009/04/26(日) 13:16:14ショートサーキットがあるから、前者で計算量が多くなるわけがない。
0345デフォルトの名無しさん
2009/04/26(日) 13:19:37いや同じだよ
0346デフォルトの名無しさん
2009/04/26(日) 13:20:460347デフォルトの名無しさん
2009/04/26(日) 13:21:180348デフォルトの名無しさん
2009/04/26(日) 13:27:35たとえば、1と、1&&1&&1&&1だったらこっちが時間掛かる。
分岐予測と、ショートサーキットは同じではない。
実際には、計算してまとめた方が速いよ。
0349デフォルトの名無しさん
2009/04/26(日) 13:29:39前者のほうが比較的簡単な最適化でも効率のいいコードを吐きやすいってだけだろ。
0350デフォルトの名無しさん
2009/04/26(日) 13:41:37----------
int aaa(int a, int b)
{
if (a)
if (b)
return 0;
return 1;
}
xor eax, eax
cmp DWORD PTR _b$[esp-4], eax
sete al
ret 0
----------
int bbb(int a, int b)
{
if (a && b)
return 0;
return 1;
}
xor eax, eax
ret 0
0351デフォルトの名無しさん
2009/04/26(日) 13:49:16関数がインライン最適化されてないか?
0352デフォルトの名無しさん
2009/04/26(日) 13:50:15じゃ、なんなんだろう
0353350
2009/04/26(日) 13:50:46引数を変数にしたらaaaもbbbも同じコードになってた。
0354デフォルトの名無しさん
2009/04/26(日) 13:52:010355デフォルトの名無しさん
2009/04/26(日) 13:52:41面白い違いだな
0356デフォルトの名無しさん
2009/04/26(日) 13:53:450357デフォルトの名無しさん
2009/04/26(日) 13:56:24なんというか情けない話だな。
0358デフォルトの名無しさん
2009/04/26(日) 13:57:590359348
2009/04/26(日) 14:04:10#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 200000000
int main(){
unsigned int m,n,cl,s;
char p[1024],q[1024],r[1024];
for(n=0;n<1024;n++){p[n]=rand()&1; q[n]=rand()&1; r[n]=rand()&1;}
s=0;cl=clock();
for(n=0;n<N;n++){m=n&1023; if(p[m])if(q[m])if(r[m])s++; }
cl=clock()-cl; printf("clock=%d\nsum=%d\n",cl,s);
s=0;cl=clock();
for(n=0;n<N;n++) {m=n&1023; if(p[m]&&q[m]&&r[m])s++; }
cl=clock()-cl; printf("clock=%d\nsum=%d\n",cl,s);
}
0360348
2009/04/26(日) 14:07:550361348
2009/04/26(日) 14:09:310362デフォルトの名無しさん
2009/04/26(日) 14:10:03みんな結局どういうのよりどういうのが速いって結論になってるの?
0363デフォルトの名無しさん
2009/04/26(日) 14:13:12コードの意味として等価である以上、実行速度はオプティマイズしやすい平易な表現であるかどうかに左右される
0364348
2009/04/26(日) 14:17:01#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 200000000
int main(){
unsigned char p[256],q[256],r[256];
srand(clock());
for(unsigned int n=0;n<256;n++){p[n]=rand()&1; q[n]=rand()&1; r[n]=rand()&1;}
{ unsigned int s=0,m,cl=clock(); for(unsigned int n=0; n<N; n++) { m=n&255; if(p[m]&&q[m]&&r[m]) s++; }
cl=clock()-cl; printf("clock=%d\nsum=%d\n",cl,s); }
{ unsigned int s=0,m,cl=clock(); for(unsigned int n=0;n<N;n++){ m=n&255; if(p[m])if(q[m])if(r[m])s++; }
cl=clock()-cl; printf("clock=%d\nsum=%d\n",cl,s); }
}
0365デフォルトの名無しさん
2009/04/26(日) 14:21:110366デフォルトの名無しさん
2009/04/26(日) 14:23:530367デフォルトの名無しさん
2009/04/26(日) 14:24:50読んでる方からすると、有意な差があるのか誤差の範囲なのかすらわからない
0368デフォルトの名無しさん
2009/04/26(日) 14:25:060369デフォルトの名無しさん
2009/04/26(日) 14:26:100370デフォルトの名無しさん
2009/04/26(日) 14:31:52肝心なのはコンパイラがどこまで最適化をしてるかで、
時間を計ることには、ほとんど意味がないんだって。
0371デフォルトの名無しさん
2009/04/26(日) 14:32:35VC8ではどっちのループも同じコードを出力して、
実行すると、後に実行したループが実行時間が短かった。
(ループの順番を入れ替えても)
0372デフォルトの名無しさん
2009/04/26(日) 14:52:070373デフォルトの名無しさん
2009/04/26(日) 16:01:080375デフォルトの名無しさん
2009/04/26(日) 16:09:57ifを繰り返すのと&&で繋ぐので何の違いも出ないはずだよね。
問題となるのは条件がコンパイル時に評価できる場合に、
どこまで最適化できるかじゃないかな?
0376デフォルトの名無しさん
2009/04/26(日) 16:27:53悔しかったの?w
0377デフォルトの名無しさん
2009/04/26(日) 18:54:05http://tsushima.2ch.net/test/read.cgi/newsplus/1240733623/
0378デフォルトの名無しさん
2009/04/26(日) 20:59:42チェックするツールってありますか?
0379デフォルトの名無しさん
2009/04/26(日) 23:34:59俺的にはconst付けられるものを判別して
const付けられるよって教えてくれるツールも欲しいんだけど、無い?
0380デフォルトの名無しさん
2009/04/26(日) 23:39:360381デフォルトの名無しさん
2009/04/26(日) 23:46:400382デフォルトの名無しさん
2009/04/26(日) 23:52:14共通関数のファイルは冒頭
局所関数は使用する直前でいいのでしょうか
0383デフォルトの名無しさん
2009/04/26(日) 23:58:35winapi 系はとくに、ほかの include とのしがらみがあったりするので・・・
前後関係を一望できるようにしておいたほうが、後で困らない。
0384デフォルトの名無しさん
2009/04/27(月) 00:02:450385デフォルトの名無しさん
2009/04/27(月) 00:09:580386デフォルトの名無しさん
2009/04/27(月) 00:12:44strncatなんかはその理由でstrncat_sが用意されている。
0387デフォルトの名無しさん
2009/04/27(月) 00:17:42何か strncpy() なんかも同じような警告が出るみたい。オーバーランの検知できる _s 付き使えって意味かな。
わざわざ長さ指定の n 付き関数使ってんのに。
0388デフォルトの名無しさん
2009/04/27(月) 00:34:24いっそC++へダイブ(ry
0389デフォルトの名無しさん
2009/04/27(月) 00:43:48使われてるとしたらどういう使い分けされてるのでしょうか?
今からCかC++はじめようと思ってるんですがどっちに手を付ければいいかわからないです
0390デフォルトの名無しさん
2009/04/27(月) 00:47:27Cの方がずっと使われている
C++は理解するのが面倒だとかリストが読みにくいとか
適当な理由を付けてなかなか使われない
本当は大規模開発になればなるほどオブジェクト指向
が生きてくるんだがな
0391デフォルトの名無しさん
2009/04/27(月) 00:51:49基本C++で、Cが選ばれる理由としては
・Cコンパイラしかないから
・現場リーダがC++を信用してないから
・もともとCで書かれたものの改修だから
・C++の機能を使いたくないから(他言語とのインタフェースなどで)
ってところだな。
C++やってれば、CはC++の機能限定版と思えるよ。
0392デフォルトの名無しさん
2009/04/27(月) 00:57:59なかなか C++ の OO を生かした書き方が習得できないんだよな。んで次に Java 行って逃げ道の
ない OO たたき込まれて帰ってきたら C++ が使えるようになっていた。
0393デフォルトの名無しさん
2009/04/27(月) 02:51:36C++言語のソースをg++でコンパイルします。その後で各オブジェクトファイルを
リンケージするために、gccで行うとundefined referenceとエラーが出るのは
何故でしょうか?
0394デフォルトの名無しさん
2009/04/27(月) 03:15:060395デフォルトの名無しさん
2009/04/27(月) 07:52:26gcc は標準Cライブラリをリンクする。
g++ は標準C++ライブラリをリンクする。
C++のプログラムがC++のライブラリを少しでも使っていたら
(newを使った時点でアウト) gcc ではリンク通らなくなる。
0396デフォルトの名無しさん
2009/04/27(月) 09:47:20つ[-lstdc++]
0397デフォルトの名無しさん
2009/04/27(月) 09:53:070398デフォルトの名無しさん
2009/04/27(月) 16:48:03> んで次に Java 行って逃げ道の
> ない OO たたき込まれて帰ってきたら C++ が使えるようになっていた。
そんな人もいるのか。
Javaは言語が尻拭いしてくれるからそれになれていると
C++でミスに気付かなそうだが。
油断しているとすぐ未定義の動作になっちゃうし。
0399デフォルトの名無しさん
2009/04/27(月) 17:15:42C の言語機構に C++ がどう乗っかってるかだけ押さえてれば C++ を安全に扱うのは難しくはない。
でもそれはどう OO を生かして綺麗な設計ができるかとは別の話。
0400デフォルトの名無しさん
2009/04/27(月) 17:22:30> それは C やらないで Java から C++ に来た人でしょ。
ああ、確かにC言語やってあるって言ってるな。
君の言う通りだった。
> でもそれはどう OO を生かして綺麗な設計ができるかとは別の話。
C++の綺麗なクラス設計ってあこがれるわー。
俺がクラス設計やるとやっつけになりやすいんだよねぇ。
申し訳程度にpimplとか使ってみるだけで。
0401デフォルトの名無しさん
2009/04/27(月) 20:06:54自分はFactory系のクラス以外に初期化関数を触らせたくない時くらいしか使わないのですが・・・
0402デフォルトの名無しさん
2009/04/27(月) 20:12:49俺は、friendなんか使わん。
0403デフォルトの名無しさん
2009/04/27(月) 20:14:05Factory なんかはまさにそんな感じ。
friend じゃなくて rape ってキーワードにすれば良かったのに。
0404デフォルトの名無しさん
2009/04/27(月) 20:21:53もうすこしキーワードを練って欲しかった
0405デフォルトの名無しさん
2009/04/27(月) 20:25:45参照可能ってのが良かった。
0406デフォルトの名無しさん
2009/04/27(月) 20:28:180407デフォルトの名無しさん
2009/04/27(月) 20:30:18呼ぶとき、クラス名の修飾が必要かどうかくらいしか違わない。
0408デフォルトの名無しさん
2009/04/27(月) 20:34:100409408
2009/04/27(月) 20:35:230410デフォルトの名無しさん
2009/04/27(月) 20:46:32ってことでしょ? friendもstaticも。
0411408
2009/04/27(月) 21:19:16#include <stdio.h>
class A{
public:
static void B(A& in){
in.D();
}
friend void C(A& in);
protected:
void D(){
puts("you Access to D!");
}
};
void C(A& in){
in.D();
}
int main(){
A a;
a.B(a);
C(a);
}
0412デフォルトの名無しさん
2009/04/27(月) 21:21:450413デフォルトの名無しさん
2009/04/27(月) 22:20:34protectedのD()にアクセスできてるってことね。
0414デフォルトの名無しさん
2009/04/28(火) 02:29:45staticだろうと何だろうと、クラスのメンバであれば、そのクラスのprivateなメンバに自由にアクセスできる。
0415デフォルトの名無しさん
2009/04/28(火) 06:55:10洋書でも論文でもオーケーです
0416デフォルトの名無しさん
2009/04/28(火) 07:41:17そりゃ、おなじメンバならできるだろ
0417デフォルトの名無しさん
2009/04/28(火) 23:29:560418デフォルトの名無しさん
2009/04/29(水) 00:10:41>>416
そうなんか、初めて知った。
でもやっぱstaticメンバ関数は普通のメンバ関数とは違って
privateやprotectedなメンバ変数にはアクセスできないよね。
0419デフォルトの名無しさん
2009/04/29(水) 00:17:21いかなる関数も何回も走ったら遅くなるに決まっている。
走らせると処理が速くなる関数なんて存在し得ないだろ。
あと、コピーコンストラクタが何度も走る設計は普通見直しの余地あり。
0420デフォルトの名無しさん
2009/04/29(水) 00:22:37なんでデストラクタはいちいち virtual にするのかのぉ?
0421デフォルトの名無しさん
2009/04/29(水) 00:23:46自分はそう思うのですが
ここでコピーコンストラクタ3回走りますよっていっても
いや代入だからとか意味不明なこと言われて修正案却下される
バカでも明示的遅くなるのがわかる方法ってないですかね?
0422デフォルトの名無しさん
2009/04/29(水) 00:27:26究極の亜ふぉだな。
優秀な君たちが一斉に退社すれば
バカでも分かるんじゃないかな。
そういう末期な上司は治らないから。末期がんと同じで対症療法的に緩和していくしかない。
0423デフォルトの名無しさん
2009/04/29(水) 00:46:210424デフォルトの名無しさん
2009/04/29(水) 00:58:32できるよ
0425デフォルトの名無しさん
2009/04/29(水) 02:00:55コピーコンストラクタの中にTimer呼んで10秒ほど固まるコードでも
入れてやれよ
0426デフォルトの名無しさん
2009/04/29(水) 09:20:31継承対策
0427デフォルトの名無しさん
2009/04/29(水) 09:32:53いいねそれ。
出来るだけばれないようにこっそり継承で呼び出して・・・。
0428デフォルトの名無しさん
2009/04/29(水) 11:48:08コンストラクタは virtual にしなくていいのですか?
0429デフォルトの名無しさん
2009/04/29(水) 12:12:37オブジェクト作成のときにどのクラスなのかは自明だからな。
0430デフォルトの名無しさん
2009/04/29(水) 12:22:500431デフォルトの名無しさん
2009/04/29(水) 12:41:49コンストラクタは virtual にしないで、
デストラクタは virtual にする。
その理由は継承対策だということですが、
デストラクタがどのクラスに対して呼ばれるのかが自明でない場合ってどういうときでしょうか?
0432デフォルトの名無しさん
2009/04/29(水) 13:32:08お前基礎からやりなおせ
継承使ったこともないのに適当に質問するな
0433デフォルトの名無しさん
2009/04/29(水) 13:34:02C++の禁忌に触れると闇の世界に引きずり込まれるぞ・・・
0434デフォルトの名無しさん
2009/04/29(水) 15:08:50return *this;
と書けばいいの?
0435デフォルトの名無しさん
2009/04/29(水) 15:30:09試しにデストラクタにvirutalを付けての継承と、virutalを付けずに継承した時の
デストラクタの呼ばれ具合を見るといいよ
>>434
そうだよ
0436デフォルトの名無しさん
2009/04/29(水) 15:30:54○virtual
ね。寝ぼけてるな…
0437デフォルトの名無しさん
2009/04/29(水) 16:22:36のようにnew/deleteを置き換えてメモリ状況を見たりしてるんだが
std::vectorを使うと0x00000000をdeleteするんだが、これは仕様?
vectorに何も入れず、宣言するだけで上のようになる
0438デフォルトの名無しさん
2009/04/29(水) 16:59:220x0をdeleteするのは有効で問題ない、これは仕様
0439デフォルトの名無しさん
2009/04/29(水) 19:04:36サンクス!
今までnew/deleteで出力したログの改行数でリークしてるか判断してたが
大量に0x0がdeleteされるから、面倒になってしまった
0440デフォルトの名無しさん
2009/04/29(水) 22:26:46まてまて、ポリモーフィズムって知ってる?
そもそも基底クラスって知ってる?ポインタって知ってる?暗黙の型変換とか動的な型とか知ってる?
0441デフォルトの名無しさん
2009/04/29(水) 23:54:36他人に迷惑を掛けるなら、メンバーから外してもらう。
0442デフォルトの名無しさん
2009/04/30(木) 00:13:08いつの間にか別の男のティンコが
嫁にマウントされてるって事です。
0443431
2009/04/30(木) 00:39:45>>435
class A {
public:
~A() {cout << "A destroyed" << endl;};
};
class B : A {
public:
~B() {cout << "B destroyed" << endl;}
};
int main(){
A a;
B b;
}
というコードを走らせると、
B destroyed
A destroyed
A destroyed
という結果が返ってきてちゃんと動いているように見えます。
virtual をつけようがつけまいが変わりません。おっしゃりたいのはどういうことでしょうか?
0444デフォルトの名無しさん
2009/04/30(木) 00:43:25正しく動いてるだろボケ
0445デフォルトの名無しさん
2009/04/30(木) 00:45:54Yes
Yes、Yes、Yes、No です。
C++ って動的な型使えるのですか?
0446デフォルトの名無しさん
2009/04/30(木) 01:01:02class B : public A {にして、
int main(){
A *b = new B();
delete b;
}
こういうときに問題になる
0447431
2009/04/30(木) 01:55:58なるほど、理解できました。ありがとうございます。
C++ のような静的型付き言語で多相性を利用するとき、
派生クラスを基底クラスのポインタで指さなきゃいけないわけだが、
delete するときにはポインタは自分を基底クラスだとおもっているので、
基底クラスのデストラクタしか呼ばれない。
だから本来は、以下のようにタイプキャストでもしてやればいいんじゃないの?
int main() {
A* b = new B;
delete (B*)b;
}
でもこれって面倒だから、むしろデストラクタを virtual にしろという
あまり本質とも思えない慣習を広めた、というわけかな。
0448デフォルトの名無しさん
2009/04/30(木) 01:57:11s/だから本来は/だったら本来は/
0449デフォルトの名無しさん
2009/04/30(木) 02:02:27いやいやいや。
そもそもA*型のポインタは、基本的にどの型のインスタンスを指してるか分からないわけ。
Aのインスタンスを指してるかもしれないし、Bのインスタンスを指してるかもしれない。
でもそれはどうでもよくて、「Aかその(publicな)派生クラスのインスタンスを指してるんだろう」
ということだけで問題なくプログラミングできるわけさ。
>>447みたいにできるならば、そもそもポリモーフィズムということの意味が全く無い。
いつでも(B*)にキャストして使えるなら、最初からB*型にすればいいじゃないか。
0450デフォルトの名無しさん
2009/04/30(木) 02:32:15> 最初からB*型にすればいいじゃないか。
確かにそうですね。丁寧にありがとうございました。
以下ざれごと。
これってC風ポインタを引きずっている弊害でこうなってしまったというか、
ポインタは確かに早くて概念もわかりやすいかもしれないが、
オブジェクトを指すには向いていないと思う。
オブジェクトって「自分がなにであるかを知っているデータ構造」なわけど、
ポインタで指すとわからなくなっちゃうわけで。
Java みたいなやりかたはスマートだと思うな。
0451デフォルトの名無しさん
2009/04/30(木) 02:42:070452デフォルトの名無しさん
2009/04/30(木) 03:17:100453440
2009/04/30(木) 06:44:31俺の言っていたポリモーフィズムはまさに基底クラスのポインタで派生クラスをまとめて操作できるという話。
もう知ったんだろうからいいけど。
>>450
> オブジェクトって「自分がなにであるかを知っているデータ構造」なわけど、
→→そんなことあるか?
> ポインタで指すとわからなくなっちゃうわけで。
> Java みたいなやりかたはスマートだと思うな。
→→Javaの発想はいいけど、所詮Javaのスピードしか出ない。
polymorphicな使い方しない場合だってあるわけで、
C++の根底にあるスピード重視思想を考慮すれば
別に不思議な仕様じゃないと思うよ。
0454デフォルトの名無しさん
2009/04/30(木) 07:18:190455デフォルトの名無しさん
2009/04/30(木) 07:34:430456デフォルトの名無しさん
2009/04/30(木) 09:22:27decoratorで随時エフェクトの登録や削除を行うにはどういう実装をしたらよいでしょうか?
0457デフォルトの名無しさん
2009/04/30(木) 09:26:03それのどこがc/c++の質問なのかkwsk
>>455
質問なら質問らしく、聞きたいポイントを絞ってくれ。
回答のつもりなら、多態性について少しは勉強してからにしてくれ。
>>454
そのマクロを例えばif (...) macro(0); else macro(1);という文脈で使いたいから。但し、最後のセミコロンは不要。
0458デフォルトの名無しさん
2009/04/30(木) 09:27:14> 俺の言っていたポリモーフィズムはまさに基底クラスのポインタで派生クラスをまとめて操作
一般にオブジェクト指向の文脈では多相性はポインタとは直接関係ないですからね。
実は C++独自の解釈ですね。
> →→そんなことあるか?
はい。
> スピード重視思想を考慮すれば別に不思議な仕様じゃないと思うよ。
C++ってスピード重視なの?スピード重視ならCで書いちゃいますが。
C++ の仕様の統一感のなさは Stroustrap のセンスの問題だと思いますよ。
それが当たり前になってる人はクラスベースオブジェクト指向以外の他の言語を調べると
いろいろ発見があるかもしれません。
0459デフォルトの名無しさん
2009/04/30(木) 09:39:15物理的なアクセスの事です。
0460デフォルトの名無しさん
2009/04/30(木) 09:42:48確実に有効範囲を括弧内にしたいからでは。 単に{・・・}では心配になるからでは。
ループなら経験上安心できるのでは
0461デフォルトの名無しさん
2009/04/30(木) 09:42:49>汎用でパソコンが扱えるメモリの最小単位は8bitですか? 1や4は無理ですか?
8の時点で既に無理です。
0462デフォルトの名無しさん
2009/04/30(木) 09:44:27>457
0463デフォルトの名無しさん
2009/04/30(木) 09:46:30ここ数年の一般的な家庭用のパソコンについて知りたいのですが8bitごとの物理的なアクセスは出来ませんか?
内部では32bit、64bitを分割してアクセスしてるんですか?
0464デフォルトの名無しさん
2009/04/30(木) 09:48:45その通り。C++はextern "C"でC風に出来る事も失敗の基ってプロジェクトのリーダも行ってたな
クラス内部の関数は__thiscallっていう呼出規約で呼ぶから、スピード感はCに劣る
thisの分よけいにpushしてcallするからね
0465デフォルトの名無しさん
2009/04/30(木) 09:57:39えっと、450と同じ人?とりあえず手軽に突っ込める範囲で書いておくけど。
「ポインタ」であることはそもそも本質的な問題ではない。ポインタだろうが参照だろうが同じ話でしょ。
例えばJavaならJavaで、>>449の「A*のポインタ」とか「B*」とかを全部Javaにおけるオブジェクト変数に
置き換えたところで、本質的な話は変わらない。
ただ、Javaではdeleteをしないしvirtual指定もしないから、元々の「デストラクタをvirtualに」って話とは
直接関わってこないだけのこと。
あと、スピード重視って言い方は語弊があるかもしれんが(まあそれは俺が書いたんじゃないが)
C++には「ゼロ・オーバーヘッド」という原則があることを知っておくといい。
これは、「新たに付け加えられた機能によって、その機能を使わない人が余計な悪影響を受けない」
ということ。C++における仮想関数の実装にはオーバーヘッドがあるが、仮想関数のメカニズムを全く使う
つもりのない人は、そのオーバーヘッドを全く気にせず使える。
そのためには、「デストラクタは常にvirtualになる」みたいな仕様にする訳にはいかなかった。
だから、使用者が必要に応じてデストラクタにvirtualをつけないといけないことになってるんだ。
0466デフォルトの名無しさん
2009/04/30(木) 09:58:240467デフォルトの名無しさん
2009/04/30(木) 10:03:100468名無しさん@お腹いっぱい。
2009/04/30(木) 10:09:19物理的なアクセスってどういうレベルで言ってんの?
一般的な家庭用パソコン = x86なので
メモリバス上で8bit幅のアクセスなんてものは不可能だが
レジスタ上では8bitだけ使うということは可能。
0469デフォルトの名無しさん
2009/04/30(木) 10:10:010470デフォルトの名無しさん
2009/04/30(木) 10:19:56テンプレートによる静的多態を使ったジェネリックプログラミングの方がC++的ということになるのかねぇ
0471デフォルトの名無しさん
2009/04/30(木) 10:23:40俺もそう思うよ。
OOPLとしては消極的すぎ。
0472デフォルトの名無しさん
2009/04/30(木) 10:40:50メモリを読みに行くときの最小単位は32bitってことですか?
ランダムアクセスのときは、レジスタにロードして8bitに区切るから32bitアクセスより鈍くなりますか?
0473デフォルトの名無しさん
2009/04/30(木) 10:45:11君はただしいよ
ただそういうC++の暗黒面を何も思わないC++脳も多いので
2chは話し半分に聞くといい
0474デフォルトの名無しさん
2009/04/30(木) 11:09:39今時のx86CPUだと特定の1バイト書き出すためには先ず、
その周辺のメモリ空間を64バイト(または128バイト)読み込んで、
該当の1バイトを書き換えてから、メモリ空間に書き込む。
従って、本当にランダムなメモリアクセスを行なうと、毎回
キャッシュミスしてDRAMからデータを取ってくるために大変遅くなってしまう。
しかし、ある程度予測できるアクセスパターンならキャッシュ管理の妙で
巧いこと先読みを行なえるので、連続アクセスと大きくは変わらない。
質問の目的がよく判らないから何とも言えないが、もし仮にCのデータ型の話をしたいのなら、
charの配列を使おうがintの配列を使おうが、アクセスパターンが同じなら速度的には大差ないということになる。
0475デフォルトの名無しさん
2009/04/30(木) 11:13:240476デフォルトの名無しさん
2009/04/30(木) 11:53:12入力よりちょっと遅れてしまいますよね?
どうしたらいいでしょうか?
0477456
2009/04/30(木) 12:22:50スレ汚し失礼しました
0478453
2009/04/30(木) 19:07:01C++はともかく他の言語に関しては釈迦に説法的な状況だったのか。すまんね。
助言に従い多言語ももうちょっと前向きに学んでみるわ。
>クラスベースオブジェクト指向以外の他の言語を調べると
>いろいろ発見があるかもしれません。
例えば俺は何をやると良いと思う?
C/C++以外でお願いしたい。
0479デフォルトの名無しさん
2009/04/30(木) 20:06:10void f(hoge_t*, int);なCの関数と、hogeクラスのvoid f(int);というメンバ関数を呼ぶのでは同コストだろうよ。
thisが要らないなら、静的にすればいいし。
0480デフォルトの名無しさん
2009/04/30(木) 20:53:430481デフォルトの名無しさん
2009/04/30(木) 20:56:03cdeclの前についてるアンダースコアは何のためのものだと思う?
0482デフォルトの名無しさん
2009/04/30(木) 20:58:13即レスサンクス。cdeclか
0483デフォルトの名無しさん
2009/04/30(木) 21:02:080484デフォルトの名無しさん
2009/04/30(木) 23:30:080485458
2009/04/30(木) 23:43:22ゼロオーバーヘッドの原則ですか。参考になりました。ありがとうございます。
自由さを標榜しながら必要に応じて virual を「つけないといけない」という矛盾点に、
後方互換性と機能追加の狭間で苦悩する C++ の一端がうかがえました。
0x にすこし期待。
>>478
なんかスレちな気もするので、手短に回答。
ほんとは Smalltalk とか CLOS …といいたいところだけど、
今からやっても全く益にはならないと思いますんで、以下をあげておきます。
Javascript
=> 世間ではPHPなどと一緒くたにされ単なるWeb向けの簡易スクリプト言語と思われているが、
実は意外に奥が深く、クラスベースOOの呪縛から逃れるにはよい教材。
Python
=> 動的OO が如何に自由であるかを学べる上に、普段の作業のお供にも。
あと CLisp か Scheme あたりをちょっとまじめにやってクロージャーを理解すれば、
オブジェクトを裏側から見ることができるでしょう。
0486284
2009/05/01(金) 01:15:150487デフォルトの名無しさん
2009/05/01(金) 01:17:160488デフォルトの名無しさん
2009/05/01(金) 05:43:560489デフォルトの名無しさん
2009/05/01(金) 05:49:410491デフォルトの名無しさん
2009/05/01(金) 21:58:11ヌルはヌルだろ?0じゃないじゃん。
どゆことなん?
0492デフォルトの名無しさん
2009/05/01(金) 21:58:340493デフォルトの名無しさん
2009/05/01(金) 22:35:05・リンクリスト内の 1 要素を指しているポインタがあります。
この場合、ポインタの指している要素がリンクリスト内の何番目かを取得するために
先頭の要素から == で比較して決定するのはポインタ演算的に大丈夫なんでしょうか?
0494デフォルトの名無しさん
2009/05/01(金) 22:44:07using namespace std;
main(){
int i = 1;
while (i < 50) {
cout << i << "\n";
if (i % 3 == 0) {
cout << "アホ\n";
}
i++;
}
}
これがコンパイル出来ないのですが、原因は何でしょうか。
ちなみにコンパイルにはBorland C++ Compiler 5.5をダウンロードして、
win備え付けのコマンドプロンプトを使っています。
0495デフォルトの名無しさん
2009/05/01(金) 22:45:43int main
0496デフォルトの名無しさん
2009/05/01(金) 22:51:07mainの前にintを付けるということですか?
やってみたけど、できません。
ちなみに大学の授業で2・3回習っただけの初心者ですorz
0497デフォルトの名無しさん
2009/05/01(金) 22:56:16最後の}の前に一行、return 0;も付けれ。
0498デフォルトの名無しさん
2009/05/01(金) 23:03:41return 0; はいらない
C++ではreturn 0; を省略すると書いてあるものとみなされる
0499デフォルトの名無しさん
2009/05/01(金) 23:08:080500デフォルトの名無しさん
2009/05/01(金) 23:10:08(X3010 9頁 5.1.2.2.3、X3014 35頁 3.6.1 5節参照)
らしいね。
0501デフォルトの名無しさん
2009/05/01(金) 23:15:34プログラム自体は間違っている感じじゃないんだけど・・・。
0502デフォルトの名無しさん
2009/05/01(金) 23:18:080503デフォルトの名無しさん
2009/05/01(金) 23:20:44そうかも。
ウチの環境ではコンパイルできたわ。
g++ (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
0504デフォルトの名無しさん
2009/05/01(金) 23:22:33同じくbcc6.1.0でコンパイル&実行できました
0505デフォルトの名無しさん
2009/05/01(金) 23:23:150506デフォルトの名無しさん
2009/05/01(金) 23:24:56はずれ引いてしまったのか・・。
503のコンパイルにしたほうがいいですよね?
0507デフォルトの名無しさん
2009/05/01(金) 23:26:370508デフォルトの名無しさん
2009/05/01(金) 23:26:44bcc5.5なんて時代の遺物は使うな
0509デフォルトの名無しさん
2009/05/01(金) 23:27:260510デフォルトの名無しさん
2009/05/01(金) 23:28:570511デフォルトの名無しさん
2009/05/01(金) 23:29:470512デフォルトの名無しさん
2009/05/01(金) 23:31:16コマンドプロンプトは左クリックでカーソル移動しないし、
右クリック押しても何も起こらない・・
初心者にオススメのコンパイラって何ですか?
0513デフォルトの名無しさん
2009/05/01(金) 23:32:56コマンドプロンプトの左上にアイコンがついてるよな?
そいつをクリックして、編集→範囲指定→(゚Д゚)ウマー
0514デフォルトの名無しさん
2009/05/01(金) 23:33:080515デフォルトの名無しさん
2009/05/01(金) 23:34:14Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
book001.c:
致命的エラー F1003 c:\Borland\Bcc55\include\stdcomp.h 5: error 指令: Must use C+
+ for STDCOMP.H
*** 1 errors in Compile ***
お!ありがとうございます。
0516デフォルトの名無しさん
2009/05/01(金) 23:35:22このメッセージは,#error 指令がソースファイルで処理されるときに表示されます。
'message' は,#error 指令の文字列です。
0517デフォルトの名無しさん
2009/05/01(金) 23:37:01そーいうときは、「致命的エラー F1003 」でぐぐる!
ぐぐる
↓
Q. Borland C++ 5.5 でコンパイルしましたが、以下のエラーが出てコンパイル出来ません。
致命的エラー F1003 C:\BORLAND\BCC55\include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H
*** 1 errors in Compile ***
A. おそらく、ソースファイルの中に C++ のプログラムでしか使用できない記述があるものと思われます。
ソースファイルの拡張子を .cpp にして保存してから、コンパイルしてください。
コンパイラはソースの拡張子をたよりに、それが C なのか C++ なのかを判別しています。
↓
(゚Д゚)ウマー
0518デフォルトの名無しさん
2009/05/01(金) 23:50:19本当にありがとうございました!!
これでプログラミングを家でも出来るようになりました。
皆さまお世話になりました。
0519デフォルトの名無しさん
2009/05/02(土) 00:43:260520デフォルトの名無しさん
2009/05/02(土) 00:53:59なんでlinusとかからネガキャンされんだろ
0521デフォルトの名無しさん
2009/05/02(土) 00:56:37linusは自己顕示欲が強すぎんだよ
「俺がGPLでタダで使いやすい環境を揃えてやってるのに
なんで皆金はらって商業ベースのOSばかり使いたがるんだ」
0522デフォルトの名無しさん
2009/05/02(土) 01:03:510523デフォルトの名無しさん
2009/05/02(土) 01:12:47後はなれでしょ
0524デフォルトの名無しさん
2009/05/02(土) 01:35:420525デフォルトの名無しさん
2009/05/02(土) 01:39:370526デフォルトの名無しさん
2009/05/02(土) 08:46:160527デフォルトの名無しさん
2009/05/02(土) 09:36:241時間ぐらい話せば解る
0528デフォルトの名無しさん
2009/05/02(土) 10:45:47設定事の管理はゴリゴリ書かないで IDE に任せておくもの道理だけどな。
0529デフォルトの名無しさん
2009/05/02(土) 10:52:110530デフォルトの名無しさん
2009/05/02(土) 11:27:08IDE のプロパティだの何だのをあちこちいじってメンテするのとあまり変わらん気が。
よっぽど小さい規模じゃなきゃ、さすがに手で Makefile 書く機会も減ってきているしな。
0531デフォルトの名無しさん
2009/05/02(土) 11:50:38printfと(と"と"と)と;との応酬で、時によっては\nを入れるっていうパターンになっちゃうんでしょうか?
printfをコピペするだけでも疲れてきたんですけど。
括弧閉じもしないといけないし。
0532デフォルトの名無しさん
2009/05/02(土) 11:52:520533デフォルトの名無しさん
2009/05/02(土) 11:57:55Cでゲーム用のスクリプトのインタプリタを書いて、
そのスクリプトでセリフやら書くのが普通。
0534デフォルトの名無しさん
2009/05/02(土) 12:13:31関数作ってそっちに文字列を渡すと文字数に応じて勝手に改行してくれるようにする
0535デフォルトの名無しさん
2009/05/02(土) 12:50:12ですが、なるほど勉強になりました。
ファイル読み込んでputcharとかで表示させればいいんですかね。
多分上手く行かないだろうけど作ってみます。
0536デフォルトの名無しさん
2009/05/02(土) 12:51:410537デフォルトの名無しさん
2009/05/02(土) 13:09:10printf でやったほうが君には可能
0538デフォルトの名無しさん
2009/05/02(土) 13:10:40吉里吉里とかすでにADVツール無料であるけど
車輪の再開発する気なの?
0539デフォルトの名無しさん
2009/05/02(土) 13:15:080540デフォルトの名無しさん
2009/05/03(日) 02:44:27単に iostream を include しただけで main で何もしない内容でも 400k を超えてたんですが、
もっと小さくするにはどうしたらいいでしょう?
0541デフォルトの名無しさん
2009/05/03(日) 02:50:440542デフォルトの名無しさん
2009/05/03(日) 09:20:49DLL(so)にすると30〜40Kほどに縮む
0543デフォルトの名無しさん
2009/05/03(日) 09:21:31ああ言い忘れたSTLportな
0544デフォルトの名無しさん
2009/05/03(日) 12:58:06コンソールを持たないプログラムなんでこっちが用意したメモリ上のバッファか
何かに出力させたいんです (リダイレクトやファイルは使えません)。
何かうまい方法はないですかね?
0545デフォルトの名無しさん
2009/05/03(日) 12:59:59プログラムの最初のほうで、
stderr = fopen("log.txt", "w");
0546デフォルトの名無しさん
2009/05/03(日) 13:02:36じゃね?
0547デフォルトの名無しさん
2009/05/03(日) 13:10:300548デフォルトの名無しさん
2009/05/03(日) 13:16:46起動してそのstderrをとるコードを書くとか。
面倒だな。
0549デフォルトの名無しさん
2009/05/03(日) 13:38:48パイプのバッファが溢れない程度のメッセージなら、
パイプに溜めておく、という手もある
int fd[2];
pipe(fd);
dup2(fd[1], 2);
ライブラリ呼ぶ
fds[0]を読む
0550デフォルトの名無しさん
2009/05/03(日) 13:39:250551デフォルトの名無しさん
2009/05/03(日) 13:39:420552デフォルトの名無しさん
2009/05/03(日) 13:41:31だから大丈夫な場合ってことわってる
何Kbyteも出すわけじゃないだろう
0553デフォルトの名無しさん
2009/05/03(日) 15:30:43いや、>>550は>>549を見る前に書いた
0554デフォルトの名無しさん
2009/05/03(日) 17:16:44m_hThread = (HANDLE)_beginthread(&hoge::hogeloop,0,NULL); //スレッド1作成
1 番目の引数を 'void (__thiscall hoge::* )(LPVOID)' から 'void (__cdecl *)(void *)' に変換できません。
って言われるんですが、何かヒントでいいので教えてもらえないでしょうか
0555デフォルトの名無しさん
2009/05/03(日) 17:20:50メンバ関数ポインタがまったく理解できてない
メンバ関数ポインタでぐぐって出てくるページでも読んどけ
0556デフォルトの名無しさん
2009/05/03(日) 17:26:14クラス内で別スレッドを持たせる場合、間に静的のクラス関数を噛ませないと駄目
その静的クラス関数にthisポインタを渡せば、beginthreadで渡されるから
0557デフォルトの名無しさん
2009/05/03(日) 17:31:59○beginthreadに静的クラス関数を指定して、その際thisポインタを渡せばおk
0558デフォルトの名無しさん
2009/05/03(日) 17:47:44ありがとうございました
0559デフォルトの名無しさん
2009/05/03(日) 20:11:200560デフォルトの名無しさん
2009/05/03(日) 20:33:540561デフォルトの名無しさん
2009/05/03(日) 20:39:040562デフォルトの名無しさん
2009/05/03(日) 20:39:07int main() {
int i = 0x8B;
int j = 6, k, l, m;
k = (i>>j)&1, k = !k, k = k << j;
l = 1<<j;
m = i & ~l, m = m | k;
printf("%08X %08X %08X %08X\n", i, k, l, m);
}
0563デフォルトの名無しさん
2009/05/03(日) 20:51:02では
ある変数のiビット目をある変数のiビット目に代入する方法はありますか?
0564デフォルトの名無しさん
2009/05/03(日) 20:53:530565デフォルトの名無しさん
2009/05/03(日) 20:59:04あります
0566デフォルトの名無しさん
2009/05/03(日) 21:00:07>>563
ビットフィールドつかえ。
0567デフォルトの名無しさん
2009/05/03(日) 21:04:41えー?
0568デフォルトの名無しさん
2009/05/03(日) 21:12:02と問われているんだから
あります
と答えればいいんでない?
0569デフォルトの名無しさん
2009/05/03(日) 21:44:260570デフォルトの名無しさん
2009/05/03(日) 21:46:320571デフォルトの名無しさん
2009/05/03(日) 21:49:22y = (y & ~(1 << i)) | (x & (1 << i))
0572デフォルトの名無しさん
2009/05/03(日) 22:17:100573デフォルトの名無しさん
2009/05/03(日) 22:20:100574デフォルトの名無しさん
2009/05/03(日) 23:05:21for文を使って計算させるよりも早いんですか? どうしてですか?
0575デフォルトの名無しさん
2009/05/03(日) 23:11:14Expression Template 。
letsboost::uBLAS
ttp://www.kmonos.net/alang/boost/classes/ublas.html
0576デフォルトの名無しさん
2009/05/03(日) 23:11:28アセンブラとか使ってカリカリにチューンしてあるとか、アルゴリズムがすごいとか。
0577575
2009/05/03(日) 23:17:37BALSはFortranで書かれているから単にその速さの違いなんじゃね?
あと、天才がアルゴリズム組んでるとか。
0578デフォルトの名無しさん
2009/05/03(日) 23:36:56キャッシュとか考えてメモリアクセスを最適化してるからだと思うが
0580デフォルトの名無しさん
2009/05/03(日) 23:40:210581デフォルトの名無しさん
2009/05/04(月) 08:41:190582デフォルトの名無しさん
2009/05/04(月) 10:10:260583デフォルトの名無しさん
2009/05/04(月) 10:37:400584デフォルトの名無しさん
2009/05/04(月) 10:47:440585デフォルトの名無しさん
2009/05/04(月) 11:27:42著作権表示、ライセンス条文、無保証
を表示しなければなりませんよね。
後ろ二者はいいとして、著作権表示をすると
Yに関する著作権は全てXの物になるのですか?
それともYの中のXを使っている部分に関してのみXの物になるのですか?
0586デフォルトの名無しさん
2009/05/04(月) 11:35:170587デフォルトの名無しさん
2009/05/04(月) 11:56:01それもそうなんですが、
他に聞けそうなスレが無くて。。。
ソフトウェアライセンス相談
ttp://pc12.2ch.net/test/read.cgi/software/1240377611/1-100
ここはちょっと違うような・・・
0588デフォルトの名無しさん
2009/05/04(月) 11:59:140589デフォルトの名無しさん
2009/05/04(月) 12:08:250590デフォルトの名無しさん
2009/05/04(月) 12:11:290592デフォルトの名無しさん
2009/05/04(月) 12:23:55尊んでいるのか、けなしているのか・・・
0593デフォルトの名無しさん
2009/05/04(月) 14:58:16本を購入しさっそくコンパイラでもダウソしてみようかと思ったのですが、
みなさんもBorland C++ Compiler 5.5を使っておられるのですか?
また、みなさんいちいちユーザー登録をしているのですか?
0594デフォルトの名無しさん
2009/05/04(月) 15:00:50とりあえず俺は使ってない。
0595デフォルトの名無しさん
2009/05/04(月) 15:01:34してる
0596デフォルトの名無しさん
2009/05/04(月) 15:02:280597デフォルトの名無しさん
2009/05/04(月) 15:05:31ありがとうございます
0598デフォルトの名無しさん
2009/05/04(月) 15:07:38初心者ならbccでもVCでもgccでも同じだと思う。
bcc5.5.1はC++のちょっと高度なテンプレート周りが
とんでもなく標準準拠性悪いけど、別に最初は関係ない。
初心者のうちはエラーメッセージが日本語な
bccやVCがいいかもね。
0599デフォルトの名無しさん
2009/05/04(月) 15:08:40ども、そうしときます。
0600デフォルトの名無しさん
2009/05/04(月) 15:09:51Windowsで、
bcc, vc, gcc以外になんかある?
0601デフォルトの名無しさん
2009/05/04(月) 15:20:27どっかのサイトとかでお勧めでもしてるのかね。
0602デフォルトの名無しさん
2009/05/04(月) 15:25:17俺も最初はbccから入った。でも何でbccを選んだのか分からない。
今はgccとvcしか使っていないが。
0603デフォルトの名無しさん
2009/05/04(月) 15:29:560604デフォルトの名無しさん
2009/05/04(月) 15:31:01がんばってgcc(MinGW)を入れた。
0605598
2009/05/04(月) 15:36:13って思えるようなレベルに到達するまでは好きにすればいいと思う。
まあgccだってwchar_tらへんは弱いし。
0606デフォルトの名無しさん
2009/05/04(月) 15:38:260607デフォルトの名無しさん
2009/05/04(月) 15:42:26DOSの時代のTurboCとか、適当にソースを打ち込んでF5で実行できたから、
すごい簡単だったけど。
0608デフォルトの名無しさん
2009/05/04(月) 15:46:30VisialStudioより前に無料配布を始めてるはず。
だから古くからあるサイトとか、そういうサイトで学習したところでは、
bcc使った開発方法を載せてるところがある。
0609デフォルトの名無しさん
2009/05/04(月) 15:59:300610デフォルトの名無しさん
2009/05/04(月) 16:27:58某大学でプログラミング実習のTAやってますが、担当の先生が推奨する
コンパイラがあればそれを使うのが吉かと。うちの先生はfor文を
for (int i = 0; i < n; i++)
みたいに書くので、家で宿題をやろうとしてC99未対応のコンパイラを
使って悩む学生さんが毎年出ます。
>>609
LSI-C試食版はそろそろ絶滅してほしいですね。今年出たトラ技別冊の
C入門書(大学生協に山積みされてた)がこれを使っているせいか、今年も
これを素直にインストールした人がいるようです。
http://www.cqpub.co.jp/trs/index.htm
0611デフォルトの名無しさん
2009/05/04(月) 16:33:34VC環境は悪だとか言ってる人もいますよ
0612デフォルトの名無しさん
2009/05/04(月) 16:43:28嘘言え。Fラン大学生がVC環境とかそんな高度な日本語発言できるわけがないだろ。
F「ぱそこん?ぷれすてじゃね〜の?」
だろw
0613デフォルトの名無しさん
2009/05/04(月) 16:49:32先生にそれ止めれって言うなりよ
コンパイラは学校が教材として生徒に提供するなりよ
いまはゆとり教職多いんだな。
ゆとり教職がゆとり学生を教えるゆとり時代になったんだな。
0614デフォルトの名無しさん
2009/05/04(月) 17:04:050615デフォルトの名無しさん
2009/05/04(月) 17:04:19甘やかしすぎ。それくらい学生自身で解決させろよ。
講義中、習ってない数学の定理を使われるようなのは日常茶飯事だったぞ。
0616デフォルトの名無しさん
2009/05/04(月) 17:13:000617デフォルトの名無しさん
2009/05/04(月) 17:13:09今そんなことすると、親御さんから大学事務局へ苦情
さらに教授会で締め上げられるよw
0618デフォルトの名無しさん
2009/05/04(月) 17:15:56F大学じゃ、そういうもんだろ
0619デフォルトの名無しさん
2009/05/04(月) 17:41:47お前がFランだと自己紹介しなくて良いから
0620デフォルトの名無しさん
2009/05/04(月) 17:42:25VC++無料版のコンパイラは性能どうなんですか?
昔、インストールした時、
性能に制限があるとかないとかよくわかりませんでした。
0621デフォルトの名無しさん
2009/05/04(月) 17:44:22お前は自分が専門学校程度のバカだと自己紹介しなくて良いから
少し黙ってな。
>>613
http://ja.wikipedia.org/wiki/%E3%82%86%E3%81%A8%E3%82%8A%E4%B8%96%E4%BB%A3
ゆとり世代でもう教授だの、授業を担当している講師がどんだけいると?
お前の頭がゆとり過ぎる、少し黙ってろ
0622デフォルトの名無しさん
2009/05/04(月) 17:44:380623デフォルトの名無しさん
2009/05/04(月) 17:47:36VC2008EEでも最適化のO2ができる。
WinApiも標準で持ってるしC++/CLIもできる。
趣味用途なら決定版だと思うぞ。商用もたしかできる。
最近の商売のネタはチームのコミュニケーションとかコラボレーションとかそういう部類で食ってるみたいだからね。
0624デフォルトの名無しさん
2009/05/04(月) 17:49:06性能に違いはなかったはず。
機能の違いについては、MSのサイトで詳しく説明されている。
0625620
2009/05/04(月) 17:53:36性能を気にするレベルでないのは、ご指摘どおりです。
ありがとうございます。
>>623
WinApiに対応できてるのは知りませんでした。
ありがとうございます。
>>624
すみません。最近チェックしてませんでした。
ありがとうございます。
0626デフォルトの名無しさん
2009/05/04(月) 18:40:15どれも、あると嬉しいが無くても困らないという感じがする。
0627デフォルトの名無しさん
2009/05/04(月) 18:46:440628デフォルトの名無しさん
2009/05/04(月) 19:11:000629デフォルトの名無しさん
2009/05/04(月) 19:13:18>>for (int i = 0; i < n; i++)
の何が悪いのか教えてくれ
0630デフォルトの名無しさん
2009/05/04(月) 19:13:370631デフォルトの名無しさん
2009/05/04(月) 19:17:01C99以前のコンパイラでは通らない。
int宣言しながらforまわそうとしてるから。
0632デフォルトの名無しさん
2009/05/04(月) 19:17:440633デフォルトの名無しさん
2009/05/04(月) 19:17:46C++では問題ないけどCってこの書きかた出来たっけ?
0634デフォルトの名無しさん
2009/05/04(月) 19:19:260635デフォルトの名無しさん
2009/05/04(月) 19:20:210636デフォルトの名無しさん
2009/05/04(月) 19:21:58コンパイラのVer違いまで把握するほど玄人じゃないから、ありがとう
0637デフォルトの名無しさん
2009/05/04(月) 19:24:19for 外で同じ名前の変数使おうとすると変数の重複でエラーになったんだよな。
しかも J++ でも同じような事になっていた。
今のはどうなんだろう。
for(int i=0; ...; ...){...}
for(int i=0; ...; ...){...} // ← i は宣言されていますとか何とか
0638デフォルトの名無しさん
2009/05/04(月) 19:50:112005以降は直ってる
0639デフォルトの名無しさん
2009/05/04(月) 21:00:03なんで、ゆとりをゆとり世代と勝手に解釈してるんだ?
これがゆとりなのか
0640デフォルトの名無しさん
2009/05/04(月) 21:45:100641デフォルトの名無しさん
2009/05/04(月) 23:14:28学校ではC99を教えているのか? で、なんでLSI-C試食版が絶滅して欲しい?
C99対応コンパイラじゃないから?
0642デフォルトの名無しさん
2009/05/04(月) 23:57:40どうせなら実際に現場で使われてる環境で学習した方が後々の効率もいいだろうし。
組み込みじゃ、試食版じゃないLSI-Cってそんなに使われてるの?
0643デフォルトの名無しさん
2009/05/05(火) 00:02:470644610
2009/05/05(火) 00:22:12LSI-C試食版ですが、そもそもC99の構文を使うとコンパイルできませんし、
x86のスモールモデルしか対応していないので、C99の構文を避けたとして
も、宿題のプログラムが動かないこともあるからです。
宿題を自宅パソコンでやりたかったら、Linuxか何かを使うか、MinGWか
Cygwinを入れてgcc 4.0以上を使えるようにしておけと案内しているのですが。
0645デフォルトの名無しさん
2009/05/05(火) 00:34:08-std=c99と書かなくてはならないのが面倒だよね。さっさとデフォルトで
使えるようになってほしいんだけどな。
0646デフォルトの名無しさん
2009/05/05(火) 00:54:21LSI-C試食版が絶滅して欲しいのは自分(達)の都合が悪いからってこと?
自分達の都合が悪いと絶滅して欲しいと...
0647デフォルトの名無しさん
2009/05/05(火) 01:32:100648デフォルトの名無しさん
2009/05/05(火) 02:03:420649デフォルトの名無しさん
2009/05/05(火) 08:36:11LSICはコンパイラも作った実行ファイルも
そのままじゃ動かないから自然に消えるだろうけどなあ
>>646
はっきり言って知らずに使ってる人が不幸だから
なくなってほしいと思うよ
0650デフォルトの名無しさん
2009/05/05(火) 08:38:34LSICはWindows7に対応するだろ
嘘を付くな嘘を
0651デフォルトの名無しさん
2009/05/05(火) 08:52:340652デフォルトの名無しさん
2009/05/05(火) 10:00:13これはどの標準ライブラリに含まれているものなの?
0653デフォルトの名無しさん
2009/05/05(火) 10:11:35逆に、今現在LSIC試食版でC言語の学習をするメリットってなに?
簡単に使える無料コンパイラが無かった当時は貴重な存在だったのは認めるが、
今ならもっといい開発環境が無料で手に入るんだし。
0654デフォルトの名無しさん
2009/05/05(火) 10:44:36MyClass::MyClass(int i)
などは付ける意味があるのは分かりましたが、
コピーコンストラクタ
MyClass::MyClass(const MyClass& i)
にも付けることの意味ってありますか?
0655デフォルトの名無しさん
2009/05/05(火) 12:37:130656デフォルトの名無しさん
2009/05/05(火) 12:49:26くみこも専門学校なら兎も角。
0657デフォルトの名無しさん
2009/05/05(火) 12:49:500658デフォルトの名無しさん
2009/05/05(火) 12:52:260659デフォルトの名無しさん
2009/05/05(火) 12:53:38LSI-C販売元乙
0660デフォルトの名無しさん
2009/05/05(火) 12:59:460661デフォルトの名無しさん
2009/05/05(火) 13:11:10それこそ組み込み系ぐらいだよね
0662デフォルトの名無しさん
2009/05/05(火) 13:24:58C++だと誰かが書いたアロケータですんでしまうからなぁ。
0663デフォルトの名無しさん
2009/05/05(火) 13:30:480664デフォルトの名無しさん
2009/05/05(火) 13:35:35デンジャーなところはクラスがラップしてくれるから生のポインタはあんまり触らないな。
ポリモーフィズムもあんまりやらないせいなのかもしれんが。
個人的にはVectorあれば大体片付くからね。
特に、Sizeメソッドとインデックサあればアウトオブレンジはほとんど無い。
0665デフォルトの名無しさん
2009/05/05(火) 13:42:20情報系学科の学生さんなら、基本的なアルゴリズムやデータ構造を
一度くらい自分で実装したりする機会もあっていいのでは。
0666デフォルトの名無しさん
2009/05/05(火) 13:54:050667デフォルトの名無しさん
2009/05/05(火) 14:04:35OSとかないほうがいい
0668デフォルトの名無しさん
2009/05/05(火) 14:12:27機械語(OSなし)で、いろいろやって不満を感じたころにCluという言語を
習って目から鱗が落ちた経験があります。
今でも最初にCあたりでスタートしてから高レベルな言語に移るのもあり
ではないでしょうかね。
0669デフォルトの名無しさん
2009/05/05(火) 14:14:300670デフォルトの名無しさん
2009/05/05(火) 14:20:29実はコピーコンストラクタではありませんというとんでもないクラスならexplicit付けておけ。
ようするに、コピーコンストラクタにexplicit付ける理由はない。
0672デフォルトの名無しさん
2009/05/05(火) 16:37:34sprintf(s, "%s hoge", s)みたいにするのっていいのでしょうか。
0673デフォルトの名無しさん
2009/05/05(火) 17:03:090674デフォルトの名無しさん
2009/05/05(火) 17:03:51それは簡単にセキュリティを阻害できるのであんまり好ましくないが、変換には便利なので利用される。
調べてみたらセキュリティ強化版のsprintf_sというのがC99から導入されたようだ。
コンパイラが対応してるならそっちを使ったほうがいいのかもしれん。
0675674
2009/05/05(火) 17:05:11俺も未定義なきがする。
0676デフォルトの名無しさん
2009/05/05(火) 17:07:49俺は学習するメリットとかについては何も言っていない。
>>644の俺の分析は
自分の担当学生が言うことを聞かずにLSI-C試食版を入れる。
そのサポートが大変で困っている。
これはLSI-C試食版存在するのが原因である。
だから絶滅して欲しい。
俺思うに真の原因は指定を無視してLSI-Cを入れた学生だろ。
その学生にこそお前氏ねといったほうが良いんじゃないのかと思ったんだ。
でも、TAはLSI-C試食版氏ね。
0677デフォルトの名無しさん
2009/05/05(火) 17:15:25いかにも未定義臭い書き方だなぁ。
0678デフォルトの名無しさん
2009/05/05(火) 17:26:350679デフォルトの名無しさん
2009/05/05(火) 17:31:420680デフォルトの名無しさん
2009/05/05(火) 17:32:480681デフォルトの名無しさん
2009/05/05(火) 17:34:22そのとおりだな。
VC8じゃstrcatになった。
BCC6.1じゃsの上書きでsは hoge のみ
0682デフォルトの名無しさん
2009/05/05(火) 17:39:320683デフォルトの名無しさん
2009/05/05(火) 17:45:08Cの仕様書かい?
0684デフォルトの名無しさん
2009/05/05(火) 20:08:06このとき、コンテナをポインタとして持つのか、それともそのまま持つのか
どちらにするべきなんでしょうか?
つまり
class HogeA {
// ...
private:
std::vector<int> vec;
};
なのか
class HogeB {
// ...
private:
std::vector<int> *vec;
};
のどちらが良いか、ということです。
任意のタイミングで初期化する必要がなければ、
HogeAの方が楽ですし、deleteし忘れもないので良いと思うのですが
HogeBならばvectorをincludeしなくてよいため、ヘッダの依存関係が無くなって良いかも?と思うのです。
(STLのようなライブラリをincludeする場合は、気にしなくても良いのかもしれませんが…)
検索しても関係ないものがひっかかってモヤモヤしております。
0685デフォルトの名無しさん
2009/05/05(火) 20:13:23HogeBの場合、
pimplイディオムが味方になってくれそうな状況だな。
c++ ? ありえるえりあ
ttp://dev.ariel-networks.com/Members/matsuyama/categories/c
この辺とか
pimplまとめとか - プログラマブル俺
ttp://d.hatena.ne.jp/portown/20090318/1237389062
この辺とかかな。
あと他にpimplについて分かりやすく説明しているサイトを
知っているお方が居たら教えてくださいな、俺も知りたい。
0687デフォルトの名無しさん
2009/05/05(火) 20:23:160688デフォルトの名無しさん
2009/05/05(火) 20:31:21>増築に増築を重ねて
まあまさにそのとおりだな。
でもC++の魔力ってあるよねやっぱ・・・学んでて面白い俺は変態か?
0689デフォルトの名無しさん
2009/05/05(火) 21:04:50と一つでも思い始めたら変態です。気おつけましょう
0690デフォルトの名無しさん
2009/05/05(火) 21:07:20おっと大沢温泉の悪口はそこまでだ
0691デフォルトの名無しさん
2009/05/05(火) 21:09:29残念ながら
「TMPってすげー!でもやるのはめんどうだな、他の人にやってもらおう、俺は利用するだけでいいや」
と思っている程度の俺は変態じゃないのか。
早く変態にならなければ。
0692デフォルトの名無しさん
2009/05/05(火) 21:12:17あるのでしょうか。すごく知りたいです
0693デフォルトの名無しさん
2009/05/05(火) 21:20:07ttp://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms
英語版More C++ Idioms - Wikibooks, collection of open-content textbooks
ttp://en.wikibooks.org/wiki/More_C%2B%2B_Idioms
でも正直読みづらいと思う。
やっぱりなんかの成書が一番だろうか。
もっとお詳しい方プリーズ
0694デフォルトの名無しさん
2009/05/05(火) 21:21:260695デフォルトの名無しさん
2009/05/05(火) 23:47:08するための最善策というと何があるのでしょうか
0696デフォルトの名無しさん
2009/05/05(火) 23:55:230697デフォルトの名無しさん
2009/05/05(火) 23:58:000698デフォルトの名無しさん
2009/05/05(火) 23:59:290699デフォルトの名無しさん
2009/05/06(水) 00:08:24コピーコンストラクタってプレイベートにしても効果あったっけ??わすれちゃった。
0700デフォルトの名無しさん
2009/05/06(水) 00:20:14ttp://www.kmonos.net/alang/boost/classes/noncopyable.html
0701デフォルトの名無しさん
2009/05/06(水) 00:50:58(3つの数の中から最大値を表示するプログラム)
int a,b,c;
scanf("%d",&a);
scanf("%d",&b);
scanf("%d",&c);
if(a>b){
if(a>c) {
printf("%d\n",a);
}
else {
prinf("%d\n",c);
}
else{
if(b>c){
printf("%d\n",b);
}
else {
printf("%d\n",c);
}
}
まずa とbを比較する。大きかったほうとcを比較して大きかったほうが最大値。
こちらのプログラムに似せた形で作れるならばそれで作りたいです。
大きいもの二つだと急に複雑になってしまいよくわからなくなりました。
0702デフォルトの名無しさん
2009/05/06(水) 01:12:24std::maxという関数がC++標準であってだな、AとBくわせて戻り値とCを食わせると最大値が得られる。
std::minという関数もあってだな、AとBを食わせて戻り値とCを食わせれば最小が得られる。
この場合はminで最小を求めてほかの2個を出力するほうが楽かもしれん。
swap関数って言うのもあるんだが、
AとB比較して昇順か降順にスワップして、BとCを同じように比較してスワップしてAとCも同じように比較してスワップすれば、いけそうな気がする。
絡まってきたら関数にくくりだすのが良いと思うよ。
俺の場合はifが滅茶苦茶になりかけたら破棄して書き直すなぁ。
0703デフォルトの名無しさん
2009/05/06(水) 01:14:130704デフォルトの名無しさん
2009/05/06(水) 01:17:57元のコードと何一つ似てる点がなくなるw
0705デフォルトの名無しさん
2009/05/06(水) 02:05:59a > b かつ b > c => a,b
a > c かつ c > b => a,c
b > a かつ a > c => b,a
b > c かつ c > a => b,c
c > a かつ a > b => c,a
c > b かつ b > a => c,b
でいいんじゃね?(同じ値が入る場合は、適当に処理するとして)
0706デフォルトの名無しさん
2009/05/06(水) 02:13:12Perlにも言えそう
0707デフォルトの名無しさん
2009/05/06(水) 09:23:210708デフォルトの名無しさん
2009/05/06(水) 09:29:570709デフォルトの名無しさん
2009/05/06(水) 11:00:06max = (a >= b) ? a : b;
max = (c > max) ? c : max;
printf("最大値は %d\n", max);
こんなんでよくね?
0710デフォルトの名無しさん
2009/05/06(水) 11:01:190711デフォルトの名無しさん
2009/05/06(水) 11:05:120712デフォルトの名無しさん
2009/05/06(水) 15:04:57最大値を求めて、残りの中から最大値を求める。
最小値を求めて、それ以外を出力する。
0713デフォルトの名無しさん
2009/05/06(水) 19:29:47まあ、配列利用するのが楽だよなあ
0714デフォルトの名無しさん
2009/05/06(水) 21:14:58if(a > b) {
if(a > c) {
if( c > b) printf("%d %d\n", a, c);
else printf("%d %d", a, b);
}
else printf("%d %d", c, a);
}
else {
if(b > c) {
if( a > c) printf("%d %d\n", b, a);
else printf("%d %d", b, c);
}
else printf("%d %d", c, b);
}
0715デフォルトの名無しさん
2009/05/06(水) 21:23:370716デフォルトの名無しさん
2009/05/06(水) 21:38:400717デフォルトの名無しさん
2009/05/06(水) 21:51:050718デフォルトの名無しさん
2009/05/06(水) 22:26:03プログラマって数学出来る奴とできない奴に分かれるなってよくわかった。
無論 >>701 以降はすべてできない奴だが。
a > b == c とかどうすんだ。
0719デフォルトの名無しさん
2009/05/06(水) 22:29:360720デフォルトの名無しさん
2009/05/06(水) 22:31:03表示するのはダメでつか?
0721デフォルトの名無しさん
2009/05/06(水) 22:33:35「大きい二つの数を表示」だからあまり問題ないと思うよ。
0722デフォルトの名無しさん
2009/05/06(水) 22:39:18ほほう、その場合何が困るのか説明してもらおうか
0723デフォルトの名無しさん
2009/05/06(水) 23:01:26>>719
うんうん、よかったね
>>721
本気で言ってるのか?w
>>722
少しは自分で考えてみ
0724デフォルトの名無しさん
2009/05/06(水) 23:02:560725デフォルトの名無しさん
2009/05/06(水) 23:04:25曲がりなりにも情報科学をちゃんと勉強してて数学も出来る香具師と、
専門学校レベル出で、反復と経験だけでプログラムできるようになってる香具師がいるってこった。
0726デフォルトの名無しさん
2009/05/06(水) 23:05:06ヒントは書いたからな。それでわからんような香具師に付き合う時間はないよ
0727デフォルトの名無しさん
2009/05/06(水) 23:06:210728デフォルトの名無しさん
2009/05/06(水) 23:09:05木構造でも使うべきなのか
0729デフォルトの名無しさん
2009/05/06(水) 23:12:11プログラミング初心者にありがちな間違いだな。
0730デフォルトの名無しさん
2009/05/06(水) 23:15:070731デフォルトの名無しさん
2009/05/06(水) 23:22:21もう逃亡宣言もしたんだし許してあげなよw
0732デフォルトの名無しさん
2009/05/06(水) 23:22:58a > b == c は a > b かつ c == 1 のときと a <= b かつ c == 0 のとき真
0733デフォルトの名無しさん
2009/05/06(水) 23:23:54正直その発想はなかった
0734デフォルトの名無しさん
2009/05/06(水) 23:38:11どこの中学生が紛れ込んだんだよwwwwww
0735デフォルトの名無しさん
2009/05/06(水) 23:44:00初心者のよくする間違い乙。
職もないし未来もない。
この上2chでまでいじめられるとはwww
でもまあいいじゃん、色んな生き方があるさw
0736デフォルトの名無しさん
2009/05/06(水) 23:46:58どうもしない。
特に指定がない場合はaとb(=c)の2つを表示するだけ。
0737デフォルトの名無しさん
2009/05/06(水) 23:50:02きっと無能市立無能中学校じゃないかな?
0738デフォルトの名無しさん
2009/05/07(木) 00:20:013 年 ROM ってろ。
0739デフォルトの名無しさん
2009/05/07(木) 00:28:53>>736
それ題意満たしてるか?
じゃあ
a=b=cの場合と
a=b>cの場合は?
数学的にってことは、
a,b,c が相異なるのか、そうでないかに場合わけして考える必要があるのと、
「m個の中の上位n個を選択する」というより一般化した解答を書けってことじゃないの?
0740デフォルトの名無しさん
2009/05/07(木) 00:30:38ダメなのでしょうか?
0741デフォルトの名無しさん
2009/05/07(木) 00:31:270742デフォルトの名無しさん
2009/05/07(木) 00:35:58a,b,cが相異なるならそれでいいと思うが、そうでない場合困る。
たとえば、成績上位2人に御褒美をあげたいからそういうプログラム書いてって仕様の時、
全員同じ点数だったら3人目がカワイソス。
0743デフォルトの名無しさん
2009/05/07(木) 00:37:39入門書でよくあるパターンの三回の比較・交換(バブルソート)で終了だとつまらないから
別のやり方でってことなんかな?
0744デフォルトの名無しさん
2009/05/07(木) 00:39:32このケースは、あいまいな仕様をきちんと詰めて確認しないSEに問題があるケースだろうな。
プログラムかけないSEとかいるとほんと苦労するぜ
0745デフォルトの名無しさん
2009/05/07(木) 00:40:200746デフォルトの名無しさん
2009/05/07(木) 00:42:060747デフォルトの名無しさん
2009/05/07(木) 00:43:38こういう問題は全部違う数であることは暗黙の了解。
例外な場合は特に指定がない場合は考えない。
0748デフォルトの名無しさん
2009/05/07(木) 00:45:51その「数」が何かってのが問題なんだろう。
ユニークな数なのか、数の組が意味があるのか。
>>739 の前半参照
この仕様はあいまいだと思うぜ。
0749デフォルトの名無しさん
2009/05/07(木) 00:47:29> こういう問題は全部違う数であることは暗黙の了解。
うーん、残念ながら君はこのままでは一人前のプログラマにはなれないと思うよ。
ベントリー本とかで勉強してみたら?
0750デフォルトの名無しさん
2009/05/07(木) 00:47:31どこの PG 一年生だよ。
0751デフォルトの名無しさん
2009/05/07(木) 00:50:20前提は701のソースなんだが、上位2つが同じときとか、3つ全部等しいときに例外処理してるか?
お前がバカなのは十分わかったから少しだまってろよw
0752デフォルトの名無しさん
2009/05/07(木) 00:52:21前提は >>701 の問題文であってソースは前提ではないな。わかるか?
0753デフォルトの名無しさん
2009/05/07(木) 00:54:2750レスか。低学歴馬鹿にするのもたまにはいいな。みんなごめんねwww
0754デフォルトの名無しさん
2009/05/07(木) 00:55:290755デフォルトの名無しさん
2009/05/07(木) 00:58:15数は数。何の提示も示唆もないのに数値が生徒情報その他とリレーションを持ってるケースを
想定して曖昧だなんて アフォ も良いとこ。厨二プログラマにありがちな解釈の暴走だな。
0756デフォルトの名無しさん
2009/05/07(木) 00:59:430757デフォルトの名無しさん
2009/05/07(木) 01:02:140758デフォルトの名無しさん
2009/05/07(木) 01:11:24> 数は数。
>>739 の前半の解答を紙に書いてみて。
たぶん必死になってるのは一人だと思うが、
- 自分勝手な暗黙の了解を仮定する
- 条件提示がない場合に自分に都合のよい選択肢を選ぶ
- 例外は考えない
社会に出たら、デスマーチへようこそ、ですよw
じゃあね
0759デフォルトの名無しさん
2009/05/07(木) 01:14:59必死になってやろうとするのもアホだよなぁw
0760デフォルトの名無しさん
2009/05/07(木) 01:15:120761デフォルトの名無しさん
2009/05/07(木) 01:20:17底辺コーダーがデスマーチのしすぎで脳が破壊されたか?w
0762デフォルトの名無しさん
2009/05/07(木) 01:20:38バカかこいつ
0763デフォルトの名無しさん
2009/05/07(木) 01:21:24本人は他人の振りができてると思ってるんだから、そっとしといてやれよw
0764デフォルトの名無しさん
2009/05/07(木) 01:35:30- 自分勝手な暗黙の了解を仮定する
>「m個の中の上位n個を選択する」というより一般化した解答を書けってことじゃないの?
- 条件提示がない場合に自分に都合のよい選択肢を選ぶ
> 前提は >>701 の問題文であってソースは前提ではないな。
- 例外は考えない
> たぶん必死になってるのは一人だと思うが、
社会に出てからずっとデスマーチやってるんだろうなこの人。
0765デフォルトの名無しさん
2009/05/07(木) 01:37:19#include <boost/tuple/tuple_io.hpp>
#include <iostream>
boost::tuple<int, int, int> sort3(const int x, const int y, const int z) {
int x_ = x, y_ = y, z_ = z;
if (x_ > y_)
std::swap(x_, y_);
if (y_ > z_)
std::swap(y_, z_);
if (x_ > y_)
std::swap(x_, y_);
return boost::make_tuple(x_, y_, z_);
}
boost::tuple<int, int> midHigh(boost::tuple<int, int, int> const& arg) {
return boost::make_tuple(arg.get<1>(), arg.get<2>());
}
int main() {
int x = 214, y = 88, z = 13;
// std::cin >> x >> y >> z;
std::cout << midHigh(sort3(x, y, z)) << std::endl;
}
こんなんでいいんじゃないっすかね
0766デフォルトの名無しさん
2009/05/07(木) 02:14:42おまいは「同値が含まれる場合の『上から2つ』があいまい」、例えば (a=2,b=1,c=2) の時に
(2,2) を出せば良いのか (2,1) を出せば良いのか不確定と言いたいのだろうけど、問題は「『3つの
入力値の中から』上2つ」だから (2,2) で良い。
「仕様が曖昧だから作れない!」って言いたいだけのお年頃か知らんが、含みを持たせるならもっと
サプライズがないとバカが出し惜しみしただけにしか見えないぞ。
0767デフォルトの名無しさん
2009/05/07(木) 02:27:340768デフォルトの名無しさん
2009/05/07(木) 02:41:030769デフォルトの名無しさん
2009/05/07(木) 02:44:32> 3つの数を入力してその中で大きい二つの数を表示するプログラムを作りたいのです。
1つ目の数を入力したら、2だった。
2つ目のは4だった。
ここまでで、4は出力されることが決まった。
3つ目の数が5なら、2は出力されない。
3つ目の数が3なら、2は出力されない。
3つ目の数が4なら、2は出力されるかされないか。
0770デフォルトの名無しさん
2009/05/07(木) 06:47:43帰れ
0771デフォルトの名無しさん
2009/05/07(木) 07:36:56必死すぎてワラタ
0772デフォルトの名無しさん
2009/05/07(木) 07:52:33>>766
まあ一人なのかもしれないが、こいつほんと馬鹿だなw
> 問題は「『3つの入力値の中から』上2つ」だから
勝手に読み替えちゃだめだろう。お前の脳がサプライズだよ。
問題は『3つの数を入力してその中で大きい二つの数を表示する』だ。
3つの入力値の中からとは書いてない。
上で 「数は数」 とか抜かしてる奴がいたがそれに従えば
もし入力が 3, 3, 2 なら、
出力は数として上から二つとると 3,2 になってしまうな。
0773デフォルトの名無しさん
2009/05/07(木) 07:56:090774デフォルトの名無しさん
2009/05/07(木) 08:12:420775デフォルトの名無しさん
2009/05/07(木) 08:30:05フーン
で、それがどう情報科学や数学と
関係あったのか教えてもらおうか
0776デフォルトの名無しさん
2009/05/07(木) 08:33:08「3つの数を入力してその中で大きい二つの数」を選ぶのに、
3つの入力値の中からじゃないってのはどういう意味だ?w
0777?
2009/05/07(木) 08:38:270778デフォルトの名無しさん
2009/05/07(木) 08:50:35その点で言い争っても結論は出ない。
0779デフォルトの名無しさん
2009/05/07(木) 09:06:590780デフォルトの名無しさん
2009/05/07(木) 09:09:350781デフォルトの名無しさん
2009/05/07(木) 09:20:18って聞いて終わりだろ。
0782デフォルトの名無しさん
2009/05/07(木) 09:20:38で、>718はもう来ないのかな?
0783デフォルトの名無しさん
2009/05/07(木) 09:32:13だな。まずその疑問が出てこないとプログラマじゃない。
上は全部落第だよ。得意げな >>705 とか笑える。
0784デフォルトの名無しさん
2009/05/07(木) 09:55:03それじゃ、この辺りで模範解答を宜しく。
0785デフォルトの名無しさん
2009/05/07(木) 09:58:45#include <stdio.h>
void swap(int *a, int *b) {
int t;
t=*a,*a=*b,*b=t;
}
int sort3(int x, int y, int z) {
int t;
if(x>y) swap(&x,&y);
if(y>z) swap(&y,&z);
if(x>y) swap(&x,&y);
printf("%d %d %d\n", x, y, z);
}
int main() {
sort3(1,2,3);
sort3(2,1,3);
sort3(1,3,2);
sort3(3,1,2);
sort3(2,3,1);
sort3(3,2,1);
}
0786デフォルトの名無しさん
2009/05/07(木) 10:16:080787デフォルトの名無しさん
2009/05/07(木) 11:49:30#include <pstade/oven/dropped.hpp>
#include <iostream>
#include <pstade/oven/initial_values.hpp>
#include <pstade/oven/io.hpp>
#include <pstade/oven/identities.hpp>
int main()
{
namespace ov = pstade::oven;
int x = 0, y = 0, z =0;
std::cin >> x >> y >> z;
std::cout << (ov::initial_values(x, y, z)|ov::sorted|ov::dropped(1)|ov::identities) << std::endl;
}
ovenは素晴しい…
0788デフォルトの名無しさん
2009/05/07(木) 11:58:05なんか変態コードの一歩前見たなコードだな。
これってBoost?
0789デフォルトの名無しさん
2009/05/07(木) 12:01:23boostじゃなくね?名前空間もインクルードファイルもライブラリ名もboostにない物な気がする。
0790デフォルトの名無しさん
2009/05/07(木) 12:05:080791デフォルトの名無しさん
2009/05/07(木) 12:49:41パイプがちょっとイレギュラーな使い方のような印象。
0792デフォルトの名無しさん
2009/05/07(木) 12:59:15だから (a, b, c) = (3, 3, 2) の集合から値の大きい 2 つを選んでみろよw
勝手に読み替えちゃだめだろw
0793デフォルトの名無しさん
2009/05/07(木) 13:39:040794デフォルトの名無しさん
2009/05/07(木) 14:46:340795デフォルトの名無しさん
2009/05/07(木) 23:07:46インデントちゃんといれてくらはい
0796デフォルトの名無しさん
2009/05/07(木) 23:34:58というか701出てこいよ
0797デフォルトの名無しさん
2009/05/07(木) 23:51:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9141.txt
このプログラム中の、
(1) char (*p)[15]; はどういう意味(どういう意図のコード)でしょうか?
http://kmaebashi.com/programmer/pointer.html を見ると
pはcharの配列(要素数15)へのポインタである ということだと思うのですが、
いまいちイメージできません。解説をお願いします。
(2)p = (char (*)[15])malloc(num * 15); の(char (*)[15]) はどういう意味(どういう意図のコード)でしょうか?
解説をお願いします。
0798デフォルトの名無しさん
2009/05/08(金) 00:24:00これすげーな。
C++ でこんな関数型言語の真似ごとみたいなことが出来るのか。
ごてごてとした冗長さもC++らしいわw
まあ Ruby とかでやったら
irb> [x, y, z].sort.drop(1)
だけですんじゃうんだけどね。
0799デフォルトの名無しさん
2009/05/08(金) 00:34:01ああいうのはC++でやることに意義があるという構えでいないとやっていられないと思う。
0800デフォルトの名無しさん
2009/05/08(金) 00:37:11RanceExの一部として、そのうちBoost化されるのが決まっているらしい。
0801デフォルトの名無しさん
2009/05/08(金) 00:42:52とりあえずその参考書でイモでも焼いて、K&RかH&Sあたりのまともな
本を読むことをおすすめします。
0802デフォルトの名無しさん
2009/05/08(金) 00:58:31pは要素数15のchar型の配列へのポインタを表す
すなわち p++; とすると、pは +1 されるのではなく +15 される
0803デフォルトの名無しさん
2009/05/08(金) 02:05:130804デフォルトの名無しさん
2009/05/08(金) 02:23:440805デフォルトの名無しさん
2009/05/08(金) 03:32:34そして>>801は糞
0806デフォルトの名無しさん
2009/05/08(金) 05:48:30char p[num][15]; をヒープメモリに確保した。
「添え字に変数」 と 「ヒープメモリに確保」 の実現に malloc を使わない記述だと
実現困難か例よりさらに変体的に成る。
0807デフォルトの名無しさん
2009/05/08(金) 09:14:33日本語でおk
0808デフォルトの名無しさん
2009/05/08(金) 22:31:19>>806の日本語理解できないのか?(お前の日本語でおkよりはるかに良いぞ)
もし、そうならお前、ド低脳だぞ
0809デフォルトの名無しさん
2009/05/08(金) 22:36:42流れが面白いw
とりあえず806は意味不。
0810808
2009/05/08(金) 23:12:25ほんとに何を>>806が言っていることが分からないのか。
言っていることのどこが分らんのよ?たった、2行文だぜ
低脳の俺ですら言っていること分るんだが....
分らないなら、ゆとり丸出しだぞ。(ただ言っていることが正しいのか、低脳の俺には分らんが)
0811デフォルトの名無しさん
2009/05/08(金) 23:14:50きもいしw
0812デフォルトの名無しさん
2009/05/08(金) 23:21:580814デフォルトの名無しさん
2009/05/08(金) 23:27:540815808
2009/05/08(金) 23:31:010816デフォルトの名無しさん
2009/05/08(金) 23:31:260817812
2009/05/08(金) 23:38:23わからん。そもそも読む気にならないし俺がなんと言ってもアンチ意見が沸くだろうし。。
適当な落としどころをつけてくれよ。それでいいじゃないか。
0818デフォルトの名無しさん
2009/05/08(金) 23:41:120819デフォルトの名無しさん
2009/05/08(金) 23:41:40>どこが困難?
おまえの日本語だw
0820デフォルトの名無しさん
2009/05/09(土) 01:10:000821デフォルトの名無しさん
2009/05/09(土) 03:10:21inline uint16_t openusb_le16_to_cpu(uint16_t data); // 650行目
実体のない inline 関数は引数をそのまま返す仕様なんですか?
LE 機なんでバイト順序の入れ替えなしでも正しくは動くんですけど。
0822デフォルトの名無しさん
2009/05/09(土) 04:12:49C++で関数を作ったときに引数を省略する書き方があるとおもうんですけど
int型なら 引数xがあったときに x=0 と書いて置けば良いと思うのですが
自分で定義した構造体を引数にとる場合、それを省略させるためにはどのように書けばよいのでしょうか
例えば以下のような場合です.
?の所には何をいれればよいのでしょうか・・・
kansuu.h-----
typedef struct tagAAA{
int a;
int b;
}AAA;
void TEST( int x = 0, AAA Aaa = ? );
0823デフォルトの名無しさん
2009/05/09(土) 04:17:07それはさておいて、AAAのコンストラクタが許すものならなんでも書けます。
例えばデフォルトコンストラクタなら
AAA Aaa = AAA()
のように。
0824デフォルトの名無しさん
2009/05/09(土) 04:27:00ありがとうございました orz ぺこぺこ
関数内で計算したデータをほかでも使う必要がでてきて、構造体の形で取り出したかったもので
たまにしか使わないし、どうしようと思いながら・・・
こういう場合は他にもいい方法があるのでしょうかアウアウ
0825デフォルトの名無しさん
2009/05/09(土) 08:08:12>関数内で計算したデータをほかでも使う必要がでてきて、構造体の形で取り出したかったもので
おいおいAaaに結果を返すのか?
参照かポインタを渡さないと取り出せないぞ?
ポインタならデフォルト引数をNULLにしておいて、
関数内で判定してNULLなら使わなければよい。
それか素直にオーバーロードして、
void TEST( int x = 0, AAA& Aaa);
と
void TEST( int x = 0);
を作ればよい。
>こういう場合は他にもいい方法があるのでしょうかアウアウ
TESTが他の戻り値を返す必要がないなら、
AAAを返すのが一番自然だと思うぞ。
0826デフォルトの名無しさん
2009/05/09(土) 08:16:310827デフォルトの名無しさん
2009/05/09(土) 11:37:26それともその外で処理するべきでしょうか?
0828デフォルトの名無しさん
2009/05/09(土) 11:40:41>それともその外で処理するべきでしょうか?
それはつまりクラスのユーザーに処理を任せるって事でしょ?
いわば丸投げだよね。
もしそのメソッド内で処理できるんならそれが最高じゃない?
0829デフォルトの名無しさん
2009/05/09(土) 11:48:25指定されなければデフォルトのハンドラでメソッド内でcatchとか
0830デフォルトの名無しさん
2009/05/09(土) 13:28:48「bad_allocが発生しちゃうような場合でも、何とかして処理を正常に完了させることができる」
ような関数なら、bad_allocをcatchして適切に処理し、外に出さないことはできる。
でも、そんな芸当ができる関数は少ないと思う。
0831デフォルトの名無しさん
2009/05/09(土) 16:04:01そういうのに当たったことがない無知な俺に誰か教えてくれ
0832デフォルトの名無しさん
2009/05/09(土) 16:29:40・ヒープ上のキャッシュをクリアして再試行
0833デフォルトの名無しさん
2009/05/09(土) 16:38:38HP1(1プレイヤー体力)HP2(2プレイヤー体力)、kou1(1プレイヤー攻撃力)、kou2(2プレイヤー攻撃力)と設定しているつもりです
HP1からkou2を引き、その時に「1はkou2のダメージ!」などと表示させたいのです
ですが何も表示されないままプログラムが終わってしまいます。どうすればよいでしょうか?
cout<<"test";
を一行目に入れた場合はtestは表示されます。
forがどうしても分かりません・・ヒントだけでも教えてください、お願いします。
#include <iostream>
using namespace std;
int main()
{
int hp1, hp2,kou1,kou2,bo1,bo2,un1,un2;
hp1=100;
hp2=100;
kou1=50;
kou2=30;
bo1=40;
bo2=60;
un1=10;
un2=30;
for(int i=1; (hp1<=0)||(hp2<=0); i++)
{
hp1= hp1-kou2;
cout<<"1は"<<kou2<<"のダメージ!\n";
hp2= hp2-kou1;
cout<<"2は"<<kou1<<"のダメージ!\n";
}
return 0;
}
0834デフォルトの名無しさん
2009/05/09(土) 16:41:330835デフォルトの名無しさん
2009/05/09(土) 16:43:17検証してないけど。。。
0836デフォルトの名無しさん
2009/05/09(土) 16:43:560837デフォルトの名無しさん
2009/05/09(土) 16:49:33ああ、ありがとうございます!!
単純にforの始動条件()?勘違いしてました、吸いませんでした
0838デフォルトの名無しさん
2009/05/09(土) 16:51:02あ〜、らめ〜。
0839デフォルトの名無しさん
2009/05/09(土) 16:51:560840デフォルトの名無しさん
2009/05/09(土) 17:16:54OSによっては、newは成功するけど実際にメモリ使ってるときに落ちるって挙動になりそうな気がする。
0841デフォルトの名無しさん
2009/05/09(土) 17:33:39そんなOSでもアドレス空間が足りなくてbad_allocという展開を考えた。
0842デフォルトの名無しさん
2009/05/09(土) 19:34:35ということはコンストラクタ内でnewしないで、alloc()とかほかのメソッドを作っていちいち呼び出したほうがいいんでしょうか?
0843デフォルトの名無しさん
2009/05/09(土) 19:37:53うんそれが正しいw
0844デフォルトの名無しさん
2009/05/09(土) 19:41:010845デフォルトの名無しさん
2009/05/09(土) 19:52:34ってのが理由だった気がするんだけど、今でもそんな曖昧な仕様なの?
0846デフォルトの名無しさん
2009/05/09(土) 19:54:17確保に失敗する場合もあるしな
0847デフォルトの名無しさん
2009/05/09(土) 20:19:110848デフォルトの名無しさん
2009/05/09(土) 20:23:01ない
0849デフォルトの名無しさん
2009/05/09(土) 20:32:40の順序になるから、コンストラクタで例外が発生した場合、アロケートしたアドレスを
ロストして確実にメモリリークになる。
というのは Turbo C++ (96'頃) の知識なんだけど今の規格はどうか知らん。
0850デフォルトの名無しさん
2009/05/09(土) 20:50:02本とかだとmallocが多い気がするんだよな。
mallocのほうが処理が高速なのだろうか?
0851デフォルトの名無しさん
2009/05/09(土) 20:56:28クリアが必要ならそのあとmemsetすればいいだけだしな。
0852デフォルトの名無しさん
2009/05/09(土) 20:57:290853デフォルトの名無しさん
2009/05/09(土) 21:02:260854デフォルトの名無しさん
2009/05/09(土) 21:05:09C++でもmalloc/free使う方がいいよ
0855デフォルトの名無しさん
2009/05/09(土) 21:07:20問題点ってありますでしょうか・・
まずは、クラス、メンバー変数・関数を書いて、インターフェイスとして管理メンバー関数
を作ります。
上流では流れを分かりやすくして、処理は管理メンバー関数に委譲する書き方をします。
例えば、ひとつのオブジェクトのみ生成する必要がある際、
メンバー変数・関数は全てprivateで実装し、インターフェイスのみstatic publicにします。
インターフェイス内で自己classのオブジェクトを生成。既に生成されていれば既存の
オブジェクトを返す。
という様な使い方をしています。
0856デフォルトの名無しさん
2009/05/09(土) 21:08:2803ではコンストラクタでthrowされたとき、デアロケータが実行されるはず。
placement newの場合は各自で面倒見てください。
0857デフォルトの名無しさん
2009/05/09(土) 21:17:31なんでインタフェースがstatic?
0858デフォルトの名無しさん
2009/05/09(土) 21:31:44ただのsingletonパターンだろ
0859デフォルトの名無しさん
2009/05/09(土) 21:37:48インタフェースをstaticにする意味がわからん。
あと、管理メンバー関数というのも、どういうものなのかよくわからん。
0860デフォルトの名無しさん
2009/05/09(土) 21:39:05上でインターフェイス部分を羅列せずに、管理関数内部で一連の処理を行う。
というのは通常使用されるのか、また、自分としては見やすいというメリットが
あるのですが、デメリットもあるのかなと・・
一人で作ってる分には特に不便を感じないもので;
0861デフォルトの名無しさん
2009/05/09(土) 22:21:32再利用性を高めるためにはいいと思う
再利用なんて一生しないんだけどな!
0862デフォルトの名無しさん
2009/05/09(土) 22:39:20いまいちよくわからんが、オブジェクトを管理する機能と管理されるオブジェクトが同一クラスに入っている
ということであれば、オブジェクトを管理するクラスは管理されるオブジェクトと別のクラス
にするのが一般的。
0863デフォルトの名無しさん
2009/05/09(土) 22:43:52ありがとうございます。まさにその通りです;;
自分の中でもちゃんと纏まってないから駄目なんですね;;
なるほど、確かにその方がより良いですね。
その際に、継承するのか、オブジェクトを取り込むのかは
やはり状況しだいなんでしょうか。
0864デフォルトの名無しさん
2009/05/09(土) 22:54:55管理するオブジェクトは管理されるオブジェクトを持つ(has-a関係である)
と考えると、
普通は管理するオブジェクトの中に管理されるオブジェクトを持たせるはず。
0865しつもーん
2009/05/09(土) 22:57:26#include <iostream>
using namespace std;
template <class T>
class Test {
private:
T x;
T y;
public:
Test(T a = 0, T b = 0): x(a), y(b) {};
void getter();
};
template <class T>
void Test<T>::getter() {
cout << x << endl;
cout << y << endl;
}
int main() {
Test<int> a(2, 4);
a.getter();
return 0;
}
テンプレートクラスを使用するときは
Test<int> a(2, 4);
Test<double> d(4.0, 9.0);
みたいにクラス名の後に<型名>を指定する必要があります
これを指定しなかった場合はデフォルトでdoubleに汁にはどうすればいいですか?
0866デフォルトの名無しさん
2009/05/09(土) 23:01:470867しつもーん
2009/05/09(土) 23:12:46using namespace std;
template <class T = double>
class Test {
private:
T x;
T y;
public:
Test(T a = 0, T b = 0): x(a), y(b) {};
void getter();
};
template <class T>
void Test<T>::getter() {
cout << x << endl;
cout << y << endl;
}
int main() {
Test<> a(2, 4);
a.getter();
return 0;
}
クラス側と関数側両方に指定したらエラーになった
あとTest a(2, 4)もエラーになった
以下のようにしたらコンパイル通りました
(1)template <class T = double>はクラス側にだけ指定する
(2)宣言時はTest<>のようにしないと駄目(Testだけだとエラー)
で合ってますよね
0868デフォルトの名無しさん
2009/05/09(土) 23:17:31ありがとうございます。オブジェクト指向の基本で読みました;;
幾ばくかすっきりしました。
分かりにくい説明に答えて下さってありがとうございます。
0869デフォルトの名無しさん
2009/05/09(土) 23:42:24その通りだね
後残る手段はdoubleの特殊化しかない
この場合引数をちゃんと小数点を付けて指定しないと
うまくいかないかもしれないな
0870しつもーん
2009/05/09(土) 23:47:330871デフォルトの名無しさん
2009/05/10(日) 20:10:150872デフォルトの名無しさん
2009/05/10(日) 22:14:020873デフォルトの名無しさん
2009/05/10(日) 22:19:190874デフォルトの名無しさん
2009/05/10(日) 22:36:190875デフォルトの名無しさん
2009/05/10(日) 22:38:56C++98だって出ないと言われていたんだぞ
STLを仕様に取り入れた事で2000年超えると言われてたし
0876デフォルトの名無しさん
2009/05/10(日) 22:42:33short の身の振り方で 16bit または 32bit サイズの整数型がなくなっちゃいますよね?
16bit は wchar_t で代用するんですか?
0877デフォルトの名無しさん
2009/05/10(日) 22:42:44だから八進数でaは…
0878デフォルトの名無しさん
2009/05/10(日) 22:43:56なんのためにstdint作ったのか…
0879デフォルトの名無しさん
2009/05/10(日) 23:09:18Windowsなんかlongも32bitのままだぞ。
0880デフォルトの名無しさん
2009/05/10(日) 23:09:19来年はあり得ないね
0881デフォルトの名無しさん
2009/05/10(日) 23:28:470882デフォルトの名無しさん
2009/05/10(日) 23:39:34規格は固まるかもしれないがコンパイラがすぐには出ない
0883デフォルトの名無しさん
2009/05/10(日) 23:45:15割とスムーズに対応するんじゃないの?
0884デフォルトの名無しさん
2009/05/10(日) 23:47:240885デフォルトの名無しさん
2009/05/11(月) 00:20:27規格が出たらすぐにでも対応しそう
0886デフォルトの名無しさん
2009/05/11(月) 00:51:030887デフォルトの名無しさん
2009/05/11(月) 00:59:47最初はトランスレータで良いからさ。
0888デフォルトの名無しさん
2009/05/11(月) 03:18:39それはさておいて、もうすでにC(99)との互換性もないしなぁ。
0889デフォルトの名無しさん
2009/05/11(月) 03:25:160890デフォルトの名無しさん
2009/05/11(月) 09:17:43for文で順番に値を入れられるようにできたら良いなと思ったんですが、方法があったら教えてください。
0891デフォルトの名無しさん
2009/05/11(月) 09:20:460892デフォルトの名無しさん
2009/05/11(月) 10:13:10構造体のメンバーを最初から配列にするんじゃダメなの?
0893890
2009/05/11(月) 10:56:19すみませんいまいちわからないです・・・。
ttp://www.wdic.org/w/TECH/%E5%85%B1%E7%94%A8%E4%BD%93
のサイトの使用例のようにアドレスをビット単位で操作するために構造体になっていて、
2つのアドレスの上位4ビットずつの8ビットと
下位4ビットずつの8ビットでそれぞれ1つの動作をするようになっているんでまとめなおしたいんです
0894デフォルトの名無しさん
2009/05/11(月) 10:58:360895デフォルトの名無しさん
2009/05/11(月) 11:05:510896デフォルトの名無しさん
2009/05/11(月) 11:11:230897デフォルトの名無しさん
2009/05/11(月) 17:42:48結果は環境依存だから、K&Rとかではやっちゃらめってことになってるんだよね。
0898デフォルトの名無しさん
2009/05/11(月) 17:49:11struct S s;
fwrite(&s, sizeof s, 1, fp);
みたいな構造体をそのまま読み書きするのも、キモイから
やめてほしい。
CからC#にやってきて、C#はこれができないって憤慨してた
やつを見たことある。あほか。
0899デフォルトの名無しさん
2009/05/11(月) 17:55:560900デフォルトの名無しさん
2009/05/11(月) 18:40:20>>898 みたいなことは構造体の表現やエンディアンが固定なら
問題なくできるし、それができるのがCのうれしいところじゃない。
構造体を引数や返値とするのも、頑にいやがる人がいるよね。
コピーされるからだろうけど、あまりでかくなければコンパイラが
頑張ってくれて遅くならないんだけどね。
0901デフォルトの名無しさん
2009/05/11(月) 18:53:28昔のCでできないことをいやがる人ってどこにでもいる気がする。
古いコンパイラにも対応しなければならないのならともかく。
いいかげん、「ブロック内の変数宣言は文の後には書けない」
などと学生に教えるのはやめていただきたいものである>先生方
0902デフォルトの名無しさん
2009/05/11(月) 18:57:54自分の体重を入力すると月での実効体重を
計算し、表示するプログラムを作成してくだ
さい。
これ誰か組んでください↑
勉強してもまったく分りません
0903デフォルトの名無しさん
2009/05/11(月) 19:00:44宿題スレ行けよ。
0904デフォルトの名無しさん
2009/05/11(月) 19:07:48重力係数とかよくわからんが
0905デフォルトの名無しさん
2009/05/11(月) 19:09:26釣りだろ
釣りじゃないなら宿題スレ
0906デフォルトの名無しさん
2009/05/11(月) 19:11:44ttp://pc12.2ch.net/test/read.cgi/tech/1238087817/914
マルチか。
残念ながらここは友達居ない人が書き込むスレじゃないんで。
0907デフォルトの名無しさん
2009/05/11(月) 20:57:130908デフォルトの名無しさん
2009/05/11(月) 23:18:49バイナリ形式でデータやりとりする時には普通にやるけど。
構造体の内容からバイト配列を生成して、それを出力
とか面倒くさくてやってられない。
0909デフォルトの名無しさん
2009/05/11(月) 23:53:04たいしてめんどくさくないだろ。
もうすこし移植性に気をつかってほしいよ。
0910デフォルトの名無しさん
2009/05/12(火) 00:35:47padding や endian の問題を無視できるならそれも楽だよね。
0911デフォルトの名無しさん
2009/05/12(火) 00:36:54別のヘッダファイルに新しく構造体を宣言し、そのメンバとしてtypedefした
型を定義したんですが、型として認識してくれません
型名が必要だと言われます
どうすれば認識してくれるんでしょうか?
0912911
2009/05/12(火) 00:43:21申し訳ありませんでした
0913デフォルトの名無しさん
2009/05/12(火) 00:56:07ちゃんと第二のヘッダから第一のヘッダをインクルードしてるの? ぐらいしか言えない。
0914デフォルトの名無しさん
2009/05/12(火) 01:05:13付けときゃ良い。つかファイル形式は LE 固定で良い。
0915デフォルトの名無しさん
2009/05/12(火) 01:55:54C言語とC++、Java などの違いすらわかりません!
これだけは買っとけって入門書ありますでしょうか?
0916デフォルトの名無しさん
2009/05/12(火) 01:57:060917デフォルトの名無しさん
2009/05/12(火) 09:22:420918デフォルトの名無しさん
2009/05/12(火) 10:15:28どこにありますか?
0919918
2009/05/12(火) 10:47:140920デフォルトの名無しさん
2009/05/12(火) 12:59:550921デフォルトの名無しさん
2009/05/12(火) 13:39:07俺は作って覚えた。
既存のゲームを移植してみれば良いよ。テトリスとかさ。
ロジックは自分で考える。
0922デフォルトの名無しさん
2009/05/12(火) 16:05:11とりあえず
please_if
only_if
って二つのアルゴリズムの名前を思いついたのですが、肝心の機能をどうすればいいのやらさっぱりです。
この名前に見合うアルゴリズムはどういう動作をするように設計すべきでしょうか?
0923デフォルトの名無しさん
2009/05/12(火) 16:17:380924デフォルトの名無しさん
2009/05/12(火) 16:38:590925デフォルトの名無しさん
2009/05/12(火) 16:49:37今度からは先にアルゴリズムを考えるようにします。
ありがとうございました。
0926デフォルトの名無しさん
2009/05/12(火) 16:53:290927デフォルトの名無しさん
2009/05/12(火) 16:56:360928デフォルトの名無しさん
2009/05/12(火) 16:58:480929デフォルトの名無しさん
2009/05/12(火) 17:05:10ダサい状況になってるじゃん。
やっぱアルゴリズムで名前付けちゃいけないよ。
0930デフォルトの名無しさん
2009/05/12(火) 17:21:300931デフォルトの名無しさん
2009/05/12(火) 17:27:210932デフォルトの名無しさん
2009/05/12(火) 17:28:50この6つの文字列を1つのstd::list<string> abcefgにまとめたいのですが
std::string Getabc(int param)
std::string Getefg(int param)というGet関数から、パラメータに対応するabcdefを返させる
std::list<std::string> Getabc()
std::list<std::string> Getefg()を用意して二つのlistを連結させるか
void Getabc(std::list<std::string>* pList)
void Getefg(std::list<std::string>* pList)としてstd::list<string> abcefgを引数として渡してそこに詰めさせるか
どれがよいでしょうか?
0933デフォルトの名無しさん
2009/05/12(火) 18:40:54CMainとかを作って
try{
CMain *p;
p = new CMain;
p->run();
delete p;
}
catch(bad_alloc){
owata();
}
でいいんですかね?
それともクラスごとにいちいち終了処理を書くべきでしょうか?
0934デフォルトの名無しさん
2009/05/12(火) 18:51:020935デフォルトの名無しさん
2009/05/12(火) 19:00:16{
try {
...;
} catch (bad_alloc) {
owata();
}
return 0;
}
0936デフォルトの名無しさん
2009/05/12(火) 22:05:00LUMとかATALUとかな。
0937デフォルトの名無しさん
2009/05/12(火) 22:09:40HPは味方がmHP[n]、敵がtHP[n]と配列に格納していますが、
HP[n][m]などと多次元配列にし、mで敵/味方フラグを立てる感じの方が良いでしょうか
0938デフォルトの名無しさん
2009/05/12(火) 22:12:540939デフォルトの名無しさん
2009/05/12(火) 22:27:11もう一つ質問です。
ダメージの計算式は簡単に、HP-攻撃力とします。
mHP[n]、tHP[n]、mKO[n]、tKO[n](味方攻撃力、敵攻撃力とします)とあるとき、
if(順番が回ってきた物が味方である時)
tHP[n]-=mKO[n];
と全体の処理をifで括るのではなく、
( (順番が回ってきたのが味方である) ? mHP[n]:tHP[n] ) -= (順番が回ってきたのが味方である) ? mKO[n]:mKO[n] )
のように要所要所を条件演算子で判別させたほうが良いですよね?
日本語ばっかりで分かりにくくてすいません
0940デフォルトの名無しさん
2009/05/12(火) 22:30:21バランスが大事ですよ。
0941デフォルトの名無しさん
2009/05/12(火) 22:33:22とりあえず何か作ってみることにします
ありがとうございました
0942デフォルトの名無しさん
2009/05/12(火) 22:43:350943デフォルトの名無しさん
2009/05/13(水) 00:48:130944デフォルトの名無しさん
2009/05/13(水) 00:50:370945デフォルトの名無しさん
2009/05/13(水) 01:11:08なんと言う拷問
0946デフォルトの名無しさん
2009/05/13(水) 01:21:11C++やってオブジェクト指向ってなによ?ってのをやるのはいいと思うよ
いきなりC++は多分やめたくなると思う
本当はその前にアセンブラが入るともっといいと思うけど
0947デフォルトの名無しさん
2009/05/13(水) 01:25:22C++はオブジェクト指向しかできない言語ってわけではない。
0948デフォルトの名無しさん
2009/05/13(水) 01:43:59#include <iostream>
using namespace std;
class Animal {
public:
void speak(int n);
void speak(){cout<<"ギャー";}
};
void Animal::speak(int n){
for( ; n>0; n--)
speak();
}
class Dog : public Animal {
public:
// void speak(){cout<<"ワン";}
};
int main(void) {
Dog dog;
dog.speak(2);
}
0949デフォルトの名無しさん
2009/05/13(水) 01:50:14できると思うんだけどなんかエラー出るの?
0950デフォルトの名無しさん
2009/05/13(水) 01:51:51メソッドをオーバーライドすると、同じ関数名は全てオーバーロードが必要ですか?
#include <iostream>
using namespace std;
class Animal {
public:
void speak(int n);
void speak(){cout<<"ギャー";}
};
void Animal::speak(int n){
for( ; n>0; n--)
speak();
}
class Dog : public Animal {
public:
void speak(){cout<<"ワン";}
};
int main(void) {
Dog dog;
// dog.speak(2);
dog.speak();
}
0951デフォルトの名無しさん
2009/05/13(水) 01:53:55それは抽象クラスの純粋仮想関数だけ
0952デフォルトの名無しさん
2009/05/13(水) 01:57:52多態的なオーバーライドを行いたければ、Animalのspeakの宣言にvirtualを付ける。
virutal void speak();
>>950
混乱を防ぐため、Dogのspeak()によって、Animalのすべてのspeakは隠蔽される。
class Dogの中でusing Animal::speak;と書くと、dog.speak(2);もコンパイル可能となる。
0953>>948 = >>950
2009/05/13(水) 02:30:12Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
エラー E2227 test.cpp 22: Dog::speak() の呼び出しに余分なパラメータがある(関数 main() )
*** 1 errors in Compile ***
>>950 純粋仮想関数を持つクラスを抽象クラスと呼ぶでしたか?
勉強します。
>>952 有難うございます。
public:の後ですね、using Animal::speak;
0954>>948 = >>950
2009/05/13(水) 02:35:38#include <iostream>
using namespace std;
class Animal {
public:
void speak(int n);
// void speak(){cout<<"ギャー";}
virtual void speak() = 0;
};
void Animal::speak(int n){
for( ; n>0; n--)
speak();
}
class Dog : public Animal {
public:
using Animal::speak;
void speak(){cout<<"ワン";}
};
int main(void) {
Dog dog;
dog.speak(2);
dog.speak();
}
0955しつもーん
2009/05/13(水) 05:41:460956デフォルトの名無しさん
2009/05/13(水) 06:31:56大抵は、後片付け処理が入る。
0957しつもーん
2009/05/13(水) 06:50:23最も短いプログラムで例文を書いてくれると嬉スィ
0958デフォルトの名無しさん
2009/05/13(水) 07:17:030959デフォルトの名無しさん
2009/05/13(水) 07:19:41プログラム終了時に終了処理を走らせたいときとか。
0960デフォルトの名無しさん
2009/05/13(水) 12:29:19どんくらいである程度覚えられんだ
0961デフォルトの名無しさん
2009/05/13(水) 12:31:45なんの本かはわからないけど、C++でclassまで覚えるのに人にも
よるが半年ほどかかると思う
templateまで完全に覚えるとなるとこれは年単位だな
0962デフォルトの名無しさん
2009/05/13(水) 12:59:00C++のクラスの必要性に疑問視を抱くはず
0963デフォルトの名無しさん
2009/05/13(水) 13:01:59疑問視は抱けない
0964デフォルトの名無しさん
2009/05/13(水) 13:08:380965デフォルトの名無しさん
2009/05/13(水) 13:10:04○疑問を抱く
0966デフォルトの名無しさん
2009/05/13(水) 13:30:50>Cにどっぷり漬かってる期間が長ければ
デストラクタや例外、void* 等の弱い型付けに頼らない
安全なカプセル化手法等が欲しい、と思う局面は
幾らでもあった筈。
0967デフォルトの名無しさん
2009/05/13(水) 13:42:09Cにどっぷりつかると、
class使わなくてもオブジェクト指向プログラム組むようになるから
っていうのなら同意。
0968デフォルトの名無しさん
2009/05/13(水) 13:44:35一理あるが、カプセル化は厳密では無いが
近い事をCの関数や構造体のみでも実装は出来るでしょ
俺は最初classの必要性に?を感じてたけど、今では使いまくってるよ
0969デフォルトの名無しさん
2009/05/13(水) 13:45:05禿がCのプログラマの不満を解消するために作った言語だからな
ただtemplateだけはどう考えても趣味っぽいけど
0970デフォルトの名無しさん
2009/05/13(水) 13:46:43元々templateは関数マクロを撤廃するために作られたもの
これがクラステンプレートが出てきた頃から怪しくなった
0971デフォルトの名無しさん
2009/05/13(水) 13:49:120972デフォルトの名無しさん
2009/05/13(水) 13:55:59どうだろうねえ禿げてたんじゃねーの?w
しかし言語仕様にSTLを入れた事でPL/I並みの巨大さに
なっちまってプログラマが尻込みしてるしな
皆JavaやPHPやスプリクト言語に逃げた
0973デフォルトの名無しさん
2009/05/13(水) 13:57:33C++のほうがまだ小回りが利く。
0974デフォルトの名無しさん
2009/05/13(水) 14:01:53Javaみたいに、全クラスを Object みたいなクラスのサブクラスにする発想は以前の言語からあったが、
コンテナが Object を格納するとなると、取り出すときにダウンキャストが必要になったりして嫌だから
テンプレート機能を作った、ってのがテンプレート誕生のきっかけだったはず。
テンプレートがいろいろアレな方向にも使えるねって話が出てくるのは、その後の話。
0975デフォルトの名無しさん
2009/05/13(水) 14:04:18それで、Cをベースにしてクラス機能を導入したらどうか?って方向に行ったんでしょ。
「Cのプログラマの不満を解消」ってのは少しずれてる。
0976デフォルトの名無しさん
2009/05/13(水) 14:05:360977デフォルトの名無しさん
2009/05/13(水) 14:18:32できると称して、そういうテクニックを披露してるやつがよくいるけど、
つかえそうなのは、抽象データ型くらいまでで、継承とか多態まで
いくと、それってムリがあるだろってツッコミいれたくなるような
感じのばっかり。
ああいうのマに受ける初心者がいるから、広めるのはやめてほしい。
0978デフォルトの名無しさん
2009/05/13(水) 14:34:17多態に関しては関数ポインタで実現。
0979デフォルトの名無しさん
2009/05/13(水) 14:43:110980しつもーん
2009/05/13(水) 14:54:40--(practice.cpp)--
#include <iostream>
//#include <typeinfo> <-あってもなくても結果は同じみたいだ
class Test {
};
int main() {
int a;
double b;
Test t;
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(b).name() << std::endl;
std::cout << typeid(t).name() << std::endl;
return 0;
}
(結果)
i
d
4Test
なんで、
int
double
Test
にならないんだ!?
0981デフォルトの名無しさん
2009/05/13(水) 15:09:44VS2008での実行結果
int
double
class Test
0982デフォルトの名無しさん
2009/05/13(水) 15:11:14http://ml.tietew.jp/cppll/cppll/article/5705
型名が返るとは限らないみたい。
0983しつもーん
2009/05/13(水) 15:21:34i
d
4Test
のi、dは頭文字だと予想出来るが、Testの前は何なんだろう?
解釈可能?それとも全く意味不明?
0984デフォルトの名無しさん
2009/05/13(水) 15:30:22で、数字は名前の文字数。
0985デフォルトの名無しさん
2009/05/13(水) 15:30:32クソ設計になっていると思うが
その点は大丈夫か?
>>983
> 俺はマック+g++だが、OSに依るのだろうか?コンパイラに依るのだろうか?
いやだから実装に寄るんだろ。
例えば同じOSと同じコンパイラだとしても
絶対に同じ文字列が返るとは言い切れないんじゃない?
0986デフォルトの名無しさん
2009/05/13(水) 15:35:50実際に何がしたいのか分からんが、
TMPのデバッグ中に型名を確かめたいときは
abi::__cxa_demangle()が役に立つかもしれない。
0987しつもーん
2009/05/13(水) 15:44:39ではそろそろ寝ます。おやすみ
( ゚o゚ )オ(゚▽゚)ヤ( ゚・゚ )ス(゚━゚)/~ミー
0988デフォルトの名無しさん
2009/05/13(水) 15:44:53typeidは違う型はname()が絶対に違う、という事だけしか
規格票では保証されていないな
0989しつもーん
2009/05/13(水) 15:46:400990デフォルトの名無しさん
2009/05/13(水) 16:20:09どこを修正すればいいかおしえてください もう2日寝てません
#include <iostream>
template <class T = double>
class Test {
private:
T x;
T y;
public:
Test (T a = 0, T b = 0): x(a), y(b) {}
friend std::ostream& operator << (std::ostream&, Test);
};
template <class T>
std::ostream& operator << (std::ostream& stream, const Test<T>& a) {
stream << a.x << " + " << a.y << "j\n";
return stream;
}
int main() {
Test<float> t1(4, 7);
std::cout << t1;
return 0;
}
0991デフォルトの名無しさん
2009/05/13(水) 16:29:420992デフォルトの名無しさん
2009/05/13(水) 17:17:09#include <iostream>
template<class T> class Test;
template<class T> std::ostream& operator << (std::ostream& stream, const Test<T>& a);
template <class T = double>
class Test {
private:
T x;
T y;
public:
Test (T a = 0, T b = 0): x(a), y(b) {}
friend std::ostream& operator << <>(std::ostream&, const Test<T>&);
};
template <class T>
std::ostream& operator << (std::ostream& stream, const Test<T>& a) {
stream << a.x << " + " << a.y << "j\n";
return stream;
}
int main() {
Test<float> t1(4, 7);
std::cout << t1;
return 0;
}
0993デフォルトの名無しさん
2009/05/13(水) 17:20:09>>990
こうfriend宣言するとコンパイルして実行までいける。
template<class U>
friend std::ostream& operator <<(std::ostream& stream, const Test<U>& a);
http://msdn.microsoft.com/en-us/library/f1b2td24.aspx
UではなくTのままでもVC++ではコンパイルできるが、
g++では外側のTと被ると怒られる。
0994デフォルトの名無しさん
2009/05/13(水) 17:39:01BCCだとコンパイラの内部エラーだと
腐ってる
0995デフォルトの名無しさん
2009/05/13(水) 18:19:11俺も昨日CUDAのコンパイラがcatastorophe errorとか吐いて落ちたからな。
0996990
2009/05/14(木) 01:52:38出来るようになりました。有り難うございました。
猿真似的に実行出来るようになりましたが、内容が理解できてません。
なぜテンプレートクラス内に別のテンプレートの宣言(Tとは違うU)が必要になるのでしょうか?
0997デフォルトの名無しさん
2009/05/14(木) 02:39:03実は990のコードを実行可能にする方法はもう1つある。
friendの中のTestをconst Test&にして外でこんな関数を作る。
std::ostream& operator << (std::ostream& stream, const Test<float>& a) {
stream << a.x << " + " << a.y << "j\n";
return stream;
}
>>993では、template<class U>によってoperator <<が関数テンプレートだと解釈された。
無いと上のようにテンプレートでない関数と解釈される。
ここを見てそうだと思った(ちょっと書いてあること違うけど)。
http://www.fides.dti.ne.jp/~oka-t/cpplab-template-1.html
このコードも今となっては駄目だったが。
0998デフォルトの名無しさん
2009/05/14(木) 11:16:550999デフォルトの名無しさん
2009/05/14(木) 11:17:361000小倉優子 ◆YUKOH0W58Q
2009/05/14(木) 11:18:3010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。