■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part13
251 名前:デフォルトの名無しさん :02/12/04 21:44
>>249
誤植。

252 名前:249 :02/12/04 21:46
>>250
Visual C++(2) はじめてのオブジェクト指向プログラミング

>>251
やっぱそうですか!ありがとう!

253 名前:デフォルトの名無しさん :02/12/04 21:55
http://www.shoeisha.com/book/errata/er_detail.asp?bid=979&printno=1&pageno=all

1刷/ P.156
【MyClassの定義】 誤 ア( )void SetDat;は、private:なメンバ関数である。
正 ア( )void SetDat;は、public:なメンバ関数である。

254 名前:デフォルトの名無しさん :02/12/04 21:59
>>253
こんなにあったですか・・・

255 名前:デフォルトの名無しさん :02/12/04 22:04
どうしてこんな誤植が発生するんだ・・・

256 名前:デフォルトの名無しさん :02/12/04 22:49
ヘッダに長大なインラインメンバ関数書いたとき
インライン展開されるかどうかの境目ってどこらへん?

257 名前:デフォルトの名無しさん :02/12/04 22:51
コンパイラの機嫌によるんじゃないか?
ネスト制限もあるだろうし

258 名前:デフォルトの名無しさん :02/12/05 00:14
質問よろしいでしょうか?

VC6を使っている者ですが、
newで確保した領域に対して_msize()で
サイズを得るコードは問題が発生する可能性がありますか?


259 名前:デフォルトの名無しさん :02/12/05 00:17
サイズを得るだけなら、VC6専用になるという問題以外は
思いつかないなあ。
つかそのサイズ使って何やるの?

260 名前:デフォルトの名無しさん :02/12/05 00:26
状態遷移図を直接クラス化したようなライブラリってないですか?

261 名前:デフォルトの名無しさん :02/12/05 00:48
>260
えぴすてーめーが本で紹介してたような気がする。

262 名前:デフォルトの名無しさん :02/12/05 00:57
>>259
可変長の要素をもつ動的配列をダブルポインタで管理するので
それを元に、newで作った動的配列の要素数を知ることができれば
管理が楽になると思ったのですが…

それともSTLのlist<>などを使うべきなのでしょうか?

現状ではこうしています
inline int GetArrayLength(void* p, int typesize) {
  return _msize(p) / typesize;
}

263 名前:デフォルトの名無しさん :02/12/05 01:01
std::vectorがいいと思う

264 名前:デフォルトの名無しさん :02/12/05 01:01
>>258
newがmalloc()したアドレスの先頭を返すなんて保証がない。

265 名前:258 :02/12/05 01:05
>>259
>>263
>>264

STLのvector<>など管理が楽なものを使おうと思います。
回答していた頂いた方、ありがとうございました。

266 名前:デフォルトの名無しさん :02/12/05 01:08
この話どー思います?
http://pc3.2ch.net/test/read.cgi/tech/1038405432/616-

267 名前:デフォルトの名無しさん :02/12/05 01:26
げっ通る。気持ち悪い。
gcc3.2(MinGW)です。

template <class $>
class A {
public:
$ i;
};

int main()
{
A<int> $;
}

268 名前:デフォルトの名無しさん :02/12/05 01:28
@(アットマーク)も通ったっけ?

