【初心者歓迎】C/C++室 Ver.14【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
05/02/21 03:38:48ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (dat落ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(dat落ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(dat落ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/(dat落ち)
9:http://pc5.2ch.net/test/read.cgi/tech/1094494997/l50
10:http://pc5.2ch.net/test/read.cgi/tech/1097416187/
11:http://pc5.2ch.net/test/read.cgi/tech/1099190154/
12:http://pc5.2ch.net/test/read.cgi/tech/1101100031/
13:http://pc5.2ch.net/test/read.cgi/tech/1104843249/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
05/02/21 03:39:230003デフォルトの名無しさん
05/02/21 03:39:43★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part13
http://pc5.2ch.net/test/read.cgi/tech/1108468718/
GCCについて part5
http://pc5.2ch.net/test/read.cgi/tech/1103057320/
cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/
0004デフォルトの名無しさん
05/02/21 03:40:210005デフォルトの名無しさん
05/02/21 03:40:23C言語なら俺に聞け! Part 102
http://pc5.2ch.net/test/read.cgi/tech/1108056236/
【標準C++】C++相談室 part39【STL含む】
http://pc5.2ch.net/test/read.cgi/tech/1106466303/
C/C++の宿題を片付けます 40代目
http://pc5.2ch.net/test/read.cgi/tech/1107625122/
【C++】template 統合スレ -- Part6
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/
C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/
00061
05/02/21 03:41:180007デフォルトの名無しさん
05/02/21 03:53:24乙
0008デフォルトの名無しさん
05/02/21 05:17:53publicとprotectedとprivateのどれを使うのが適切ですか。
0009デフォルトの名無しさん
05/02/21 07:52:07「オーバーライドするから」と言う理由だけではどれが適切かは決まらない。
そのクラスにとって適切なのを選べ。
0010デフォルトの名無しさん
05/02/21 08:06:510011デフォルトの名無しさん
05/02/21 08:50:440012デフォルトの名無しさん
05/02/21 09:21:06private 継承しても public でオーバーライドか。おめでてーな。
0013デフォルトの名無しさん
05/02/21 21:10:460014デフォルトの名無しさん
05/02/21 23:34:500015デフォルトの名無しさん
05/02/22 07:46:400016デフォルトの名無しさん
05/02/22 14:43:120017デフォルトの名無しさん
05/02/22 17:03:41public:
explicit NullPointerException(const std::string& what_arg) : std::runtime_error(what_arg) {}
};
0018デフォルトの名無しさん
05/02/22 22:14:53これを「4 3 2 1 0」と逆順に表示するように空欄を埋めなさい。
#include <stdio.h>
void main(void)
{
int i;
for(i=0; i<5; i++) printf("%d ", );
}
馬鹿だからわかんねぇ〜〜〜〜!!!!ヽ(`Д´)ノ
0019デフォルトの名無しさん
05/02/22 22:24:44じゃねえ?
0020デフォルトの名無しさん
05/02/22 22:25:420021デフォルトの名無しさん
05/02/22 22:32:03ははは・・・(´ー`)そうですね、ありがとうございました。
こんなのもわかんなかった俺って・・・_| ̄|○
>>20
えぇ、その気持ちわかりますよ。ごめんなさいごめんなさい
0022デフォルトの名無しさん
05/02/22 22:43:040023デフォルトの名無しさん
05/02/22 22:44:330024デフォルトの名無しさん
05/02/22 22:47:30そんなことはないだろ。俺はBCC5.6.2に(ry
0025デフォルトの名無しさん
05/02/22 22:47:380026デフォルトの名無しさん
05/02/22 23:24:060027デフォルトの名無しさん
05/02/23 00:06:350028デフォルトの名無しさん
05/02/23 00:28:45環境によ(ry
使っても使わない時と比べ10Kほどしか(ry
0029デフォルトの名無しさん
05/02/23 00:39:22クラスBは、Aからデータを受け取って処理するクラス。
Aからデータを受け取るときに、hogeからhogexx(hogeから派生)
というふうにキャスト?しちゃってるんですが、これは良くないのですか?
class A{
public:
hoge* GetData();
};
class B{
public:
A *a;
void xmethod {
hogexx *p=(hogexx*) a->GetData();
}
};
0030デフォルトの名無しさん
05/02/23 00:41:440031デフォルトの名無しさん
05/02/23 00:43:37A::GetDataが返す実体がhogexxならいいけど。
0032デフォルトの名無しさん
05/02/23 00:46:33良くないですね。
現状の hoge の定義がわからないと、言い切ることはできないのですが、
おそらく hoge に適切な仮想関数を定義するのが模範解答になると思います。
0033デフォルトの名無しさん
05/02/23 00:46:43class A
class B : public A
のとき
A* pa = new B;
はオッケなのはわかる?
つまり
class 猿
class 人間 : public 猿
のとき
猿を人間にキャストしたら、知能が足りないのでまともな人間にはならない
人間を猿にキャストなら頭のいい猿になるので問題ない
003429
05/02/23 00:59:06ありがとうございます。
クラスAは、もう何年も前にコーディングされhoge自身はまったく更新されていません。
hogeを派生したクラスがいろんなとこで使われているので、templateにするしかないのかな
と思っています。
他に良いほうほうがあったら教えてください。
0035デフォルトの名無しさん
05/02/23 01:22:39もし >29で動作してるとしたらclass Aの返しているhoge*の
インスタンスはhogexxで作られているんじゃないか?
でclass Bでhogexx*にキャストしているのはhogexxのメソッドを使いたいから?
だったらclass B以降でよくつかうhogexxのメソッドをhogeのメソッドにして、
class Bでもhogeで受け取ってそのあとの処理ができるようにするべきでは?
hogeの機能不足が問題だと思われ
実際のソースを見てないからなんともいえないが、小手先のごまかしでなく
きちんと修正すべきだと思われ
それでも修正箇所が極力少なくてすむような修正じゃないとまずいと思うが
一番ダメダメなのは最初にhogexx *p=(hogexx*) a->GetData(); と書いた香具師
修正の時間が取れずに一時しのぎで書いたにせよ、後ででもいいからきちんとした形にしておくべきだったな
苦し紛れのコードを書くと、後の人間が苦労するといういい例
0036デフォルトの名無しさん
05/02/23 01:46:28そのコンテナとしてのみ機能しているなら判らんこともない。
その場合ならclass Aの派生クラスを作ってGetDataをオーバーライドするのが手。
あー、まさかGetDataが仮想関数じゃない?
0037デフォルトの名無しさん
05/02/23 02:30:40オーバーライドでは戻り値の型は変えられないし、
Aがオブジェクトを保持してるんなら、派生クラスでもそれを返すしかないし、
オーバーライドでは何も解決しないと思う。
0038デフォルトの名無しさん
05/02/23 03:58:17>オーバーライドでは戻り値の型は変えられないし、
変えられるんだよ〜ン。
hogexxがhogeをpublic継承している限り、基底クラスAの hoge* GetData()を
派生クラスで hogexx* GetData() でオーバーライドすることは認められている。
ってかこれができなきゃ多態にならんでしょ。
でも、これ、知らんやつが多いんだよなぁw。
>Aがオブジェクトを保持してるんなら、派生クラスでもそれを返すしかないし、
「class Aはhogeおよびその派生クラスの実体の生成には関与せず」って断ってるやン。
当然、格納されているのはポインタか参照であることが前提だわな。
0039デフォルトの名無しさん
05/02/23 04:03:350040デフォルトの名無しさん
05/02/23 04:06:59abstruct class
0041デフォルトの名無しさん
05/02/23 04:09:500042デフォルトの名無しさん
05/02/23 04:16:00http://www112.sakura.ne.jp/~kaientai-project/creategame.htm
0043デフォルトの名無しさん
05/02/23 05:13:01このページの最後の投稿にあるように、mallocが場合によってはデフラグを行なってから
メモリの割付けをしてもいいのですか?
004437
05/02/23 07:42:19> 変えられるんだよ〜ン。
ポインタじゃない場合と勘違いしてた。ごめん。
> 「class Aはhogeおよびその派生クラスの実体の生成には関与せず」って断ってるやン。
ということは、
A は格納されるオブジェクトについて「 hoge およびその派生」を受け付けてしまうので、
これを「 hogexx およびその派生」に狭めることはできないのではないか?
と思う。
004537
05/02/23 07:44:18でもそうなると GetData() が仮想関数である意味が無いな。
0046デフォルトの名無しさん
05/02/23 08:06:47いいですよ。
実際のところは「マネージャ」ってのがMMUになるんだろうな。
ソフトでこれを実装できるかどうかは怪しいし、
できたとしてもパフォーマンス的に実用できないだろう。
0047デフォルトの名無しさん
05/02/23 10:30:41a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch(bad_alloc e) {
return 0;
}
ここで c の new の時に例外が発生した時にはやはり a , b は解放しなくてはいけないのでしょうか
また、スマートな解放の仕方をおしえてください
0048デフォルトの名無しさん
05/02/23 11:31:04debianで動くC++プログラム中で、あるタイミングで
ディスクの空き容量をチェックしたいのですが、
dfコマンドのような関数はありませんでしょうか。
ネットや本でさがしてるんですがプログラム中から
ディスクの空き容量を取得する方法がなかなかわかりません。
0049デフォルトの名無しさん
05/02/23 11:36:16boost::scoped_arrayのようなスマートポインタに突っ込む。
0050デフォルトの名無しさん
05/02/23 13:19:31a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} chatch (bad_alloc e) {
delete a;
delete b;
delete c;
return 0;
}
0051デフォルトの名無しさん
05/02/23 14:14:59つboost::move_ptr
0052デフォルトの名無しさん
05/02/23 21:28:24このうっかりさんめw
a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc e) {
delete[] a;
delete[] b;
delete[] c;
return 0;
}
0053デフォルトの名無しさん
05/02/23 22:49:48オマエモナー
a = b = c = NULL;
try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc e) {
if(a)delete[] a;
if(b)delete[] b;
if(c)delete[] c;
return 0;
}
0054デフォルトの名無しさん
05/02/23 22:58:48?
delete[] 0;は効果を持たないから、そのif()は必要ない。
0055デフォルトの名無しさん
05/02/23 23:03:47try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc e) {
delete[] a;
delete[] b;
delete[] c;
return 0;
}
これでOKですか?
delete[] に NULLわたしてもOKですよね・・
0056デフォルトの名無しさん
05/02/23 23:18:12try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc) { // 使わないんだから変数名は省略できるだろ。
delete[] a;
delete[] b;
delete[] c;
return 0;
}
0057デフォルトの名無しさん
05/02/23 23:54:45try {
a = new char[1024];
b = new char[1024];
c = new char[1024];
} catch (bad_alloc&) { // 使わないんだから変数名は省略できるだろ。
delete[] a;
delete[] b;
delete[] c;
return 0;
}
0 なんか使わない
例外は参照で受け取る
005857
05/02/23 23:55:31s/0/NULL
0059デフォルトの名無しさん
05/02/24 00:01:01代入することが推奨されていると、
それが言いたい訳ね?
0060デフォルトの名無しさん
05/02/24 13:18:55//略
};
main() {
Kanojo shiho;
}
上のコードを実行するとbad_alloc例外が飛んでくるんですがどうすればよいのでしょうか?
0061デフォルトの名無しさん
05/02/24 15:23:51どうすればいいんでしょうね?
あなたが何をしたいのかわからないので答えようがありません。
0062デフォルトの名無しさん
05/02/24 15:34:55を提出してくれれば答えてあげてもいいよ
0063デフォルトの名無しさん
05/02/24 15:51:460064デフォルトの名無しさん
05/02/24 18:53:26cgiにしてApache上で動作させてブラウザからGUI…というのはできましたんで、
そのほかのGUIにする方法を教えて下さい。
もろ初心者です。
0065デフォルトの名無しさん
05/02/24 18:59:210066デフォルトの名無しさん
05/02/24 23:40:49BCCじゃなくてBCBを金を出して買え。
金がないなら必死に「猫でも」でも読んでみろ。
0067デフォルトの名無しさん
05/02/25 12:54:57それはGUIじゃない。
基礎からやり直せ。
0068デフォルトの名無しさん
05/02/25 13:24:18↓どうぞ^^
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("MainForm.cpp", Form1);
USEFORM("Unit2.cpp", Form2);
//---------------------------------------------------------------------------
#include "MainForm.h"
extern TForm1 *Form1;
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
try {
Application->Initialize();
Application->Title = "はじめての>>64GUIプログラミング";
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception) {
Application->ShowException(&exception);
}
catch (...) {
try {
throw Exception("");
}
catch (Exception &exception) {
Application->ShowException(&exception);
}
}
return 0;
}
0069デフォルトの名無しさん
05/02/25 14:27:57「C(C++)でプログラム組むときは、1関数に1ファイル。」
と教わったことがあります。
でも、そんな事したら、1プログラムで何百ファイルとなってしまいます。
本当に皆さんもこんなことしているのでしょうか?
今でもおかしいと思ってやみません。
0070デフォルトの名無しさん
05/02/25 15:01:42んなわけねぇだろ
0071デフォルトの名無しさん
05/02/25 15:02:24以下のプログラム、核は出来ています。このまま使用しても目的は達成できます。が、
http://tokyo.cool.ne.jp/kuonnnokizunanbalivetehe/CSJS2EUC.C
http://tokyo.cool.ne.jp/kuonnnokizunanbalivetehe/CEUC2SJS.C
この2つのソースコードをJISを経過させずに直接変換させるにはどうしたらいいでしょうか?
0072デフォルトの名無しさん
05/02/25 15:19:530073デフォルトの名無しさん
05/02/25 15:21:07ありえないキチガイだな。
0074デフォルトの名無しさん
05/02/25 15:35:58#1行ですむのにね。
0075デフォルトの名無しさん
05/02/26 00:18:51きみのかち。
0076デフォルトの名無しさん
05/02/26 00:26:390077デフォルトの名無しさん
05/02/26 00:48:240078デフォルトの名無しさん
05/02/26 01:03:23どっかの本(雑誌だったかな?)でも似たようなこと書いた記事見たことある。
当時はそうなんだ、と感心したものだったが、
いまだに実行に移していない(ってか、移せるわきゃ無いだろ)自分がいる。
007969
05/02/26 01:04:5715年来の疑問がやっと解決しました。
どうもありがとうございました。
0080デフォルトの名無しさん
05/02/26 01:15:110081デフォルトの名無しさん
05/02/26 01:20:110082デフォルトの名無しさん
05/02/26 01:25:58リンク後の実行可能ファイルのサイズをちょっとだけ抑える効果ぐらいしかない。
依存関係にある関数同士はどうせ一緒にリンクされるのでライブラリ内でも1ファイルにまとめられていることがある。
0083デフォルトの名無しさん
05/02/26 01:30:260084デフォルトの名無しさん
05/02/26 01:31:380085デフォルトの名無しさん
05/02/26 01:36:100086デフォルトの名無しさん
05/02/26 01:39:230087デフォルトの名無しさん
05/02/26 01:41:010088デフォルトの名無しさん
05/02/26 01:56:05>依存関係にある関数同士はどうせ一緒にリンクされるので
>ライブラリ内でも1ファイルにまとめられていることがある。
その理由を否定する訳ではないが、どちらかというと関数群内で
共通の変数などをstaticでくくって隠蔽する目的もある。
Cのファイル単位のスコープは、C++のクラスが使えるようになるまでは
よく利用された。っていうか今でも利用されている。
0090デフォルトの名無しさん
05/02/26 02:11:25であってますか?
0091デフォルトの名無しさん
05/02/26 02:12:22そりゃJavaだろ
0092デフォルトの名無しさん
05/02/26 02:14:23そうとも限らん。
自分的には1ファイル1ネームスペースが原則。
例外もあるが。
0093デフォルトの名無しさん
05/02/26 02:28:39EMアルゴリズムを回してます。
「アクティブな構成」が「Win32 Debug」と「Win Release」の時で
結果が違うんですけどなぜでしょうか・・・。
収束するとこも違うし、Releaseだとエラーが出て止まってしまうんです。
Visual C++ 6.0、WindowsXPです。
009493
05/02/26 02:34:360095デフォルトの名無しさん
05/02/26 02:38:39スレ違い。
こっち
★初心者にVisual C++を教えるスレ★ Part17
ttp://pc5.2ch.net/test/read.cgi/tech/1107926989/l50
009693
05/02/26 02:42:300097mi
05/02/26 12:54:10『キーボードから入力した数字を999が入力されるまで降順にソートしていき、数字の値と共にその数字分の*を表示する。999はデータとして扱わない。配列の要素数は10で11以上の入力はなく、数字以外の入力もないものとする。』
というのをやっているのですが、私が作成した以下のプログラムでは出来ませんでした。どこを直せばいいのか教えていただけないでしょうか?
#include <stdio.h>
void main()
{
intdata[10],i=0,j,max=0,dummy;
while (i < 10) {
if (scanf("%d",&data[i]),data[i] != 999){
printf("max = %d\n",max);
if (max <= data[i]){
dummy = data[i];
data[i-1] = max;
max = dummy;
}
} else {
data[i+1] = EOF;
goto next;
}
i++;
}
next: ;
for(j = 0; data[j] != EOF; j++){
printf("data[%d] = %d\n",j,data[j]);
}
}
0098デフォルトの名無しさん
05/02/26 13:09:52スレ違い。
こっち。
C/C++の宿題を片付けます 40代目
ttp://pc5.2ch.net/test/read.cgi/tech/1107625122/l50
0099デフォルトの名無しさん
05/02/26 21:26:28変数の数値を桁ごとに分けて、
それぞれ別々の変数に入れる方法を教えてください。
0100デフォルトの名無しさん
05/02/26 21:54:411.xを10で割ったあまりをaに入れる
2.aをketa[]に入れる
3.xを10で割ってxに入れる
4.1〜3をxが0になるまでくりかえす
2)
1.xを文字列に変換する
2.その文字列を文字数分ループさせて一文字ずつとりだす
おすきなのをどうぞ
0101デフォルトの名無しさん
05/02/26 22:02:05あまりを使うのですか!
ありがとうございます!
■ このスレッドは過去ログ倉庫に格納されています