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


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

C/C++小心者スレッドPart1



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す 
 ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、コンパイラ名)
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ 
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


宗教的な話題は禁止します。


496 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:04:41 ]
一番考えられるのは、測定ミスだな

釣りじゃないなら、Nの値と処理A,Bの内容を示せよ
あと時間測定の方法も

497 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:09:04 ]
Windowsなら SetPriorityClass()、QueryPerformanceFrequency()、
QueryPerformanceCounter() を使って自動的に測定させればよい

SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて
測定値にバラツキが出るのを防ぐため

測定後に元に戻しておかないと大変な事になる(再起動)

498 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:44:19 ]
>>494
どっちかのループでSSEが効いたんじゃない?

499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:00:21 ]
C++でコードを書いていて引数にとったクラスにメソッドを適用する
関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。
デバッグプリントを追加して、メソッドが呼ばれている事や、
メソッドによってprivate変数が変更されている事を確認したのですが。
その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。
適切に変更したいのですが、よろしくお願いします。
OS:MacOSX 10.6
Compiler: g++ 4.2.1

よろしくお願いします。

500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:05:43 ]
>>499
引数の型はなにかね?

501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:19:33 ]
メソッドの引数ですか?
独自で作ったHogeクラスのインスタンスです。
void FooBar (Hoge x)
{
x.SetX(10);
}

みたいな感じで使っています。
Hoge baz;
FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!!
baz.GetX() //なぜかここの返り値がもとのXのまま

といった感じです。


502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:23:54 ]
そりゃbazの変数が変わったように見えてるだけで、実際変わったのはxの変数だ。
bazとxのアドレス確認してごらん。

503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:26:00 ]
なるほど、関数はHogeインスタンスのポインタを引数にとるようにし、
bazのポインタを引数に渡せばいいという事でしょうか?


504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:53 ]
ポインタでもいいし、C++だと参照ってのもあるから好きなほうを使えばおk。



505 名前:デフォルトの名無しさん [2009/10/23(金) 09:01:30 ]
負の値も含めて四捨五入する方法を教えてください

506 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:22:17 ]
std::vector<int> vA;
std::vector<int> vB;

// vAに値をpush_back

vB.reserv(vA.size());
std::copy(vA.begin(), vA.end(), vB.begin());


としたときに vB.size() でサイズを取得するには何か細工が必要ですか?

507 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:23:42 ]
>>505
tech.ckme.co.jp/cpp/cpp_round.shtml

508 名前:506 mailto:sage [2009/10/23(金) 10:42:22 ]
すみません解決しました

509 名前:デフォルトの名無しさん [2009/10/28(水) 05:31:06 ]
Windowsで実行ファイルのディレクトリを取得する方法を教えてください

510 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:06:03 ]
WinAPIスレにでもどうぞ。
それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか
「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。

511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:00:44 ]
後者は普通カレントディレクトリと呼ぶだろ

512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:41 ]
実行ファイルを起動したときのディレクトリのことをカレントディレクトリと呼ぶだって?
やめてくれないか。

513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:00:36 ]
>>509
GetModuleFileName
_fullpath
とか、使って

514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:42:32 ]
>>512
「実行ファイルを起動したときのカレントディレクトリ」と言いたいのだと思う。



515 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:13:32 ]
/usr/bin/ls

516 名前:デフォルトの名無しさん [2009/10/30(金) 03:42:49 ]
デフォルトのコピーコンストラクタは
ビットコピーをすると教わりましたが

stlコンテナを含む自作クラスについて
それをすると問題が起こりませんか?
大丈夫ですか?

代入してスコープ抜けるとき
コピー先の奴が元のを破棄してしまいませんか?

517 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:50:35 ]
>>516
> デフォルトのコピーコンストラクタは
> ビットコピーをすると教わりましたが

それは、うそだ。

518 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 06:57:24 ]
>>517
では全てのメンバオフジェクトに
operator=を適用するのですか?

519 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:38:15 ]
>>518
コピーコンストラクタならコピーコンストラクタ。
operator= なら operator= 。

520 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:40:49 ]
>>519
アハ!悟った!
あり^^

521 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:43:32 ]
すみません。計算式についてなのですが

long a = 3210;
double b = 23.456789;
long y = (a*3.1415) - (b+10.5) * 6.28;