269 名前:デフォルトの名無しさん :02/12/05 01:30
bcc5.51は通んないね。
エラー E2206 doltest.cpp 1: 不正な文字 '$' (0x24)
エラー E2206 doltest.cpp 4: 不正な文字 '$' (0x24)
エラー E2303 doltest.cpp 4: 型名が必要
エラー E2206 doltest.cpp 9: 不正な文字 '$' (0x24)(関数 main() )
エラー E2108 doltest.cpp 9: typedef 'A<int>' の使い方が間違っている(関数 main()

270 名前:デフォルトの名無しさん :02/12/05 01:32
f[no-]dollers-in-identifier

271 名前:デフォルトの名無しさん :02/12/05 01:37
>>268
さすがに @ はだめなようだ。
parse error before `@' token

272 名前:デフォルトの名無しさん :02/12/05 01:54
class Aをclass Bとclass Cへ継承させたいんですけど
こんなエラーが出ます

error C2011: 'super_class' : 'class' で示される型としてすでに定義されています。

うーーん助けてください・・・・・・

273 名前:デフォルトの名無しさん :02/12/05 02:13
>>272

そのエラー出したソース書かんかい。


274 名前:デフォルトの名無しさん :02/12/05 02:46
http://www.tietew.jp/cppll/archive/5647
↑この話、おかしいですよね?
ソート済みベクタより赤黒木のほうが速い場合なんて、あり得ないはずなんだけど。

実験用ソースの実装が腐ってるだけにみえるのに、誰も突っ込まないまま話がおわってるっぽい。

275 名前:デフォルトの名無しさん :02/12/05 03:01


276 名前:272 :02/12/05 03:01
class Aとclass Bとclass Cはそれぞれ異なる3個のヘッダファイルに存在します。
class AのファイルをclassBのあるファイルとclassCのあるファイルヘインクルードし、

classB:public classA
classC:public classB

とすると先ほどのエラーが出ました。
今原因がわかったのですが、これは2重定義なのでしょうか?
(classAが、classBとclassCの2つのファイルで定義されたことになる?)

どうしてもこのclassAを他の複数のファイルにあるクラスへ継承させたいのですが
かのうでしょうか?

277 名前:272 :02/12/05 03:02
↑訂正

classB:public classA
classC:public classA

です


278 名前:デフォルトの名無しさん :02/12/05 03:05
classAのヘッダをガードしてないに一票。
#ifndef classa_h
#define classa_h

#endif
で囲ってるか?

279 名前:デフォルトの名無しさん :02/12/05 03:05
>>276
ヘッダーで
#ifndef ... #define ... #endif
(通称インクルードガード?)
してますか?


280 名前:272 :02/12/05 03:16
すみません、解決しそうです。
ご迷惑かけました

281 名前:272 :02/12/05 03:58
>>278-279
おっしゃるとおりやってみたところ、解決しました!
ありがとう御座いました!!

282 名前:デフォルトの名無しさん :02/12/05 04:21
>>274
有り得ないなんて決め付けずに実験してみなさい。
cppll でその話題が出た時
ソート済み vector に対して
  std::binary_search
  std::lower_bound
set,multiset に対して
  メンバ find lower_bound count
のベンチマークを要素数・要素の型・最適化の有無等の条件を変えて実験してみた。
STL の実装は は dinkumware, STLport の2つ。
コンパイラはVC7。

その結果
1.ソート済みベクタが速度・メモリ効率の両面で連装コンテナを上回る場面は
  それほど多くはない。
2.ソート済みベクタが速度・メモリ効率の両面で連装コンテナを上回る場合でも、
  その差は大きいとは言えない。
3.検索速度のみに限ればソート済みベクタが勝る場合が多いが
  その差は大きいとは言えない。
となった。
 
結論:
More Effective STL 第23項
連装コンテナをソート済みベクタに置き換える事を検討しよう
これは大抵の場合ほとんどメリットが無いと言える。
検索速度・メモリ効率に不満を感じた場合の解決にはならない。
その場合はその他のデータ構造を考えるべきだろう。

283 名前:274 :02/12/05 11:08
> 有り得ないなんて決め付けずに実験してみなさい。
実験したもん。検索時間に関してだけど。(メモリ効率の測定方法がわからんない)
結果は、それぞれソート済みベクタが、
1.連想コンテナを上回る場面がある。
2.連想コンテナを下回る場合でも、その差は大きいとは言えない。

んで、1については、要素数が多い場合が該当しやすいような気がする。
2については、「比較」の処理に比べて「次の比較対象へ移動」の処理が
無視できない場合に該当しやすいような気がする。

> ソート済み vector に対して
> set,multiset に対して
そのテスト、vectorの内容をset,multisetと等価にするために、
vectorに対してどんな操作がしてありますか?

わざとそこらへんをしくじった状態でテストしたら、
http://www.tietew.jp/cppll/archive/5687
↑と同様な結果が得られたのですが。
ちなみにテスト環境はcygwin gcc-3.2。

ってなわけで結論:
More Effective STL 第23項
「連想コンテナをソート済みベクタに置き換える事を検討しよう」
検索速度・メモリ効率に不満を感じた場合には、検討の余地が十分にある。


284 名前: :02/12/05 11:51
C++のソースを解析して クラス毎のメンバ関数名/メンバ変数名を抜き出す
手っ取り早い方法を教えてください。


285 名前:デフォルトの名無しさん :02/12/05 11:54
VC++

286 名前:284 :02/12/05 12:17
いや 抜き出したクラスのメタ情報を元に処理をおこなうプログラム
を書きたいんですが

287 名前:デフォルトの名無しさん :02/12/05 12:17
perl

288 名前:デフォルトの名無しさん :02/12/05 12:22
>>284
パーサ書くなりすればいいじゃん
たいした手間じゃない

289 名前:デフォルトの名無しさん :02/12/05 12:32
map::operator[]でkeyからmapdataを探して見つからなかったとき、
自動的にデフォルトコンストラクタでmapdataが作成されて登録されますが、
mapdataがポインタの場合、mapdata==0は保障されるのでしょうか?
それとも素直にfindを使うべき?
ちなみにBCBで試してみたらちゃんと0になってましたが…。

そもそもポインタを入れるな、って解答はナシでお願いします。

290 名前:デフォルトの名無しさん :02/12/05 12:37
>>289 OK

291 名前:デフォルトの名無しさん :02/12/05 13:58
「Koenig参照」という言葉を聞いたのですが、具体的な例が思い浮かびません。
C++の場合どのような時にこの規則が適用されるのですか?

292 名前:289 :02/12/05 15:55
>>290
thanks!

293 名前:デフォルトの名無しさん :02/12/05 15:56
>>291

http://member.nifty.ne.jp/~masumoto/cpp/topic/#SEC7

294 名前:おっぱいあげ :02/12/05 16:24
おっぱいあげ

295 名前:makoto♂ :02/12/05 16:26
質問

296 名前:デフォルトの名無しさん :02/12/05 17:13
>>293
ありがとうございます。namespaceに関連する機能のようですね。
std::プリフィックスが場合によっては省略できそうですね。

297 名前:デフォルトの名無しさん :02/12/05 19:26
iostreamでファイル操作しているのですが
ファイルサイズはどうやって調べればよいでしょうか?

298 名前:デフォルトの名無しさん :02/12/05 19:34
>>297
getline(strm, str, '0')でstd::stringに読み込んでからsize()またはlength()とか。

299 名前:デフォルトの名無しさん :02/12/05 19:35
http://lists.boost.org/MailArchives/boost/msg35658.php
これつかってみたやつおる?

300 名前:デフォルトの名無しさん :02/12/05 19:37
GetFileSize

301 名前:デフォルトの名無しさん :02/12/05 19:37
>288
C++ フルスペックのパーサー書くのはめんどいぞ。template とか名前空間とか
絡んでくると、そりゃーいろいろと。

302 名前:デフォルトの名無しさん :02/12/05 19:43
>>301
放置しとけ。

303 名前:デフォルトの名無しさん :02/12/05 19:46
>>298 やはりそういう方法しかないんですか

>>300 できるだけWin32APIは使いたくないんですが

304 名前:デフォルトの名無しさん :02/12/05 19:48
>>303
fstat
seek&ftell

305 名前:デフォルトの名無しさん :02/12/05 19:57
std::ifstream ifs("manco", std::ios_base::binary);
ifs.get();
std::streamsize size = ifs.rdbuf()->in_avail() + ifs.gcount();

306 名前:303 :02/12/05 20:04
>>304
>>305
ありがとう御座います、ヘルプを見ながら理解しようと思います。

307 名前:  :02/12/05 20:29
>>288
たいした手間じゃないなら書いてアップしてあげたら?
無理しなくてもいいけど。

308 名前:デフォルトの名無しさん :02/12/05 20:56
>>296
つーか、Koenig参照がなかったら、

namespace NS {
class A {};
void operator<< (std::ostream& os, const A& a) {}
}

int main()
{
NS::A a;
std::cout << a; // ここの << は、NS::operator<< を呼ぶ
}

みたいなことはできんわな。


309 名前:デフォルトの名無しさん :02/12/05 21:10
>>308
> namespace NS {
> class A {};
friend
> void operator<< (std::ostream& os, const A& a) {}
> }
か?

310 名前:デフォルトの名無しさん :02/12/05 21:54
>>283
実験の結果
「なんだ、ほとんど差が無いじゃないか」というのが私の結論。
「いや、この差は大きいよ」と思うんならそれは貴方の自由。
 
要素数が少ない場合・要素の型が単純な場合は有意な差が無い、
場合によっては連装コンテナの方が速い場合もある。
 
要素数が多くその数が予測できない場合
vector は大抵の実装ではメモリを大量に消費する。
メモリ容量・要素数にもよるが、これは速度の大幅な低下をもたらす。
 
Effectiv STL 第23項 にもある通り、連装コンテナをソート済みベクタに
置き換えるにはいくつかの条件を満たさなければならない。
また、その条件を満たした場合でも、様々な制限が発生する。
その後の保守にも悪影響を与える可能性が大きい。

つまりソート済みベクタは守備範囲が極めて狭いと言える。
これらを考慮すると、わざわざ連装コンテナをソート済みベクタに置き換える
メリットは見出せない。
 
検索速度を重視する場合、ソート済みベクタを検討している暇があるのならば
まともなハッシュテーブルを使うべきだろう。


311 名前:デフォルトの名無しさん :02/12/05 22:52
>>309
あー、マジメに書くと、
namespace NS {
class A {
friend std::ostream& operator<<(std::ostream& os, const A& a);
};
std::ostream& operator<<(std::ostream& os, const A& a) {
return os;
}
}
ですな。ま、Koenig参照の本質には関係ないということで、許してたもれ。

312 名前:デフォルトの名無しさん :02/12/05 22:53
Koening Lookupをkoening参照と訳すのは
激しく誤解を招く気がする

313 名前:デフォルトの名無しさん :02/12/05 22:54
検索ルール?

314 名前:デフォルトの名無しさん :02/12/05 23:49
>310
なんで「あなたの自由」と言いつつ、

> これらを考慮すると、わざわざ連装コンテナをソート済みベクタに置き換える
> メリットは見出せない。

と断言したがるかね。両者とも、もう判断するに十分な情報は出してるんだから、
そのへんで止めとけ。

315 名前:283 :02/12/06 02:30
連想コンテナをソート済みベクタに置き換える見返りは、
メモリ効率に関する効果がメインなのだと思いました。
検索速度については、劇的な変化は期待できません。

メモリ効率の向上は劇的なものが期待できます。
たとえば、要素数の上限が分かっている場合に、
動的メモリの使用を回避できる可能性もあります。

>>310
×連装
○連想

この辺で止めときます。

316 名前:デフォルトの名無しさん :02/12/06 05:05
C++をはじめようとおもうのですが、
フリーでC++ができるようになるソフトって何ですか?
今のところボーランドのフリーのコンパイラしかないです。
使い方もわからないです

学校の授業でC++Builderを使っていて自宅でもやりたいのですが。


317 名前:デフォルトの名無しさん :02/12/06 05:08
>>316
まずはおれとエチしないか?

318 名前:デフォルトの名無しさん :02/12/06 05:32
C++Builder風で無料なものは無い

319 名前:デフォルトの名無しさん :02/12/06 06:02
ぼーらんどのBCCは
まず、ファイル→新規作成
で出てくる窓でプロジェクトのタブをクリックして
ディレクトリ名は適当なフォルダ(自分のCの作業場所)
を指定して、プロジェクト名を決める。
このプロジェクト名で指定したフォルダのしたにその名前の
フォルダができる、そして、C/C++ソースタブを開いて
CもしくはC++のソースファイルを適当にhello.cppとかすると
ソースの編集画面がぱっと開き、そこにソースを書き
できたら
プロジェクト→メイクで実行ファイルがプロジェクト名の
下にできるdebugフォルダにできてる。
ライブラリのパス設定はbccの使い方説明してるサイトの
通りにしとく。

320 名前:デフォルトの名無しさん :02/12/06 06:05
ttp://members.tripod.co.jp/hi_tag/cpp/freetool00.html
でも、見て
逆ポーランド法の演習でもやっとけ

321 名前:デフォルトの名無しさん :02/12/06 10:05
>>316
>使い方もわからないです

おいおいC:\borland\bcc55\readme.txtくらい読めよ

322 名前:デフォルトの名無しさん :02/12/06 10:45
>>316
つーかフリーに頼らずに買えよ。
たった1〜2万の自己投資をケチるなよ。

323 名前:デフォルトの名無しさん :02/12/06 11:57
borlandなら買え。
マイクロソフトなら落せ

324 名前:デフォルトの名無しさん :02/12/06 13:28
(´-`).。oO( 今にも死滅しそうだってのに悠長だね…)

