- 1 名前:デフォルトの名無しさん [2008/09/06(土) 22:45:12 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.58【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1218023777/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 653 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:38:02 ]
- char hoge2[5]
でstrcpy
- 654 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:42:35 ]
- >>652
なんで困るのか言ってみようか
- 655 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:42:48 ]
- C++ならSTLのstd::string使うとか
- 656 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:43:37 ]
- >>650
それだといけました >>653 それもありなんですね >>654 いろいろ書き換えたいんです
- 657 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:50:41 ]
- 文字列定数を書き換えてはいけない
必ずstrcpyでコピーしる
- 658 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 17:53:18 ]
- そもそもなんとなく この宣言を使ってるんですが
char *hoge[5]={"test","test2","test3","test4","test5"}; イメージ的にはどんな感じですか hoge[0] 文字列testへのポインタ hoge[1] 文字列test2へのポインタって感じですか?
- 659 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 18:24:19 ]
- そんな感じ
- 660 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:13:21 ]
- a.hにクラスAを宣言、別ファイルのb.hでクラスAを継承したクラスBを宣言したいんですが、
B宣言部の「class B:public A」の部分に「型名が必要」とエラーが出ます。(当方Borland C++) a.hをインクルードしても「Aの宣言が複数見つかった」と言われたりで、どうしたらいいんでしょうか。
- 661 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:15:04 ]
- >>660
class B の定義より前に class A の宣言だけしてみるとか class A;
- 662 名前:661 mailto:sage [2008/10/03(金) 19:16:28 ]
- ごめん >>661 は無しで
- 663 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:26:27 ]
- 質問です。
他クラスのメンバ変数にアクセスするにあたって privateなメンバにgetterを使ってアクセスするのと publicなメンバを直接参照するのではどちらが速いですか? CHoge hoge; int a = hoge.m_publicHoge; int b = hoge.getHoge(); // CHogeの実装 // const int& getHoge(){ return m_hoge; }; // public: : // int m_publicHoge; // private : // int m_hoge;
- 664 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:30:51 ]
- 一応
速度は直接アクセス 安全性はゲッター だろう一般的に 最適化で速度差無い事もあるけど 普通はゲッター使いなさいと教わるはず
- 665 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:30:52 ]
- >>660
それだけだとうまくいくはずなのでもうエスパーさんしか アドバイスできないんじゃないかと エラーの出る最小のコードをどうぞ
- 666 名前:デフォルトの名無しさん [2008/10/03(金) 19:32:06 ]
- VC++2008のデフォルト状態Releaseでコンパイルしたものを実行し、CPUメーターで見ました。するとコアが満遍なく使われています。
私はマルチスレッドプログラムも何もしていないのに、コンパイラが自動でマルチコアに最適化してくれたということでしょうか?
- 667 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:35:11 ]
- ほかのプログラムが満遍なくCPUを使っていただけだろ。
- 668 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:42:44 ]
- >>660
インクルードガードでぐぐれ
- 669 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:52:56 ]
- >>665
こんな感じです。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7751.zip
- 670 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:54:33 ]
- >>669
#include "ca.cpp" #include "cb.cpp" これは。。 ヘッダをインクルードするようにして、多重インクルードガードすればいいと思うよ。
- 671 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:55:40 ]
- ボーランドのリンカ使い方知らないけど、
それぞれのcppからobj作って、それらをリンクして、exeを作るのが普通。
- 672 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 19:57:11 ]
- >>671
makefileみたらそうなってるから >>670 だけでいいんじゃないかな
- 673 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:22:08 ]
- >>670
つまり、main.cppでa.hとb.hをインクルードして、 a.cppとb.cppではインクルードガードをかけるだけて、単にメンバ関数を書くだけでいいという事ですか?
- 674 名前:663 mailto:sage [2008/10/03(金) 20:37:11 ]
- >>664
サンクスです。 やはり直接アクセスの方が速いですか。。。 参照返ししてるからほぼ同等だと思ったのですが甘かったようですね。 getter使うにしてもローカルで複数回使う場合 func1( hoge.getHoge(; ); func2( hoge.getHoge() ); func3( hoge.getHoge() ); とするより int& b = hoge.getHoge(); func1(b); func2(b); func3(b); のようにした方がオーバーヘッドは減りますよね?
- 675 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:42:29 ]
- メンバ関数はインライン関数にできてだな
- 676 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 20:43:35 ]
- 最適化を前提にするなら余計なことはしないほうがよいだろう。
get/setは*.hにインラインで記述するのが基本。 気になるならアセンブリリストを出力したり、実際に測定するといいよ。
- 677 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:05:57 ]
- >>674
intなら参照使わない方が早いんじゃね? どういう用途か知らないけど なんにせよ実測するのが一番だな
- 678 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 21:23:04 ]
- >>674
値をレジスタに置けるなら、メンバの内容をローカル変数にコピーして、 一通り操作が終わったら、メンバに書き戻す方が良いかも。 メンバへの変更 ( 副作用 ) が発生するポイントが、書き戻し部分に限定 される点もメリット。
- 679 名前:673 mailto:sage [2008/10/03(金) 21:50:44 ]
- 解決しました。
どれから読み込んでもいい様、使う関数のあるヘッダはインクルードガード付けた上で 形式上でもインクルードしておけ、って事ですね(多分)。 アドバイスくれた方々、ありがとうございました。
- 680 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 22:33:10 ]
- >>679
> a.cppとb.cppではインクルードガードをかける ヘッダ内でガードする。 多重インクルードされた結果、重複定義が発生する。 > ヘッダはインクルードガード付け となっているから理解したのかもしれないけれど。 すっきりさせるために動かない状態が続くよりは、ぐちゃぐちゃでもなんとか動く状態の ほうがいいので、動く状態をキープしたまますっきりさせられるように努力するといいですよ。 リファクタリングって言葉も調べてみてください。
- 681 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:09:43 ]
- よくwindowsプログラムのサンプルコードでInitAppとInitInstanceってあるけど、どういう分け方してるんですか?
- 682 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 23:31:17 ]
- エスパーに失敗した。もうちょっと情報頼む。
- 683 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:04:14 ]
- >>681
気分
- 684 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 01:22:24 ]
- >>681
そういう作りはWin16時代の遺物なので今となっては意味がない Win16ではアプリケーションの最初のインスタンスだけが実行すべき処理を InitApplication()に記述して、 WinMain()の引数hPrevInstanceがNULLの場合にのみInitApplication()を実行していた。
|

|