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

このエントリーをはてなブックマークに追加
静的に解決する場合もマクロよりテンプレート使った方がいいと思うがそれはともかく。

classAとclassBの間に継承関係はある?
あるのならもちろん仮想関数で解決できる。
今ない場合も共通のインターフェイスを継承するようにすれば解決できる。
これが一番言語的なサポートを受けられて簡単かな。

フリー関数でラップしてそのポインタを利用する。
より高度な枠組みとして簡単な deligate 風の仕組みを作る方法もあるが。
>>951>>952
早速の回答THX。

元のソースがcで、ClassAは既存構造体と関数をクラスにまとめたもの。
で、ClassBはそれとI/Fが同じになるように実装した。
となると、>952の共通のI/Fを継承するって線かな。
>>950
class Base {
public:
 virtual void put() = 0;
};

class A: public class Base {
 void put();
};

class B: public class Base {
 void put();
};

Base *p = bar ? new classB : new classA;
p->put();
delete p;
俺も>>954と全く同じソース書いてたんだが
条件演算子内の異なる new 式は
それぞれの記述部分で基底クラスのポインタにキャストしないと gcc-3.2 で警告が出た。

あとは本物のコードで put が例外投げることを気にするなら std::auto_ptr あたりでラップ、だな。
956950=953:04/04/17 00:42
おおお、漏れが頭捻ってる間にすぐにも使えるサンプルキター♪

>>954
感謝♪
957950=953=956:04/04/17 00:46
>>955
こちらにも感謝。
今回は元がcのコードなのでput()が例外投げるなんて事もないけど、
今後のためにstd::auto_ptrも調べてみるよ。
958デフォルトの名無しさん:04/04/17 00:59
>>948
えーと、例えば行末のセミコロンの付け忘れとか、引数の型が違ったり
全角スペースみたいなのがあったり、
コマンドからコンパイルの命令してるから、エディタでフォーカスが外れるときに
チェックしてくれるとか、改行するときにおかしな所を知らせてくれるとか。
VBAにあるような感じのエディタ
>>958
>コマンドからコンパイルの命令してるから、エディタでフォーカスが外れるときに
>チェックしてくれるとか
意味不明
960959:04/04/17 02:09
>>958
エディタのウィンドウが非アクティブになったとき
またはソース編集中に改行したとき、
 ・ セミコロンのつけ忘れ
 ・ 引数の型
 ・ 文字列リテラル以外の全角スペース
をチェックして警告してくれるエディタ

ってこと?
プログラミングもいいけどコミュニケーションの練習もしたほうがいいね。
961デフォルトの名無しさん:04/04/17 02:38
このスレで聞くべき内容ではないのかもしれませんが
一応C++で書いているのでここで質問させてください。

質問
完成させたプログラムを他人に見せる・説明する・提出する場合に
どのように体裁を整えるべきでしょうか。
状況としては

・面識の無い他人に説明する
・相手にする人数は数人か、多くとも10人未満
・双方に取って金銭的な利益・不利益は一切生じない
・結果だけではなく(プログラミングの)過程に関しても説明する

いい例かわかりませんが、例えば大学の卒業論文や修士論文などを
提出・発表する際には、論文の他にアブストラクト(要約書)を用意し、
また論文の中身については表紙、目次、はじめに、などを加えるのが
普通だと思います。
あるいはフリーソフトではHelpとread meファイルは大抵付いていると思います。
このようにプログラムのソース以外の部分についての常識といいますか
最低限これだけは付加しておくべき、という項目のようなものがありましたら
是非教えていただけないでしょうか。
マ板ネタかな
>>961
質問,ツッコミが入りそうなところをまとめておいたほうがいいと思う。
どんなプログラムかわからないから、不要、無関係なものもあるだろうけど。

・プログラムの目的、予想される結果、実際の結果
・結果としてデータとか出力するものなら、それの説明と考察
・実行時に与えるコマンドライン引数、もしくは実行中に与える入力例
 何か数値を与えるなら想定してる範囲と、範囲外のときの処理