325 名前:デフォルトの名無しさん :02/12/06 13:29
(´-`).。oO( すまん、誤爆だ…)

326 名前:デフォルトの名無しさん :02/12/06 13:40
g++使え

327 名前:デフォルトの名無しさん :02/12/06 13:47
Stroustrupマンセー!
凄いですね。

328 名前:デフォルトの名無しさん :02/12/06 13:59
センセイ質問!


CString hoge(int a)
{
CString s;

s.Format("%d",a)
return s;
}


hoge()の呼び出し元で戻り値は破壊されちゃってますか?

329 名前:デフォルトの名無しさん :02/12/06 14:02
C++言語自体の学習だけが目的なら、VC++もBCBもいらないだろう。
Borlad-C++5.5で十分過ぎる。gcc-3.2でもいい。

しかし、そこは人情というもの、C++を覚えたらすぐにWindowsプログラム
を書いて画面に表示してみたくなるに違いない。やっぱりコンソール画面
だけでは飽きる。

で、VC++でMFCか、BCBでVCLを弄びたくなるはずだ。飽きが来てやめて
しまわないように、製品版の言語を買っておくとよい。また、金を払ったと
いう自覚があれば、触らずにお蔵入りなんて勿体ない事もせずに済む
だろう。

330 名前:デフォルトの名無しさん :02/12/06 14:04
>>328
CString& hoge() なら破壊されるが、実体を返しているので、return文を
実行した時にコピーコンストラクタが呼び出されて、コピーを返すので
問題ない。

331 名前:デフォルトの名無しさん :02/12/06 14:19
質問させてください。
ポインタのポインタの所で
(void *)*a
というのが出てくるのですが
(void *)
の意味が分りません。
何でvoidをつけるんですか?
教えてください。

332 名前:デフォルトの名無しさん :02/12/06 14:20
>>331
気にすんな。

333 名前:デフォルトの名無しさん :02/12/06 14:21
>>330

CString&返しなら「戻り値」は隠しポインタであって
hoge()の呼び出し元では破壊されてないだろ

>>328はs自体が戻り値であると勘違いしているように見受けられるが
お主もそのケあるんじゃないか?

334 名前:デフォルトの名無しさん :02/12/06 14:23
>>331
正体不明のオブジェクトへのポインタ

335 名前:デフォルトの名無しさん :02/12/06 14:24
>>333
(´,_ゝ`)プ

336 名前:デフォルトの名無しさん :02/12/06 14:32
(void *) なんて必要なのか?

337 名前:デフォルトの名無しさん :02/12/06 14:34
そもそも*なんて必要なのか? &でいいじゃん。

338 名前:デフォルトの名無しさん :02/12/06 14:35
>>335
333 のどこがおかしいんだ?

339 名前:デフォルトの名無しさん :02/12/06 14:36
>>337
ポインタ無しで多態をどう表現する?

340 名前:デフォルトの名無しさん :02/12/06 14:38
>>339
C++の限界だな。

341 名前:デフォルトの名無しさん :02/12/06 14:40
なんだかCすら理解していないくせにC++を語ろうとする香具師が紛れ込んでるな。