例えばこうやって変数yを求めた場合、
「計算の為に見えない変数が確保され、メモリを消費する」という現象は起きるのでしょうか?
もしそうだとするならば、

long a = 3210;
double b = 23.456789;
double c = a*3.1415;
double d = (b+10.5) * 6.28;
long y = c - d;

こうやって(計算式がもっと長ったらしい場合)コードの可視性を良くしておいても
メモリ消費や、処理の負荷は変わらなかったりするのでしょうか?
それとも何かルールが有るのでしょうか。

「このURL読んで来い」とかだけでも何でも構いませんので、
情報を教えて頂けると助かります、よろしくお願いします。 orz

522 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:47:34 ]
>>521
気にするな、コンパイラは善きに計らってくれる。

523 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:50:51 ]
>>521
どうしても気になるなら、(最適化ありで)コンパイラにアセンブリ出力を出させて較べてみればいい。
>521が全てなら、恐らくはyが即値で得られるだろう。

524 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:51:29 ]
>>522-523
アセンブリ出力・・やってみて確認してみようと思います。
ありがとうございました。 orz



525 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:05:01 ]
すみません。
「整数同士の割算」の結果が「整数のみ」か「少数を含む」かを見分ける時、
今はintとdouble2つの割算をし、それらが等しいかif判定しているのですが
もっとスマートな方法をご存知な方はいらっしゃられないでしょうか?

526 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:40:57 ]
if(a%b==0)

527 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:12:31 ]
割り切れるかどうかってこと?
あんまりこういうこと言うスレではないかもしれんけど、正直、一瞬で>>526
浮かばないようだとヤバくね?

528 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:04:09 ]
そりゃ人によるでしょ。C/C++勉強し始めてすぐならしょうがない。
仕事でC/C++使ってる人間なら確かにヤバい。


529 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:17:26 ]
>>526-528
成る程。何か効率化の方法が有りそうだとは思ってたのですが
526の式にピンとこず、実際数値を当てて試してやっと理解できました。
アマチュアだけど、センスがないなぁ・・自分。
ありがとうございました。

530 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:31:50 ]
%を知らなかった(か、見たことはあるけど使ったことがなかった)のか?

531 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:37:13 ]
>>530
いえ。知っていてほんの数回は使っていたんですが、実際に余った数値そのものが欲しい時ばかりでした orz
普段少数しか扱ってなくて、余り=何かの数値 という先入観が強かったのも有るかもしれません。

ピンと来れず申し訳ないです。 orz

532 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:09 ]
まぁ謝ることではない

FuzzBuzz問題を解けないのが普通、って話も少し実感できた

533 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:49 ]
FizzBuzz問題だった

534 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:27:57 ]
まぁこういうのはセンスよりも経験だから
積めばそのうちピンと来るようになるさ



535 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:07:57 ]
代入演算子=がオーバーロードされているBaseクラスを
public継承したDerivedクラスがあり、
そのDerivedクラスは代入演算子=をオーバーライドしてあります。

そんなDerivedクラスのコンストラクタ中で、
@*this=100;
Athis->operator=(100);
Boperator=(100);
CBase::operator=(100);
これらはして良いコードでしょうか?



536 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:55:29 ]
>>535
1〜4のどれもコンパイルエラーにならないんで、あとはやりたいことを
書いてもらわない限りはそれ以上の良し悪しを判断できない。

537 名前:535 mailto:sage [2009/11/18(水) 06:13:06 ]
>>536
ありがとうございます。
コンストラクタ中で、thisポインタや代入演算子を使用しても大丈夫なのでしょうか?
ということが伺いたかったのです。


538 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:31:52 ]
>>537
同じじゃねーか馬鹿。

コンパイルは通る。一定の動作もする。
「大丈夫」かどうかは、少なくともその動作が期待している動作と合致するかどうかによる。
今のところ期待している動作は不明。したがって判別不能。

539 名前:537 [2009/11/18(水) 20:03:46 ]
仕様上未定義の動作でないことが分かれば大丈夫です。
ありがとうございました。

540 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:21:25 ]
条件によっては未定義動作も有りうるって言われてるんじゃないの?

