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


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

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



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()を実行していた。






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

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

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