342 名前:デフォルトの名無しさん :02/12/06 14:46
気に食わなきゃchar**でもなんでも使え。

343 名前:331 :02/12/06 14:49
レスありがとうございます。
、、、皆さんの会話がまったく理解できません
出直してきます><

344 名前:デフォルトの名無しさん :02/12/06 14:51
>>339, >>340
struct giko { virtual void wara() = 0; };
void wara(giko& r) { r.wara(); }
void wara(giko* p) { p->wara(); }
限界とは?

345 名前:デフォルトの名無しさん :02/12/06 14:53
>>338
やってみりゃわかるよ。

346 名前:デフォルトの名無しさん :02/12/06 14:55
>>333
そうか?「ローカル変数への参照をreturnしようとしている」というエラーが
出てコンパイルできないぞ。

347 名前:333 :02/12/06 14:58
>>346
漏れが言いたいことそのままだが?

348 名前:デフォルトの名無しさん :02/12/06 14:58
>>343
コールバックとかスレッドとか使えばいやでも
ありがたく感じるよ。

349 名前:デフォルトの名無しさん :02/12/06 15:04
>>346
あんた、関数の型を CString じゃなくて CString& にしてないか?

350 名前:338=349 :02/12/06 15:05
ごめん、何か勘違いしていたよ

351 名前:デフォルトの名無しさん :02/12/06 15:17
333は頭がおかしい

352 名前:デフォルトの名無しさん :02/12/06 15:17
>>347>>349
スマソ。
> CString&返しなら「戻り値」は隠しポインタであって
> hoge()の呼び出し元では破壊されてないだろ
の意味を勘違いして、CString&返しなら破壊されないと読んでいた。

353 名前:デフォルトの名無しさん :02/12/06 15:18
ネタ萎え。
ネタは単発糞スレでどうぞ。

354 名前:333 :02/12/06 15:18
>>351
遊んで欲しけりゃオマエも何か言え

355 名前:デフォルトの名無しさん :02/12/06 15:28
>>333は参照と値の区別が付いてない上に
「ポインタの値」の類推で勝手に「参照の値」なるものを捏造している。
多くの実装で参照がメモリ間接を利用していようが、それは
C++において参照がポインタと同等であることを意味するわけではない
第一それ以前にメモリ間接=ポインタということが言える訳でもない

356 名前:333 :02/12/06 15:34
>>355
では訊こう
貴殿の考える参照と値の区別とは?

357 名前:デフォルトの名無しさん :02/12/06 15:42
328 のようなコードでは、関数の型にかかわわりなく s は破棄される。
だから関数の型が CString& では正常に返せない。
関数の型が CString の場合は、return の時点での s のコピーが渡る。

コンパイラによっては s の実体をとっておき、それをそのまま返すように最適化
するかも知れないが、漏れは見た事がない。

358 名前:デフォルトの名無しさん :02/12/06 15:44
>>356
本気で聞いてるのか…?

359 名前:デフォルトの名無しさん :02/12/06 15:47
>>356
その前に、あんたが参照と値をどう捕らえているのか説明してくれ。

360 名前:328 :02/12/06 15:50
みなさんレスさんくす。

よーするにs自体は破壊されるけどsの内容は呼び出し元でも保証される…って認識で合ってますか?