541 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:39:59 ]
質問です
10×10のマス目を「0,1,2」で埋める。使わない数字があっても可
それを例
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
と言うテキストファイルで出力したい。ファイル名は連番。
すべての可能性を(回転して同一等を排除しない)出力するためのプログラムって
どうやって書いたらいいんでしょうか??

見当が付きません。

542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:45:00 ]
3^100 ≒ 5.15×10^47通り全部書き出す気?

543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:05 ]
3~100になるんですか……
100~3だと思ってた…………

えらいことになりますね。

544 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:07:30 ]
>>541 のお陰で、STL に next_combination がないことに
今頃気付いた。



545 名前:541 mailto:sage [2009/11/19(木) 20:45:31 ]
少しアプローチの仕方を変えてみようかな
まず10桁の数字を「1,2,3」で埋める。使わない数字があっても可

これなら3^10=59049個で、一つずつファイルに出力は厳しいけど
一覧で表示だけならできそうだ。

1111111111〜3333333333
までの数字で「0,4,5,6,7,8,9」を含む物を削除ってほうがわかりやすいのかな。

まぁそのあとどうやって縦に10桁並べるのかよくわからんけどww



546 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:10:34 ]
質問ですstd::string クラス文字列の内容ををchar型配列に移すときに

      char *text;
      string str ="testtxt";
      int i=0;
      int len = str.length();
      text = new char[len];
      while(i<len){
            text[i] = str.at(i);
            i++;
      }

こうしたんですがもっとこう単純で綺麗に出来ないものでしょうか?

547 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:44:51 ]
>>546
whileの代わりにstd::copy(str.begin(), str.end(), text);とかstd::memcpy(text, str.data(), len)とか。
ところで、'\0'の終端がなくていいの?

548 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:32:49 ]
いいんです。あったら上司に怒られます。

549 名前:デフォルトの名無しさん [2009/11/20(金) 01:19:51 ]
質問です。
ループ中の変数 j をファイル名としてテキストファイル"1.txt"〜"8.txt"を
どんどん新規作成していきたいのですが、
「f.open(ji,ios::out)の第一引数は const char*だカス」と怒られます。
こういう場合はどのように行うのでしょうか?

自分で書いてみたものを張ります。
for(int i=0;i<9;i++){
char t_char[10];
sprintf(t_char, "%d", j);
string ji = "";
ji += t_char;
ji += ".txt";
fstream f;
f.open(ji,ios::out)
f.close();
}

550 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:43 ]
>>546
std::vector<char> text(str.begin(), str.end());

551 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:23:37 ]
>>549
ji.c_str()

552 名前:デフォルトの名無しさん [2009/11/20(金) 01:33:49 ]
>>549
f.open(ji.c_str(),ios::out) かな

553 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 03:14:37 ]
>>547
>>550
ありがとうございます!

554 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:02 ]
>>549
sprintf(t_char, "%d.txt", j);
fstream f;
f.open(t_char,ios::out)




555 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:18 ]
>>551
>>552
>>554
ありがとうございます!!

556 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:20:28 ]
Shift-JISの場合は
char*型 strlen strcpyなどを使いますよね?
UTF-8を扱う場合の変数型や文字列処理の関数はどうなりますか?

557 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:35:29 ]
基本的に、strをwcsに置き換えればOK

558 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:42:03 ]
UTF-8ってShift-JIS同様マルチバイト文字ではないのですか?
UNICODEはワイド文字で、UNICODEとUTF-8は別物ですよね?

559 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:44:23 ]
>>557
それはおかしい。
UTF-8はマルチバイト文字に分類される。
UTP-8を直接扱うときはcharとそれを扱う関数を使って問題ない。

560 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:53:17 ]
えー。UTF-8というのはUnicodeのエンコード方式のひとつです。
Unicodeというのはいっぱいある文字を一覧表にしただけだと思ってください。
その一覧表をコンピュータでどのように表現するか、
2バイトで1セットとするコードを使うとか、
4バイトで1セットとするコードを使うとか、
最初の方は1バイトで、大部分は2バイトだけど、いい具合に3バイトとするコードを使うとかetc、etc…
そういうなかのひとつがUTF-8です。UTF-8は可変長バイトです。

Unicodeを扱う場合、localeを正しくセットした上で、
wchar_tとwchar_tを処理するライブラリを使います。