・プログラムのフローチャートみたいなもの
・利用,作成した 関数,変数,クラスなど の(おおまかな)説明
・実行,コンパイルできる環境 (OSとかコンパイラーとか)
・なぜその言語や、出力手段(グラフとかグラフィックとかいったプレゼンの方法)を
 選択したのか
・(あっちゃいけないのかもしれないけど、)改善できそうな点

説明とかで↑の内容が抜けてたら、私は質問すると思う。
>>961
完成までに要した時間(期間)とか人数なんかも気になる。
>・結果だけではなく(プログラミングの)過程に関しても説明する
ってのに含まれるのかな
>・プログラムのフローチャートみたいなもの
これ要らない。スレ違いの議論回避のため、理由は割愛。
966デフォルトの名無しさん:04/04/17 11:30
マネージドC++での質問なのですが
.NETフォームのWindowハンドルを取得するにはどうすれば良いのでしょうか?
メッセージでのやり取りをしたいので・・・
968967:04/04/17 14:42
>>966
と言うかこんなスレがあります

managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
970961:04/04/17 15:52
>>962
言われてみれば確かに板違いの内容だったかもしれません。
以後気をつけたいと思います。どうもすみませんでした。

>>963-965
大変参考になりました。
フローチャートは用意する予定だったのですが、必ずしもそれが
良い行為であるとは限らないという感じでしょうか。
ただこれ以上はみなさんの迷惑になりそうなので、後は何とか
自分なりにまとめてみようと思います。

みなさんどうもありがとうございました。
新スレ作るの早過ぎないか?
埋めるぞ
http://www.2ch.net/accuse2.html
6 荒しの定義
保守荒らしや埋め立て、1000取りも無駄にサーバリソースを消費する行為なので、禁止します。
>>972
こんなのあったんだ?いつからだろ
Last-Modified: Sat, 14 Feb 2004 12:41:31 GMT

少なくとも2004年2月14日(土)12時41分31秒には既に存在していたらしいな
GMTか。日本時間午後9時?
>>975
時差について勉強しましょう。
>>974
かなり最近のルールなんだな。
2003年6月には、まだなかったらしい。
ttp://web.archive.org/web/*/http://www.2ch.net/accuse2.html
>>976
JST の方が 9 時間早いんだからあってるんじゃないの?
>>976
時差について勉強しましょう。
Windowsプログラムを作成したいと考えています。
コンパイラはbcc5.5でOSはWinXPです。
'Winmain'が未解決というエラーを無くすには、どのようにすればよいのでしょうか。
>>981
WinMain関数が定義されていないので定義してやればいい。
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
return 0;
}
ありがとうございます。

もう一つ質問してもいいですか?
PSDKをインストールしたのですが、
これをbccで使うにはどうすればよいのでしょうか。
>>983
最新のAPIを使うのでなければ、BCC付属のモノを使った方が楽。
ヘッダファイルはともかく、インポートライブラリをcoff2omfとかで変換したり、
作成したりするのはかなりの手間。
>>981
コンパイラ bcc32 に -wc オプションをつけてコンパイルする

IDEを使っているなら、ターゲットを
「Windowsアプリケーション (-w)」
から
「コンソールアプリケーション (-wc)」
に変更する
>>983
なるほど、凄い量ですしね。
簡単にインポートできるようなソフトでもない限り、
bcc付属のやつを使ったほうがよさそうですね。
ありがとうございました。
すみません、間違いました。
986は>>984へのレスです。

>>985
なるほど、オプションを変えてみるのも手ですね。
やってみます。
偶数であって奇数でない物はナンですか?
すべての偶数
そろそろ、1000取り合戦の始まりか?
このまま地味にいくのも趣があっていいなぁ
ちゅるーん
ちゅるるーん
くまさんのぜりーでね、ちゅるんってしたの!
http://replay.hypermart.net/okusuri.mpg
しゃーない、一人でちゅるんするもんね。
ちゅるりん
997デフォルトの名無しさん:04/04/23 17:42
でろりん☆
埋めるの?
埋めないの?
1000まで少しだね
1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。