361 名前:デフォルトの名無しさん :02/12/06 15:52
(´-`).。oO(…貴殿?)

362 名前:デフォルトの名無しさん :02/12/06 15:52
そうだね

363 名前:デフォルトの名無しさん :02/12/06 15:53
>>361
(´-`).。oO(イタいよね、その言い方。

364 名前:デフォルトの名無しさん :02/12/06 15:54
>>328
関数がリターンするところをステップでトレースすると理解が深まるよ。

365 名前:宿題教えて! :02/12/06 15:56
#include<iostream.h>
/*行列を表すクラス*/
template <class T=int,int a=3> class Matrix {
T x[a];
public :
Matrix();
T &set(int row,int col){return x[(row-1)+(col-1)*a];}
//+演算子
friend Matrix<T,a> operator+(Matrix<T,a> &n,Matrix<T,a> &m){
int i;
Matrix<T,a> ret;
for(i=0; i<a*a; i++){ret.x[i] = n.x[i]+m.x[i];}
return ret;
}
void show();
};
//コンストラクタ
template<class T,int a> Matrix<T,a>::Matrix(){
int i;
for(i=0; i<a*a; i++) x[i] = 0;}
//表示関数
template<class T,int a>void Matrix<T,a>::show(){
int i;
for(i=0; i<a*a; i++){cout << x[i] << " " ;if(i%a == 2)cout << "\n";}
}

366 名前:デフォルトの名無しさん :02/12/06 15:56
つーか、CString の代わりに、コンストラクタとデストラクタで this のアドレスを
cout に投げる class を書いて実験すればいいのに。

367 名前:宿題教えて!続 :02/12/06 15:56

int main(){
int length=3;
Matrix<int ,3> a,b,c;//3行3列の行列
int bNumber[9] = {6,5,4,3,2,1,9,8,7};
int i;
for(i=0; i<length*length; i++){a.set(i%length+1,i/length+1) = (i+1)*10;//i*10をセットする}
for(i=0; i<length*length; i++){b.set(i%length+1,i/length+1) = bNumber[i];//あらかじめ用意されたbNumberを入れる}
c.show();
c = a + b;//ここが実行されない
c.show();
return 0;
}
/*C++ですが、行列のクラスをテンプレートで実現して、
+ - * の演算子とinverse関数を実現せよ!とか云って来るんですよ
だから・・・お願いします。教えてください。
+のとこだけでよいので・・・*/

368 名前:デフォルトの名無しさん :02/12/06 15:57
> 365 :宿題教えて! :02/12/06 15:56

叩かれまくりたいスレ違い君の登場

369 名前:333 :02/12/06 15:58
>>357
まあそうなんだが
話というか因果の順序に違和感を覚えるぞ
関数の型がCStringの場合はreturn式が何であるかにかかわりなくCString型の戻り値が生成され、戻り値を初期化するコンストラクタに渡されるのがreturn式の評価結果である
関数の型がCString&の場合はreturn式が何であるかにかかわりなくCString&型の戻り値が生成され、戻り値の参照先として渡されるのがreturn式の評価結果である
hoge()の呼び出し側でCString&型の戻り値がデッドリンクになっていれば未定義動作

ポインタという用語を使うのが気に入らなきゃこんな説明だろうさ

最適化の過程の中で一時オブジェクトを削減するコンパイラは結構あるぞ
コピーコンストラクタが実行されないのにコピーコンストラクタをprivateにすると
文句たれるコンパイラ見たことないのか? 某ランドもその1つ

370 名前:デフォルトの名無しさん :02/12/06 15:59
(´-`).。oO(…おっぱい?)

371 名前:デフォルトの名無しさん :02/12/06 16:00
>>365 http://pc3.2ch.net/test/read.cgi/tech/1036572120/l50

372 名前:宿題教えて! :02/12/06 16:01
スレ違いスマソ
>>371そちらに質問します

373 名前:333 :02/12/06 16:07
>>359
おまえ>>355か?
漏れに反問する前に
漏れを「区別が付いていない」と言い切った
ことの挙証責任を果たしてからにしろ

374 名前:デフォルトの名無しさん :02/12/06 16:10
(・∀・)オオ!

375 名前:デフォルトの名無しさん :02/12/06 16:27
「区別していない」と言い切ったことを実証するために
333がどう区別できていないかを検証したいので
333が参照と値をどう捕らえているのか聞かせて欲しいな

376 名前:デフォルトの名無しさん :02/12/06 16:30
#include <stdio.h>など良く使う物をみなさんは単語登録してるのでしょうか?
マジ質問です

377 名前:333 :02/12/06 16:32
>>375
おまえは>>355か?
おまえは333の時点の発言内容だけで
漏れを「区別ができてない」と断定できたんだろ
自分に揚げ足取られない自信がないからって
逃げ回ってんじゃねえよ
恥をかくのが怖ければとっとと引き下がれ

378 名前:デフォルトの名無しさん :02/12/06 16:33
>>377
説明できないんですね?(藁

379 名前:333 :02/12/06 16:35
>>378
説明できないかどうか漏れの今までの発言を読み返してみろ

380 名前:デフォルトの名無しさん :02/12/06 16:35
>>376
してません。
小説家は「目次」のハンコを持っているのか、というくらい馬鹿らしい質問。
時間がかかるのは本文。

381 名前:デフォルトの名無しさん :02/12/06 16:37
>>376
俺もしてない。
イチイチIMEをON/OFFしたり変換候補を選択するくらいなら
そのまんま打ったほうがはやい。

382 名前:デフォルトの名無しさん :02/12/06 16:38
>>379
釣れた( ´,_ゝ`)

383 名前:デフォルトの名無しさん :02/12/06 16:42
333の言いたいのは、
スタック上のCStringが破棄されて不正なアドレスを指している「CString &」がちゃんと返っている、
ということ? それならそのとおりじゃん。何がおかしいのかな? ようわからん。
でも貴殿なんて言葉を使う変な奴の味方はしたくないね…。

384 名前:デフォルトの名無しさん :02/12/06 16:44
>>376
古い形式のヘッダは知らん。

385 名前:333 :02/12/06 16:45
>>383
>でも貴殿なんて言葉を使う変な奴の味方はしたくないね…。

なんだよー
煽り厨と議論の相手を区別して呼んだのが
そんなに気持ち悪かったんか?

まあ相手あってのことだ
気に入らないなら気をつけるよ

386 名前:デフォルトの名無しさん :02/12/06 16:49
>>376
それすらタイプするのが面倒ならプログラマーやめたほうがいいよ。
その数千倍くらい毎日タイプするのが仕事なんだから。
#includeなんて全体のタイプ量の0.1%以下。

387 名前:386 :02/12/06 16:53
まだ初めて3日くらいだったので
タイピングですね、わかりました
ありがとう

388 名前:376 :02/12/06 16:53
間違い
386→376です

389 名前:デフォルトの名無しさん :02/12/06 16:53
>>333
粘着しないで放置すればいいのに。

390 名前:333 :02/12/06 17:01
>>389
遊んで欲しけりゃ○○しろつーたら
○○しよったんで約束を守った

ちゃんと遊んでやろうとしたのに
ずいぶんつまらん香具師だったんで
結果的にああなってしまった

すまそ

391 名前:デフォルトの名無しさん :02/12/06 17:05
333 は 383 を同意または否定してくれ。
話が決着してない。

392 名前:デフォルトの名無しさん :02/12/06 17:06
ほかでやってよ(´・ω・`)

393 名前:333 :02/12/06 17:11
>>391
わかった

>>383が言っていることと漏れの言いたいことは同じだと思う

394 名前:デフォルトの名無しさん :02/12/06 17:14
他でやれよ( ´∀`)

395 名前:デフォルトの名無しさん :02/12/06 17:18
ローカル変数の参照を返すような関数はそもそもコンパイルが通らない。

396 名前:デフォルトの名無しさん :02/12/06 17:22
>>395
>>346でガイシュツ

397 名前:デフォルトの名無しさん :02/12/06 18:51
int &f(int x){int *p=&x;return *p;}
これはもちろん未定義だ。
「ちゃんと返っている」とか言ってる馬鹿は誰だ?出て来い

398 名前:デフォルトの名無しさん :02/12/06 18:54
つまんねえよヴォケ( ´∀`)

399 名前:デフォルトの名無しさん :02/12/06 18:59
蒸し返してなんだが、
「参照と値の違いって?」と聞く奴と
「参照とポインタの違いって?」と聞く奴で
どちらがセンスがいいかというと、
もちろん後者。

400 名前:デフォルトの名無しさん :02/12/06 19:03
>>397
そうか?pを返すならともかく、*pを返すのなら話は別では?

401 名前:デフォルトの名無しさん :02/12/06 19:07
xはろーかるヴぁりあぶる

402 名前:デフォルトの名無しさん :02/12/06 19:43
>>401
関係ない。
return *p; は x の参照ではなく、x の値を返している。

403 名前:402 :02/12/06 19:44
ごめん、関数の型読み違えてた。

404 名前:  :02/12/06 20:34
>>399
わざわざ蒸し返すようなことか?

405 名前:デフォルトの名無しさん :02/12/06 21:50
以下のコードについて質問です。

--
const char* getName() const;
--

const は java でいうところの final でメソッド再定義禁止というのは分かります、が、
カッコ の後の const はどういう意味ですか?


406 名前:デフォルトの名無しさん :02/12/06 21:53
>>405
みてちょ
http://www.microsoft.com/japan/developer/library/vccore/_langref_constant_member_functions.htm

407 名前:デフォルトの名無しさん :02/12/06 21:54
> java でいうところの final でメソッド再定義禁止
そーゆーモノは C++ にはありません。

const char* は getName() が (const char*) 型を返す事を示します。
後ろの const は、そのメンバ関数がメンバ変数を変更しない事を示します。

408 名前:333 :02/12/06 22:20
>>397
リンク自体がないこととデッドリンクの違いがわからない馬鹿は誰だ? 出て来い

>>399
では訊こう
const float* p = &float(1); // a
const float& r = 1; // b
aとbの違いは何だ?

409 名前:333 :02/12/06 22:21

あんたの考えるaとbの違いは何だ?
^^^^^^^^^^^^^^
ここが訊きたい

410 名前:デフォルトの名無しさん :02/12/06 22:29
> const float* p = &float(1); // a
コンパイル通りませんけど。

411 名前:デフォルトの名無しさん :02/12/06 22:32
何か変な風が吹き荒れてるな。

412 名前:デフォルトの名無しさん :02/12/06 22:41
333は「未定義」を理解していないようだ
さらに実装において有効であることと
C++の仕様上未定義であることは別問題。
333は実装と規格という違う次元のものを完全に混同してしまっている

ある実装において
int &f(int x){int *p=&x;return *p;}
がint f(int x){return x;}と同様に動くからといって
これが規格に沿ったコードであるというわけではない
いうなればコピーコントロールCDだ

413 名前:333 :02/12/06 22:49
>>410
なあ、それじゃ答えになってないんだよ

int a[1];
int& r[1] = { a[0] };
int* p[1] = { &a[0] };

「違い」って何だ?

414 名前:デフォルトの名無しさん :02/12/06 22:50
>>410
もうネタはいいから真面目な質問してくれよ

415 名前:デフォルトの名無しさん :02/12/06 22:53
ここまで粘着してるヤツも久しぶりだな

416 名前:デフォルトの名無しさん :02/12/06 22:56
VBで作成したactivex.dllをVC6.0で
使用しようとしているのですが、
どうしてもスレッドクラスから呼び出すと
エラーになってしまいます。
なにかやり方があるのでしょうか?
(クラスウィザードを使用しCOleDispatchDriverから派生された
クラスで試みてます)


417 名前:デフォルトの名無しさん :02/12/06 22:58
>>416
釣りやネタでないならどんなエラーか書こうな。

418 名前:416 :02/12/06 23:05
>>417
すみません。
バンドルされていない例外は???.exe(MSVBVM60.dll)にあります
0xc0000005: Access Violation.
です。

419 名前:デフォルトの名無しさん :02/12/06 23:06
>>413
p には代入できるけど r には代入できない。

420 名前:デフォルトの名無しさん :02/12/06 23:14
>>413
質問の仕方がまちがっていないか(w

inta;
int&r = a;
int*p =&a;


421 名前:333 :02/12/06 23:15
>>420
いんや、まさしくお前さんに聞きたい質問だ

int a;
int& r = a;
int* p =&a;

int a[1];
int& r[1] = { a[0] };
int* p[1] = { &a[0] };

「違い」って何だ?

422 名前:デフォルトの名無しさん :02/12/06 23:24
333が何をしたいのか今一分からない。
ちょっと言いたいことを簡潔にまとめてくれないか?>333

423 名前:デフォルトの名無しさん :02/12/06 23:24
>>421
だから、コンパイル通らないものの違いを訊いてどうするんだよ。

424 名前:デフォルトの名無しさん :02/12/06 23:27
> int& r[1]

(゚Д゚)ハァ?

425 名前:333 :02/12/06 23:29
>>422
漏れの言いたいことは>>369ですでに述べ終えたが
まだ遊んで欲しそうに因縁つけてくる小僧の相手をしてやってる

426 名前:デフォルトの名無しさん :02/12/06 23:38
CString hoge = s;
CString &hoge = s;
が実行されてるだけだろう。
で、s は関数を抜けるとデストラクトされるので CString& だとデッドリンクになる。
だから 369 は間違っていないが、あのように回りくどく言う必要はない。

で、それと今話してる内容と何の関係があるんだ?
てっきり新しい話題だと思っていたのだが。

427 名前:デフォルトの名無しさん :02/12/06 23:45
つーか、421 の質問が何を目的としてるのか知りたいんだが。

428 名前:デフォルトの名無しさん :02/12/06 23:55
>>427
わからん。精神的に病んだものを感じるんだよな。なんだか。

429 名前:デフォルトの名無しさん :02/12/07 00:01
>>351

430 名前:デフォルトの名無しさん :02/12/07 00:02
だよなあ、質問が間違っていないかと指摘されて上での再掲だからなあ・・・。

431 名前:デフォルトの名無しさん :02/12/07 00:03
じゃんけんのプログラムをつくっているのですが、コンピューターの手をランダムに
出す必要があるのでsrand()を使うのはわかるのですが
#include <iostream>
#include <cstdlib>
using namespace std;

static int pre=0;//前回の手
static int crn=0;//今回の手

extern int draw;
extern int win;
extern int lose;

int kettei()
{
srand(pre*(win+lose)+draw);←()の中の仕組みを解説してくれる方がいたら教えてください
crn=rand()%3;
pre=crn;
return crn;
}


432 名前:デフォルトの名無しさん :02/12/07 00:09
>>431
1 回のプログラム実行で srand() を 2 回以上呼ぶのが間違い。

433 名前:デフォルトの名無しさん :02/12/07 00:11
> extern int draw;
> extern int win;
> extern int lose;

本気で C++ を使うつもりある?

434 名前:デフォルトの名無しさん :02/12/07 00:13
>>431
スレ違い。C++に関わるのは、
#include <iostream>
#include <cstdlib>
using namespace std;
の無問題な部分だけ。

435 名前:デフォルトの名無しさん :02/12/07 00:13
>>431
乱数の種を掻き回そうとしてるだけ

436 名前:デフォルトの名無しさん :02/12/07 00:14
>>433 そう書いてあったんだから仕方ないべ

437 名前:デフォルトの名無しさん :02/12/07 00:23
> つくっているのですが

> そう書いてあった

(゚Д゚)ハァ?

438 名前:デフォルトの名無しさん :02/12/07 00:24
>>431
掻き回していない。
これだと、同じ入力をすれば必ず同じ結果になる。

439 名前:デフォルトの名無しさん :02/12/07 00:28
>>432
疑似乱数の周期を嫌って、結果によってシードを再設定しているんだろ。
世の中にはそういうのが必要なプログラムもあるんだよ。

で、式の中身はだいたい適当でいいんだよ。

440 名前:デフォルトの名無しさん :02/12/07 00:30
>>438
drawがどんな動きをするのか不明だけれど、
前回の手を元データにして勝ちてる手を推定しようとしているのでは?

441 名前:デフォルトの名無しさん :02/12/07 00:32
>>440
こう書いてありますが何か?

> コンピューターの手をランダムに出す必要があるので

442 名前:デフォルトの名無しさん :02/12/07 00:33
> シードを再設定

それが必要な理由を教えてください。

443 名前:デフォルトの名無しさん :02/12/07 02:33
friendは、極力使わないほうがいいとのことですが、goto のループ2重抜けみたいに
使わなくてはいけない時って、どんな時ですか?

444 名前:デフォルトの名無しさん :02/12/07 02:40
プライベートメンバが必要な関数オブジェクトとか・・・。

445 名前:デフォルトの名無しさん :02/12/07 02:43
>>443
2項演算子のオーバーロードで、左右両項に暗黙の型変換を適用したいとき。

446 名前:デフォルトの名無しさん :02/12/07 04:39
>>443
コンストラクタをpublic以外にするなど特殊な生成のされ方をするクラスのインスタンスを
生成・解放・取得なんかするのを別なクラスのメソッドで行なおうとする時。

447 名前:デフォルトの名無しさん :02/12/07 09:52
>>443

まず、あるメソッドをprivateに保ちたい、という要求があるとする。

特別なクラス、たとえばシステムの中枢部や、デバッグ用のクラスがあり、
そのメソッドを使わなければならない、という要求が生まれることがある。

これを実現するには、そのメソッドをpublicにしなければならない。
しかしそうすると、想定したシステム中枢部やデバッグクラスではない
普通のクラスからもアクセスできてしまう。これはよろしくない。

friendを使うと、そのメソッドをprivateでキープしたままに、
システム中枢部がアクセスできるようになる。

448 名前:デフォルトの名無しさん :02/12/07 12:17
>>443
friend を乱用してはいけない。既に言われているように
どうしても使わなければいけない場面もあるけれど、
それ以外の場面で性能を気にしないなら、
外部用にインターフェイス分けをして、見せたい部分には実体を、
「外部」には外部用インターフェイスのみのプロクシを渡すと良い。


449 名前:デフォルトの名無しさん :02/12/07 13:56
>448
> 「外部」には外部用インターフェイスのみのプロクシを渡すと良い。
わざわざプロクシクラス作らなくても、必要なメソッドのシグネチャだけ純粋
仮想関数で宣言した基底クラスを用意してやって、それを多重継承するの
が普通かと。

実装の多重継承はいろいろトラップが多いが、インターフェースの多重継承
なら、あまり問題ない。性能面でも間接参照が一回入るだけなので、タイトな
ループ中で呼ぶのでなければまず問題ない。

450 名前:デフォルトの名無しさん :02/12/07 14:44
333は逃げたか

451 名前:333 :02/12/07 14:48
>>450
釣れました。

452 名前:デフォルトの名無しさん :02/12/07 14:54
>>449
そういえば、g++にはsigofってのがあった

453 名前:デフォルトの名無しさん :02/12/07 14:54
VC++.netで、codecvt、wcin使ったことある人いますか?
おれ、使ってみたんすけど、うまく変換できません。
わかる人いたら、まともに使えてるかどうか教えてください。

よろしく

454 名前:デフォルトの名無しさん :02/12/07 14:55
C++にはコンテキストの概念が存在する! ?

455 名前:デフォルトの名無しさん :02/12/07 14:56
>>451
他で(メ´∀`)

456 名前:デフォルトの名無しさん :02/12/07 15:04
>>454にはコンテキストの概念が存在しないようです。


457 名前:454 :02/12/07 15:06
(・∀・)?

458 名前:デフォルトの名無しさん :02/12/07 15:38
>>453
ここは言語のスレであって、VC++.netのスレではありません
他いけや

459 名前:デフォルトの名無しさん :02/12/07 18:47
コンテキストの概念とは?
何についてのコンテキストの事を指しているのだろう?
おまえのコンテキスト(文脈)がわからん。
というわけで>>456に激しく同意。

460 名前:デフォルトの名無しさん :02/12/07 18:50
>>458
どこいけば?

461 名前:デフォルトの名無しさん :02/12/07 18:56
.netとついてるスレなら山になって腐ってるだろうが。

462 名前:454 :02/12/07 19:16
めんどくせ

463 名前:デフォルトの名無しさん :02/12/07 19:41
馬鹿はもういいよ。さっさと死んでくれ。

464 名前:デフォルトの名無しさん :02/12/07 19:42
インドくせー

465 名前:デフォルトの名無しさん :02/12/07 20:15

      ∧_∧          _ _     .'  , .. .∧_∧
     ( ´_ゝ`)   _ .- ― .= ̄  ̄`:, .∴ '     ( >>464
    /     '' ̄      __――=', ・,‘ r⌒> _/ /
   / /\   / ̄\-―  ̄ ̄   ̄"'" .   ’ | y'⌒  ⌒i
 _| ̄ ̄ \ /  ヽ \_              |  /  ノ |
 \ ̄ ̄ ̄ ̄ ̄ ̄ \__)              , ー'  /´ヾ_ノ
  ||\            \          / ,  ノ
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄          / / /
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||          / / ,'
  ||  ||           ||       /  /|  |
                       !、_/ /

466 名前:デフォルトの名無しさん :02/12/07 23:20
>>465
インド人でつか?

467 名前:デフォルトの名無しさん :02/12/07 23:33
なんか笑えた。

468 名前:デフォルトの名無しさん :02/12/08 12:01
stringstreamに出力して、出来上がった内容を2回繰り返して入力に使いたいです。
でも、seekgして2回読ませるとダメだったです。
そこで、1回目の出力の前にstrでstringに覚えておいて、
2回目以降は覚えといた奴を設定しなおしてから読ませるようにしたら、うまくいきました。

でも、出来上がった出力のサイズによっては巨大なコピーが発生すると思います。
↑のやつよりもっと上手い方法は無いでしょうか?

469 名前:デフォルトの名無しさん :02/12/08 13:15
ちょっと聞きたいんだが、コマンドラインからパラメータ受け取るとき、
例えばperlなら Getopt::Long とかがあるけど、C++でそういうライブラリって無いの?
世の中一般に出回ってるものが既にあれば、そっち使ったほうがいいなと思って。

470 名前:デフォルトの名無しさん :02/12/08 13:17
>>469
google getopt c++

471 名前:デフォルトの名無しさん :02/12/08 13:22
       ∧_∧      ∧_∧
     _( ´∀`)    (´∀` )
  三(⌒),    ノ⊃    (    )   ←>>470
     ̄/ /)  )      | |  |
    . 〈_)\_)      (__(___)

          ∧_∧  .∧_∧
         (  ´∀) (´∀` )
       ≡≡三 三ニ⌒)    .)
        /  /)  )  ̄.| |  |
        〈__)__)  (__(___)

           ∧_∧  ,__ ∧_∧
          (    ´)ノ ):;:;)∀`)
          /    ̄,ノ''    )
         C   /~ / /   /
         /   / 〉 (__(__./
         \__)\)
                      ヽ l //
            ∧_∧(⌒) ―― ★ ―――
            (    ) /|l  // | ヽ
           (/     ノl|ll / / |  ヽ
            (O  ノ 彡''   /  .|
            /  ./ 〉
            \__)_)
            ̄ ̄ ̄ ̄ ̄
 死ね!