ただし、UTF-8が本当に使えるかどうかは
コンパイラしだいです・・・。

561 名前:556=558 mailto:sage [2009/11/22(日) 01:55:15 ]
>>559
UTF-8を扱うときはShift-JISと同じように扱って大丈夫なんですね。
ありがとうございました。

562 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 03:26:17 ]
>>560
UTF-8を単なるバイト列と見なして入力・処理・出力するだけなら、
単なるバイナリデータと同じchar型で扱って何の問題もない。
そのデータ中に'\0'が現れなければ、strlenやstrcpyはうまく動く。
普段使っているマルチバイト文字と改行の扱いが同じならテキストモードでのファイル読み書きもうまくいく。
ここまでlocaleの出番無し。

もちろん、この状態を「本当に使える」と言わないと主張するならそれに賛成するよ。

563 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 04:07:31 ]
>>562
UTF-8はASCII互換部分があるからそういうことができるのかな。
いまいちこの辺はよくわからんです*_*

564 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:05:16 ]
UTF-8は外部インターフェース用と考えた方が良い
直接文字列操作するなんて考えたくない



565 名前:デフォルトの名無しさん [2009/11/23(月) 15:09:23 ]
C言語の質問です。

C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時
はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。

そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。
ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。

プログラミング環境は、
・Borland C++ Compiler 5.5.1
・Microsoft Visula Stdio 2005
の二つあります。

どうぞお願いします

566 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:13:31 ]
いや別にコンソール使わなくてもいいと思うけど

567 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:19:55 ]
オセロ

568 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:29:16 ]
ウィンドウ出す方法でも勉強したらいいんじゃね

569 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:58:24 ]
>>564
ハァ?

570 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 20:47:18 ]
>>569
俺も>>564は普通に当然だと思うが

571 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:21:03 ]
>>565
テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない?
昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし

572 名前:565 mailto:sage [2009/11/23(月) 21:50:09 ]
>>566
おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・
窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m

>>567
なるほど!いいですね
次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね!
ありがとうございました

>>568
ぐ、やはりWindowsプログラミングですかね、
とりあえずこのソースを打ち込め!的なページを見てみます

>570
テトリスですか!いいですね、、、
mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます!
ありがとうございました

573 名前:デフォルトの名無しさん [2009/11/24(火) 00:20:57 ]
CとC++の違いをお願いします。
また、
www.amazon.co.jp/gp/product/4797349816/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=0X37K4K5C7P745SGFKF4&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986
この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか

574 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:50:20 ]
どうみてもC
VC++はCも扱える



575 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:04:41 ]
どう見てもC


初心者の俺がもってるイメージとしては

c = 関数関数関数関数
cpp = c + クラス他

576 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:07:32 ]
言語仕様としては間違ってなくもないけど
実際のコーディングがまったく違うよ。

577 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:49:14 ]
C++を有る程度使えるようになってから
このまえCだけで全部つくる必要がでたときすごくとまどったな

なんつっても文字列操作が…

578 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 23:00:39 ]
いつかC++のクラスやSTLが突然使えなくなる日が来るんじゃないかと思ふことがある

579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:24:14 ]
〜ヘッダ〜
class BBB;
class AAA{
  BBB *processor;
  void do();
}
〜ソース〜
AAA::do(){
  BBB &processor = *(this->processor);
  processor.execute();
}

プログラミングの出来る友達のソースを見たらこのような記述がありました。
このようにするメリットって何があるのですか?
友達にも聞いたのですが、いまいち理解できませんでした。

580 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 03:24:18 ]
いわゆるpimplだな。
他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。

AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと
ならない。プライベートメンバでも何でも。
でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに
なる。
だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を
置く。ポインタなら中身が分からなくてもサイズは確定するから。
で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。

581 名前:デフォルトの名無しさん [2009/11/29(日) 05:28:36 ]
下のプログラムで、なぜかswitchのところでひっかかってしまいます。原因は何でしょうか。
プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。

int suuji;
suuji = rand() % 5 ;
printf("\n\n\n\nテストプログラム1\n");
switch (suuji)
{
case '0' :
printf("\nCASE 0");
break;
case '1' :
printf("\nCASE 1");
break;
case '2' :
printf("\nCASE 2");
break;
case '3' :
printf("\nCASE 3");
break;
case '4' :
printf("\nCASE 4");
break;
}
return 0;