472 名前:469 :02/12/08 15:10
じゃあ自分で作るか。どうせ大した手間じゃないし

473 名前:デフォルトの名無しさん :02/12/08 15:16
>>472
フツーにGNUのgetoptでも使っとけば?

474 名前:470 :02/12/08 15:37
俺何か悪いことした??

475 名前:デフォルトの名無しさん :02/12/08 16:07
>>474
いや・・・全然悪くないと思うけど・・・。
>>471はAA貼りたかっただけじゃないのかな。気にすんな。

476 名前:デフォルトの名無しさん :02/12/08 16:10
俺はgetoptにSTLの皮かぶせて使ってる。

477 名前:469 :02/12/08 17:58
getopt見てみたけど、C++でこのライブラリ使うのはアレだなと…
C風の要素が入るとなんか嫌な感じなんで、やっぱ作る

478 名前:デフォルトの名無しさん :02/12/08 18:15
>>477
だからラップしたらいいんじゃないの?
Argument::immediately_return(false);
Argument::check("help", no_argument);
Argument::check("version", no_argument, true);
Argument::check('o', required_argument);
Argument::parse(argc, argv);
if (Argument::error()) {
cout << "エラー" << endl;
exit(-1);
}

cout << "オプション" << endl;
for (Argument::result_type::iterator it = Argument::options().begin(); it != Argument::options().end(); ++it) {
cout << (*it).first << " = " << (*it).second << endl;
}

cout << endl;
cout << "オプションではない引数" << endl;
for (Argument::result_type::iterator it = Argument::no_options().begin(); it != Argument::no_options().end(); ++it) {
cout << (*it).first << endl;
}


479 名前:デフォルトの名無しさん :02/12/08 18:17
↑みたいな感じで。(今一ダサい感があるのだが)


480 名前:デフォルトの名無しさん :02/12/08 18:18
>>468
こういう事?

int main()
{
std::stringstream ss;
int i, j;

ss << 1 << ' ' << 2 << std::endl;
std::cout << ss.str();
ss >> i >> j;
std::cout << i << ' ' << j << std::endl;
ss.seekg(0);
ss >> i >> j;
std::cout << i << ' ' << j << std::endl;
}

481 名前:玉三郎 :02/12/08 19:58
C++のことならここで話せ!

482 名前:468 :02/12/08 23:18
>>480
そうそう、それでつ・・・
って、それ動かしたらちゃんと2回読めてる・・・。
なにがちがうのか調べてみます。

483 名前:デフォルトの名無しさん :02/12/08 23:38
"class"ってtypenameかstructにすべて置き換え可能だと思うんだけど、合ってる?
必ずclassを書かなければなければならない所って無いよね。

いや、素朴な疑問・・・

484 名前:デフォルトの名無しさん :02/12/08 23:50
>>483
template<template<class> class Tn> class ttp {};