582 名前:581 [2009/11/29(日) 05:30:54 ]
頭にくる
int main(void)
がぬけてました。

また、ひっかかるというのは表示されないということです

583 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 06:40:40 ]
suuji = rand() % 5 + 0x30;

これで^^

584 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 08:38:50 ]
やべえ俺>>583を見てもなお引っかかっちまった
文字'0'(ASCIIコード0x30)と比較してるのか



585 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:14:52 ]
if(1){****}
とあった場合、
まともな(有名どころのg++とかVCとか)コンパイラなら
if(1)という無駄なオーバーヘッドは消してくれると期待できますか?
あるいはif(0)も同じく最適化してくれますかね?

586 名前:585 [2009/11/29(日) 14:22:33 ]
#include <iostream>

const int num = 1;

int main()
{
if(num){std::cout << "num" << std::endl;}
if(!num){std::cout << "!num" << std::endl;}

return 0;
}
これがg++ (最適化-O1) でasmファイルが同じになりました。
他のコンパイラでも期待して良い物なのでしょうか?


587 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:11:43 ]
よほど特殊な狂った(または単純に超絶バカな)コンパイラでなければ、最適化を
切ったりしない限りは当たり前のように消える

588 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:32:50 ]
>>587
ありがとうございます。


589 名前:デフォルトの名無しさん [2009/11/29(日) 19:33:54 ]
C++のクラス&構造体に関する質問です。

構造体を静的メンバとして定義するには、どうしたらいいのでしょうか。
以下のようなコードで、int型の数値をstruct型にまとめたいのです。


class Perception {
public:
   static int trackingPointX;
   static int trackingPointX;
}
int Perception::trackingPointX = 0;
int Perception::trackingPointY = 0;

int main() {
   printf("%d", Perception::trackingPointX);
   return 0;
}


いろいろと検索・試作してみましたが、実装方法が分かりませんでした。
よろしくお願いします。

590 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:44:36 ]
>>589
よくわからんな。
そのコードのどこが気に入らないの?

591 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:49:13 ]
struct Perception
{
  static int trackingPointX;
  static int trackingPointY;
};

592 名前:589 [2009/11/29(日) 19:51:37 ]
>>590
printf("%d", Perception::trackingPoint0.x);
printf("%d", Perception::trackingPoint1.x);
printf("%d", Perception::trackingPoint2.x);
・・・という風にしたいんです。

593 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:56:42 ]
#include <stdio.h>

struct _Perception
{
  struct Point{ int x; int y; };

  Point trackingPoint0;
  Point trackingPoint1;
  Point trackingPoint2;
};

_Perception Perception;

int main()
{
  printf("%d", Perception.trackingPoint0.x);
  /* ...*/
  return 0;
}

594 名前:589 mailto:sage [2009/11/29(日) 20:22:19 ]
>>593
構造体をクラス変数として使いたいなら、メンバ変数として定義した上で
あらかじめクラスを作っておく方法しかないんですかね・・・。



595 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:28:31 ]
>>594
クラスインスタンス作るのが気に入らないなら 593 のメンバ変数に static つければいいだろうが。

>>593 要らんところで予約名使うなよ。

596 名前:589 mailto:sage [2009/11/29(日) 20:38:31 ]
>>595さんの方法も試してみます。ありがとうございます。
とりあえずは以下の方法で実装できました。(言われてみれば当たり前かも・・・汗)


struct TrackingPoint { int x; int y; };

class Perception {
public:
   static TrackingPoint trackingPoint0;
   static TrackingPoint trackingPoint1;
   static TrackingPoint trackingPoint2;
};
TrackingPoint Perception::trackingPoint0 = {0, 0};
TrackingPoint Perception::trackingPoint1 = {1, 1};
TrackingPoint Perception::trackingPoint2 = {2, 2};

int main() {
   printf("%d", Perception::trackingPoint0.x);
   printf("%d", Perception::trackingPoint1.x);
   printf("%d", Perception::trackingPoint2.x);
   return 0;
}






[ 続きを読む ] / [ 携帯版 ]

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

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