2番目のclassだけは置き換え不可能と思われ。

485 名前:デフォルトの名無しさん :02/12/09 00:26
>>484 thanks.
テンプレート引数がテンプレートの奴か・・・
見逃してた。うーん、不覚。

486 名前:468 :02/12/09 00:33
while( std::getline( ss , buffer ) )
{
...
}
という処理を繰り返そうとしてたのですが、最初のループの終了条件で、
ss.fail()な状態になってしまって、ストリームが使用不可になってた模様。
ss.clear()してからss.seekg(0)したらもっかい最初から読めました。
これにて解決。

487 名前:デフォルトの名無しさん :02/12/09 00:55
C++の標準ライブラリのストリームは、一旦failbitやeofbitが立ってしまうと、
seekしてもこれらのフラグはクリアされず、明示的にclear()してやる必要が
ある。

CからC++に移ってきた人は大抵一度はここで引っ掛かるようだ。

488 名前:デフォルトの名無しさん :02/12/09 03:57
継承についてお聞きしたいんですが
class Aとclass Bがあり、Aの中にはprivateでCというメンバが
あったとします。このときmainでAとBのオブジェクトを生成し,
Bのオブジェクト内のメンバ関数からAのオブジェクト内のCに
アクセスしたいときどうすればいいんでしょ?


489 名前:デフォルトの名無しさん :02/12/09 04:04
>>488
class Aの中にfriend class Bを埋め込むとか?

490 名前:デフォルトの名無しさん :02/12/09 04:07
どのあたりが継承の話なんだろうか。。。?

491 名前:デフォルトの名無しさん :02/12/09 04:09
class A{
friend class B;
int c;
};
友達になっておけば、BからはAの中は見放題。

#なぜに継承?

492 名前:デフォルトの名無しさん :02/12/09 04:12
class A
{
friend class B;
}
class B : public A ←多分このあたりじゃない?
{
}

493 名前:デフォルトの名無しさん :02/12/09 04:14
>>490
>>491
すみません全く継承の話じゃないですね。
friendが関数以外に使えるとは知りませんでした
早速やってみます。

494 名前:デフォルトの名無しさん :02/12/09 10:47
>>492
もしそうならfriendの必要はないな…。

class A
{
protected:
 int C;
};

class B : public A
{
 foo() { C = 0; }
};

495 名前:デフォルトの名無しさん :02/12/09 12:06
すみません、下記のコードがコンパイル時にエラーになるような、
「クラスじゃなくて実体に対して定義されるイテレータ」のようなものはないですか?
なんでこんな怖い仕様にしとくのかなと思って・・・

#include <string>
#include <iostream>
using namespace std;
void main()
{
string a, b;
a = "abcde";
b = "f";

for (string::iterator i=a.begin(); i!=b.end(); ++i) ←このb.end()
cout << *i;
}


496 名前:デフォルトの名無しさん :02/12/09 12:26
>>495
それはC++には期待できないだろう。
STLportのデバッグモードで実行時エラーにするのが精一杯かと。

497 名前:デフォルトの名無しさん :02/12/09 12:34
c++で
pop3に接続して
list取得して
文字は化けててもいいからメールを見る
というだけのプログラムって結構コード長くなるんですか?
perlだと、数行で実現してるの他スレでみたけど
やっぱりc++だとめんどいんですか?

498 名前:デフォルトの名無しさん :02/12/09 12:57
>>497
C/C++の場合、言語仕様にそういうのは含まれてないので適当なライブラリを使います。
使うライブラリはOSやコンパイラ、その付属ライブラリに依存します。
PerlとC++を同列にしないで欲しいなぁ。
C++Builderみたいに簡単にWindowsアプリを作れない言語だろ?

499 名前:デフォルトの名無しさん :02/12/09 13:35
>>497
Perlだってライブラリ使ってるか外部コマンド使わないと数行にはならない。
その辺用意すればC++だって手間はあんまり変わらん。
言語仕様上多少ソースコードは長いかもしらんが。


500 名前:デフォルトの名無しさん :02/12/09 13:48
500ゲットね。


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.