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


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

C++相談室 part22
501 名前:デフォルトの名無しさん :03/08/19 06:46
>>500
オリジナルを動的に書き換えるのは(確か)無理。
char型の配列を書き換えてcallならできるだろうけど。

502 名前:デフォルトの名無しさん :03/08/19 06:52
配列にコピーしたいから終端を知りたいんですけど。

503 名前:デフォルトの名無しさん :03/08/19 06:58
>>502
だから無理。はじめから配列にアセンブラで命令入れとけ。

504 名前:500 :03/08/19 07:08
回答どうもありがとうございます。
WriteProcessMemoryでどうにかなるかな?
と思ったのですが、無理なのですね〜勉強になりました。

御教授いただいたchar型配列のcallを試してみます。
どうもでした。ちなみに502は私ではありませんが、すいませんです。

505 名前:502 :03/08/19 07:16
じゃあなんで終端を知りたいんだろう。

506 名前:500 :03/08/19 07:28
>505
そうでした・・すいません。
最初と変わって申し訳ないのですが、オリジナルの関数以外も視野に入れさせてください。
書き換えは不可能でも、関数の内容の読み取りを行いたいんです。

そこで、ちょっと終端検出を考えて試してみたのですが
void a(〜)
{
 〜
};
void b(〜)
{
};

と隙間無しに宣言して、aとbのポインタを見てみると
bはaの直ぐ後ろに確保されているようで
b-1がaの終端ということでいいのかも、と思ったのですが
この方法は、あまりよくないんでしょうか・・?
メモリの確保のされ方はOSのほうの話になりますか?

507 名前: :03/08/19 08:00
>>506
OS じゃなくてコンパイラの出すコード次第だと思う。
(リンカも多少仕事する余地があるかな)

>この方法は、あまりよくないんでしょうか・・?
どっちにしろ移植性ゼロなんだから、C++ の話題じゃあないし、
あまり気にせず出来るやり方でやればよいと思うよ。
Win32 ならコード書き換えるんなら VirtualProtect(Ex) でチャクチャキっと。


508 名前:デフォルトの名無しさん :03/08/19 11:22
>>506
書き換えとか読み取りとかって・・・
コンパイルというものを理解しているかな?
アセンブラとか、マシン語とかって知ってる?
メモリーの中に、Cの関数が入っているわけじゃないよ。
最近はソースコードデバッガがあたりまえだから、そういう錯覚に陥りやすいのかもしれないけど。

509 名前:デフォルトの名無しさん :03/08/19 11:35
>>508
>>500みるかぎり、その辺は分かってるんじゃないかな

510 名前:デフォルトの名無しさん :03/08/19 17:35
書き換えたいんだったらOpenC++のMOP使う方が格好いいよ。


511 名前:デフォルトの名無しさん :03/08/19 17:40
てか、関数ポインタを使えと小一時間・・・

512 名前:デフォルトの名無しさん :03/08/19 19:40
スレ違い+マルチ
氏ね

513 名前:デフォルトの名無しさん :03/08/19 20:46
>>506
>と隙間無しに宣言して、aとbのポインタを見てみると
>bはaの直ぐ後ろに確保されているようで

そんな保証はない! ・・・と断言してみせた。
さあ次はお前の番だ。保証があると反駁してみせろ。

514 名前:デフォルトの名無しさん :03/08/19 21:13
コンパイラの設定によってはインラインになるかもしれんしな。

515 名前:デフォルトの名無しさん :03/08/19 21:45
ぶっちゃけ最初どういうプログラムかいて勉強すりゃいい?
javaだったらGUI簡単につかえてやる気がでるんだが・・・

どこかほどほどに大きいサンプルプログラムおちてるとこないっすか?

516 名前:デフォルトの名無しさん :03/08/19 21:53
今は大概のアプリケーションがフリーであったりするから
プログラミングのためのモチベーション維持するのが大変だよな。
大きなものはいきなりは作れないだろうし。

517 名前:デフォルトの名無しさん :03/08/19 23:45
>>515
Qtはいいよ!!!!

518 名前:デフォルトの名無しさん :03/08/20 02:38
クラスのメンバ変数?で三次元配列使いたいんですけど、初期値を代入する方法としてファイルも使わずスマートに記述する方法ってありますか?

519 名前:デフォルトの名無しさん :03/08/20 03:00
Qtよりgtkmmがいいよ

520 名前:デフォルトの名無しさん :03/08/20 03:27
>>518
もうちょっと、詳細な状況説明をおながいします。

521 名前:518 :03/08/20 03:37
>>520
理解できない馬鹿は黙ってろよ。


わかってる人、よろしくお願いします。

522 名前:デフォルトの名無しさん :03/08/20 03:47
単次元配列に初期値用意してループ使って初期化。

523 名前:518 :03/08/20 03:47
>>521
禿道。>>520みたいなやつって邪魔だよね。

524 名前:デフォルトの名無しさん :03/08/20 05:12
粘着Java厨、C#厨警報!
質問者はトリップを忘れずに。

525 名前:デフォルトの名無しさん :03/08/20 05:44
>>521>>523
三次元配列は固定長なのか、初期値は定数なのか、その辺次第だろ?

526 名前:デフォルトの名無しさん :03/08/20 06:38
ジサクジエンカコワルイ

527 名前:デフォルトの名無しさん :03/08/20 12:28
三次元配列を使いたいといっている時点でスマートじゃない罠。

528 名前: :03/08/20 13:04
C++ でメソッドの定義を記述するとき、
あいまいさがない限りは this-> を省略できますよね。
これの this-> を強制するようにはできますか?
それってコンパイラごとのオプションで #pragma で指定するようなものなんでしょうか。

ローカル変数で同じ名前の変数を使ってしまって、
それがバグの原因になるということが頻繁にあるので、
明示的に this-> を使うように強制したい、と思うんです。

使用しているのは gcc 2.95.2 です。

529 名前:デフォルトの名無しさん :03/08/20 13:05

コーディング規約

530 名前: :03/08/20 13:08
>>529
みんなが規約をきっちりと守ってくれたらいいんですが…

531 名前:デフォルトの名無しさん :03/08/20 13:08
>>528
コンパイラでは規制はできない。
そんな腐ったルールを強制するよりは
名前ルールのほうで回避するのが普通
(ローカル変数は小文字だけ、とかメンバ変数はm_つけるとかそういう類。
コーディング規約スレ参照)

532 名前: :03/08/20 13:14
>>531
やっぱりそうですか…
現状、ローカル変数は aaa_bbb_ccc 系の命名方法、
クラスの変数は aBbbCcc 系の命名方法にしているんですが
(Windows 系のプロジェクトとあわせるためもあって)、
守ってくれない人もいるんで強制できたらなぁと思った次第です。

PHP のようにデフォルトで強制される言語もあるんで、
Web がらみの仕事も多いうちではどうせなら C++ でも強制してしまえ、とばかりに。

533 名前:_ :03/08/20 13:14
http://homepage.mac.com/yamazaki8/hankaku09.html

534 名前:デフォルトの名無しさん :03/08/20 13:20
>>532
名前ルールで分割しない場合、
人間が見てもthisを付けるべきかの判断がそもそも困難なので
コードレビューをしてもミスを残す危険がある。
(問題をおこす場面というのは同一の名前の場合なわけだからね)

しかし名前ルールで分割する場合、宣言をレビューした時点で
誰もが違反を指摘できる。

535 名前: :03/08/20 13:27
>>534
宣言を見た時点で、その名前の付け方は違反だと指摘できる、ということですね。

問題は無意識にメンバ変数と同じ名前のローカル変数を使ってしまっても、
コンパイラにはそれを検出するすべがないということだと思うんです。
まぁコンパイラによっては警告を出してくれるものはあるみたいですけど。

ん?もしかしたら -Wall で g++ は警告出してくれるんじゃないか?
んなことないか。

536 名前:デフォルトの名無しさん :03/08/20 13:43
>>535
組織でやってるのなら確実にレビューをすればそういうチェックと共に
多くの問題を発見できるんだが脳。

ちなみに名前を隠蔽する場面ってのは、メンバ変数以外にも
引数やらローカル変数同士ですらあるし、 namespace + usingも罠だな。


537 名前: :03/08/20 14:01
>>536
ですね、特にヘッダファイルの中に using かかれた日にゃぁ。
それが与えられたライブラリのヘッダファイルだったりすると…最悪。

538 名前:デフォルトの名無しさん :03/08/20 14:23
ちょっとくだらない質問なのですが、お願いします。
shared_ptrが使える場合は、徹底的に使った方が良いでしょうか?

使わない方が良いっていう場面が、あったら教えてください。

539 名前:デフォルトの名無しさん :03/08/20 14:28
値でいい場合

540 名前:デフォルトの名無しさん :03/08/20 15:41
もう少しこう……いえ、いいです

541 名前:デフォルトの名無しさん :03/08/20 16:22
>>538
間違いなくatd::auto_ptrより速度が遅いと思うので、コンテナに入れる時
以外は使わなくていいんじゃなくて?

542 名前:デフォルトの名無しさん :03/08/20 16:22
std::auto_ptrのTYPOですたスマソ

543 名前:デフォルトの名無しさん :03/08/20 16:23
shared_ptrを一回参照はがししてしまった上でもう一回別のshared_ptrに入れたときには
カウンタが分裂してしまうこともあったりするかもね。

そういう使い方をしなきゃならんときはオブジェクト自身にカウンタを持たせて
intrusive_ptrのほうがいいかも、とか。
(メモリ効率もいいし)

544 名前:デフォルトの名無しさん :03/08/20 16:33
//hoge.hh
#if __cplusplus
extern "C++"{
#endif //__cplusplus
class Hoge{
Hoge();
~Hoge();
printHoge();
};
#if __cplusplus
}
#endif //__cplusplus

というようなclassを作った時に、
Hoge(), ~Hoge, printHoge
をC言語から呼び出して使う方法はあります?


545 名前:デフォルトの名無しさん :03/08/20 16:34
muri

546 名前:デフォルトの名無しさん :03/08/20 16:37
>>538
new は代表的な重い処理のひとつで、shared_ptr は参照カウンタの為に余分に
new が行われるから shared_ptr を多用し過ぎするとそこそこパフォーマンス影響がでるハズ。
だから、沢山作られるオブジェクトなら shared_ptr を使わずにその本体のオブジェクトに
参照カウントを内臓するような設計にしたほうがいい。
とは言っても例によって最近のマシンはパワフルだからフツーは shared_ptr を
使いまくっても問題ナッシングだとは思う。

547 名前:デフォルトの名無しさん :03/08/20 16:41
>>544
そもそも C では class が作れんし。

まぁ、無理やりそれっぽいことをすることはできる。
IDirectDrawSurface とかの COM のヘッダファイルが
ある程度参考になるのではないかと。

548 名前:デフォルトの名無しさん :03/08/20 16:41
>>541-543
あれから自分でソース読んでたのですがさっぱりで…助かりました。

速度はやはり落ちるのですね。ちょっと特殊な用途なので
参照はがしもありそうで…intrusive_ptrは初耳、勉強しておきます。
やっぱり訊いて良かった…。

ひとまずコンテナのみに使用しておきます。レスありがとうございました。

549 名前:デフォルトの名無しさん :03/08/20 16:45
>>546
書いているうちにすいません。なるほど、生成にかなりコストが…。
ちょっと貧弱なマシンも考えなければなので、これは根本から見直さないと…。

いやはや本当に助かります。レスサンクスです。

550 名前: :03/08/20 17:13
C は sizeof を使わないとビット幅が確定しないのがなぁ。
あと、符号{つき|無し}{右|左}ローテートとかもあったら便利なのになぁ。
ビット演算やりたければアセンブラつかっていう話もあるけど、
そういう低レベルのところを言語仕様に入れてくれてもいいのになぁ。

歴史的には高級言語としてそういうのを隠蔽しようとしてきたんだろうけど、
いまの C の価値はむしろそういうレベルのコード生成の透明性にあるからなぁ。

551 名前:デフォルトの名無しさん :03/08/20 17:23
ビットフィールド

552 名前:デフォルトの名無しさん :03/08/20 17:26
つまり、shared_ptr だの、smart_ptr だのをあまり利用せず、
IUnknown 継承して、CComPtr つかえってことですね。


553 名前:デフォルトの名無しさん :03/08/20 17:26
>>550
ローテイトもってる CPU じゃないと
実装が面倒になるというのもあったのではなかろうか。多分。

554 名前: :03/08/20 17:28
>>553
ははぁ、そうなのかもね。でもなぁ 8bit の時代からあったからなぁ。
ところで、皆さん整数の桁あふれとかはちゃんと対処しています?

加算命令で int の幅を超えちゃっても、
C の言語仕様上は検出するすべがありませんよね。
多くのプロセッサは桁あふれを検出することができると思うんですが、
C からも使えたら便利だとは思いませんか?

555 名前:デフォルトの名無しさん :03/08/20 17:34
ローテイトを何に使いたいんだ?
それが気になる

556 名前:デフォルトの名無しさん :03/08/20 17:34
C言語の生い立ちから考えるとやっぱりその辺は
「アセンブラを使用汁」ってことに尽きるんでしょうなぁ。

557 名前: :03/08/20 17:37
>>555
要素が0と1だけからなり、加算がXORで表現される、
激しく巨大な行列の演算。

グラフ理論なんかでよく出てくる。

558 名前:デフォルトの名無しさん :03/08/20 17:39
>>加算命令で int の幅を超えちゃっても、C の言語仕様上は検出するすべがありませんよね

計算量増えるけど先に確かめておけばいい
C++なら検出つきの整数クラスでも作ればいいだろう
それならすぐ元に置き換えられるし

559 名前:デフォルトの名無しさん :03/08/20 17:41
>>557
やはりローテイトの出番がよく分からんなあ

560 名前:デフォルトの名無しさん :03/08/20 17:46
C# だとオーバーフローを検出できるんだっけ?

561 名前:デフォルトの名無しさん :03/08/20 18:07
Effective STLに書いてあった等価と同値の違いがいまいち分かりません。
詳しく説明して欲しいな。

562 名前:デフォルトの名無しさん :03/08/20 18:55
>>561
んー、あれが一番詳しい(というかわかりやすい)説明だと思うが・・・。

563 名前:デフォルトの名無しさん :03/08/20 20:21
C++でXMLやるのに良いサイトありますか?
そもそもXMLは仕様が固まったのでしょうか?

564 名前:デフォルトの名無しさん :03/08/20 20:37
>>563
http://pc2.2ch.net/test/read.cgi/tech/1017641205/

565 名前:デフォルトの名無しさん :03/08/20 22:11
>>560
できるよ。
コンパイラオプションに -checked つけるか、
checked(式) ってやると例外が発生するようになる。


566 名前:デフォルトの名無しさん :03/08/20 23:16
XMLは仕様が固まったのでしょうか、っていつの時代の人なんだ。

567 名前:デフォルトの名無しさん :03/08/21 00:30
c++で端末を直接制御するためのライブラリって
ncursesであってます?

568 名前: :03/08/21 07:07
>>567
まぁそれが一般的だろうね。

569 名前:デフォルトの名無しさん :03/08/21 23:56
g++ 3.2で
namespace ByteOrder
{
 enum ByteOrder
 {
  LITTLE_ENDIAN,
  BIG_ENDIAN,
  BI_ENDIAN,
 };
}
#if 0
class ByteOrder
{
};
#endif
int main()
{
 int ByteOrder::LITTLE_ENDIAN;
 
 return 0;
}
がコンパイル通ってしまったんですが、
int ByteOrder::LITTLE_ENDIAN;
はどういう風に解釈されたのでしょうか?

570 名前:デフォルトの名無しさん :03/08/22 00:08
>>569
アセンブリ吐かせてみたところ、
int型のmain内ローカル変数LITTLE_ENDIANが定義されたようです。

571 名前:デフォルトの名無しさん :03/08/22 00:09
>>569
なんで通るんだろう。絶対変。

解釈的には
int ByteOrder::LITTLE_ENDIAN;
  ↑名前空間  ↑enum ByteOrder の中身。

↓こういうソースもコンパイル通った。
namespace ByteOrder
{
 enum A { a };
 int b;
}
int main()
{
 int ByteOrder::a;
 int ByteOrder::b;
 return 0;
}


572 名前:569 :03/08/22 00:18
その手があったかと汗吐かせてみたんですが、よく考えたらアセンブラ読めませんでした(asse)

 .file "tst.cpp"
 .def ___main; .scl 2; .type 32; .endef
 .text
 .align 2
.globl _main
 .def _main; .scl 2; .type 32; .endef
_main:
LFB1:
 pushl %ebp
LCFI0:
 movl %esp, %ebp
LCFI1:
 subl $8, %esp
LCFI2:
 andl $-16, %esp
 movl $0, %eax
 movl %eax, -8(%ebp)
 movl -8(%ebp), %eax
 call __alloca
 call ___main
 movl $0, %eax
 leave
 ret
LFE1:

どうなってるのでしょうか?

573 名前:デフォルトの名無しさん :03/08/22 00:23
>>572
あのさ、それ最適かかかって return 0; しか残ってないんだけど。

namespace A{ int a;}
int main
{
 int A::a; // この行をコメントアウトしたのとしてないので出力比較してみて。
 a = 5;
 cout << a;
 return 0;
}


574 名前:569 :03/08/22 00:30
#include <iostream>
namespace A{ int a;}
int main()
{
int A::a; // この行をコメントアウトしたのとしてないので出力比較してみて。
a = 5;
std::cout << a;
return 0;
}
コメントアウトしたらコンパイル通りません(aが未定義)
汗ソースはcoutへの出力があるから長大でここには書けないです。

575 名前:デフォルトの名無しさん :03/08/22 00:30
ああ、ごめん、
a = 5;

A::a = 5;
に変えて。

576 名前:デフォルトの名無しさん :03/08/22 00:33
でも、コメントアウトしてないのが通ったってことは、
int A::a;
で、
「名前空間 A の中で宣言された a を main 内で使います」
って言う意味かな。
以後、main 内では単に a と書くだけで A::a が参照される。

gcc 独自拡張っぽい?
余計な真似しやがって。


577 名前:570 :03/08/22 00:34
> 以後、main 内では単に a と書くだけで A::a が参照される。
あれ?そうだった。
漏れんとこではただのローカル変数ができたようなコードが出てたんだけど。


578 名前:デフォルトの名無しさん :03/08/22 00:39
>>576
ごめん、推測。
コード見てなかったりする。

gcc のバグかな?


579 名前:569 :03/08/22 00:41
#include <iostream>
namespace A{ int a;}
int main()
{
int A::a; // この行をコメントアウトしたのとしてないので出力比較してみて。
A::a = 5;
std::cout << A::a; // コメントアウトしても通る
//std::cout << a; // コメントアウトするとこっちは通らない
return 0;
}
で、全部は無理なので diff だけ
1c1
< .file "coted.cpp"
---
> .file "nrmal.cpp"
24,25c24,25
< movl %eax, -4(%ebp)
< movl -4(%ebp), %eax
---
> movl %eax, -8(%ebp)
> movl -8(%ebp), %eax
質問しといてなんですが、明日も仕事なので今日はこれで寝ます。スミマセン。


580 名前:デフォルトの名無しさん :03/08/23 00:27
p = new CA[]でインスタンスの配列を作る場合、コンストラクタに(複数の)引数を渡すにはどうすればいいのでしょうか
ローカル変数のインスタンス配列に引数を渡す方法はわかるのですが

581 名前:デフォルトの名無しさん :03/08/23 00:32
>>580
できません。諦めましょう。

582 名前:580 :03/08/23 00:42
>>581
まじすか!
諦めるというかちょっと気になったもので
ありがとうございました

583 名前: :03/08/23 05:35
>>581
new 演算子をオーバーロードすると出来ると思う。

584 名前:580 :03/08/23 05:39
>>583
まじすか!
その方法を教えて!

585 名前:デフォルトの名無しさん :03/08/23 08:08
素直にvectorでも使えばいいんじゃないんだろうか。

586 名前:デフォルトの名無しさん :03/08/23 09:15
boost::tupleにしておけ

587 名前:デフォルトの名無しさん :03/08/23 09:35
この板みてるとboost使えってよくでてくるけど、流行ってるのか?
うちの会社(中小だが)では俺しか使ってない。
c++自体はみんなつかってんだが・・・。

588 名前:デフォルトの名無しさん :03/08/23 10:29
>>587
単純に便利なものから若干用途限られるけど便利なものまで多数あって有用
物によってだけど覚えること少ないし
splitとかは除外だが。
ttp://www.kmonos.net/alang/boost/
ttp://www.boost.org/
ttp://boost.cppll.jp/
ttp://www.tietew.jp/cppll/archive/5777

http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50


589 名前:デフォルトの名無しさん :03/08/23 11:03
ビットフィールド使ってビット幅指定するのって
配列には使えないんでしょうか?

あと、そうやってクラスのサイズを小さくすると
なんかいいことあるんでしょうか?(アホ

590 名前:デフォルトの名無しさん :03/08/23 11:56
>>584
new演算子をオーバーロードする時にも規則があって、コンストラクタ
への引数はsize_tしか持てないよ。他の引数を持たせようとすると
コンパイルが通らない。

591 名前:デフォルトの名無しさん :03/08/23 12:05
http://www.kmonos.net/alang/boost/
http://www.boost.org/
http://boost.cppll.jp/
http://www.tietew.jp/cppll/archive/5777

592 名前:デフォルトの名無しさん :03/08/23 12:08
>>590
> コンストラクタへの引数はsize_tしか持てないよ。
コンストラクタではなく operator new への引数、の書き間違い?

それだと placement new とかあるから、size_t だけに制限される
ハズないと思うが。


593 名前:デフォルトの名無しさん :03/08/23 12:26
>>592
悪い。そうそう、void* operator new[](size_t); の事です。
ちなみに配置構文のnew[]もクラスや変数へのポインタを第二引数に
取るしかできないね。

594 名前:デフォルトの名無しさん :03/08/23 12:28
>>584
つーことで、一回しか実行できない初期化用のメンバ関数を
public属性で持たせて、new[]した後に実行して下さい。

595 名前:デフォルトの名無しさん :03/08/23 12:29
ああそうか、new[]そのものが何回も呼び出される可能性があるか・・・・
自分で気を付けるしかないね。うっかり呼び出さないように。

596 名前:デフォルトの名無しさん :03/08/23 13:54
>>581
そーゆーことがしたけりゃ、
malloc × 配置構文 new(要素の数だけ) × 明示デストラクタコール(要素の数だけ) × free
で実現しる。
ま、フツーはこんなことするよりは設計を見直すが。

597 名前:デフォルトの名無しさん :03/08/23 15:36
>>590
>>593
newには普通に任意のパラメタ渡せるのだが。

#include <iostream>
#include <cstdlib>
using namespace std;

struct Hoge
{
static void* operator new[]( size_t siz, int param1 )
{
cout << param1 << endl;
return malloc(siz);
}
};


int main()
{
 Hoge* p = new(15) Hoge[100];
}

いや、だからと言って583の言うようにこれで配列要素の非デフォルト
コンストラクタを呼び出せるかと言ったら、そりゃあ無理だけど。

598 名前:デフォルトの名無しさん :03/08/23 15:50
>>597
これってただのplacement newじゃないの?15番地から強制的に使っている
だけで。

599 名前:デフォルトの名無しさん :03/08/23 16:17
>>598
#include <deque>
#include <iostream>
struct unko{int i;};
std::ostream &operator<<(std::ostream &ost, const unko &unk)
{
    ost << "ヽ( ・∀・)ノ ウンコー " << unk.i;
    return ost;
}
void *operator new(std::size_t size, const std::deque<unko> &u)
{
    std::cout << size << "\n" << u.front() << std::endl;
    return 0;
}
int main()
{
    unko one = {1};
    unko two = {2};
    std::deque<unko> u;
    u.push_back(one);
    u.push_back(two);
    int *p = new(u) int[10];
    std::cout << "p=" << p << "\n";
}
結果:
40
ヽ( ・∀・)ノ ウンコー 1
p=00000000

600 名前:デフォルトの名無しさん :03/08/23 16:21
>>599
わかってもらえなかったかなー。それはmalloc()の戻り値を返している
からでしょう。実際には15番地から少し壊れていると思うよ。

601 名前:デフォルトの名無しさん :03/08/23 16:22
あ、今度は0を返しているのか。じゃあ0番地からぶちこわしているわけだ。

602 名前:デフォルトの名無しさん :03/08/23 16:26
おまけにgcc3.3.1(MinGW)でコンパイルするとコンパイルエラーが4つも出るし。
C:/MinGW/Learn/boost/operater_new4.cpp: In function `void* operator
new(unsigned int, const std::deque<unko, std::allocator<unko> >&)':
C:/MinGW/Learn/boost/operater_new4.cpp:12: warning: `operator new' must not
return NULL unless it is declared `throw()' (or -fcheck-new is in effect)

C:/MinGW/Learn/boost/operater_new4.cpp: In function `int main()':
C:/MinGW/Learn/boost/operater_new4.cpp:21: error: no matching function for call
to `operator new [](unsigned int, std::deque<unko, std::allocator<unko> >&)'
C:/mingw/include/c++/3.3.1/new:83: error: candidates are: void* operator new
[](unsigned int)
C:/mingw/include/c++/3.3.1/new:87: error: void* operator new
[](unsigned int, const std::nothrow_t&)
C:/mingw/include/c++/3.3.1/new:93: error: void* operator new
[](unsigned int, void*)

Execution terminated

603 名前:デフォルトの名無しさん :03/08/23 16:27
newの「返り血」を壊していると主張するのか
「引数」を壊していると主張するのか

604 名前:デフォルトの名無しさん :03/08/23 16:30
>>602
operator newはoperator new[]の間違いでした。
何でコンパイル通るんだよ…

605 名前:デフォルトの名無しさん :03/08/23 16:37
>>604
確かにそうすればコンパイルは通りました。しかし0を返していては
new[]した領域には永遠にアクセスできないでしょう。

606 名前:デフォルトの名無しさん :03/08/23 16:44
>>605
placement newだと主張する人に対してconst std::deque<unko>&
を渡せることを示そうとしただけであるよ。

607 名前:デフォルトの名無しさん :03/08/23 17:06
>>606
ああこれか。C++第3版P660
void* operator new[](size_t, const nothrow_t&);
でもどちらにしろクラスオブジェクトしか渡せないじゃん。
初期化値とは全然関係ない。

608 名前:デフォルトの名無しさん :03/08/23 18:21
>>607

>>597以降を読む限り、
デタラメ言うなと>>593 >>598 >>600に対して言ってるだけで、
既に誰も初期値の話なんぞしてないぞ。日本語大丈夫か?

609 名前:デフォルトの名無しさん :03/08/23 18:28
>>607
5.3.4[expr.new]/12

610 名前:デフォルトの名無しさん :03/08/23 18:29
>>608
そしたら、次の例はC++第3版のnew(P660)のどれに
該当するんですか?

static void* operator new[]( size_t siz, int param1 )
{
cout << param1 << endl;
return malloc(siz);
}

611 名前:デフォルトの名無しさん :03/08/23 18:36
>>609
ふーん、そうなんだ。配列のnewは配置構文にならずに任意の
パラメタを渡せる仕様なんだね。初めて知った。

612 名前:608 :03/08/23 19:10
>>610
今手元にないから知らん。
つーかなんで、C++の作者が書いたと言うだけの、規格書でもなんでもない
一介の書籍に言語の全てが載っていると期待しているのだキミは?
>>611
> ふーん、そうなんだ。配列のnewは配置構文にならずに任意の
配列だとかそうでないとかは関係ないぞい。まとめたからまあ嫁。
-----

・ new演算子に(size_t以外の)追加のパラメタを指定する形式のことを、
  「new-placement syntax (newの配置構文)」 という。 [5.3.4/11]
 # 既存のアドレスを渡してその位置にオブジェクトを構築…とかいう狭い意味ではない。

・ その追加パラメタリストは他の普通の関数に使えるものと
 比べて何の制限もない。何ならtemplateにもできる。 [3.7.3.1/1] [5.3.4/1]

・ C++の実装側は、new演算子のデフォルトとして最低6つを提供する。
  void* operator new(std::size_t size) throw(bad_alloc);
  void* operator new[](std::size_t size) throw(bad_alloc);
  void* operator new(std::size_t size, const std::nothrow_t&) throw();
  void* operator new[](std::size_t size, const std::nothrow_t&) throw();
  void* operator new(std::size_t size, void* ptr) throw();
  void* operator new[](std::size_t size, void* ptr) throw();
 上の二つは、どっかからメモリを確保してきて返すと期待される関数。
 中の二つは、どっかからメモリを確保してきて返すんだけど、確保不可能だと0を返す関数。
 下の二つは、何もメモリ確保処理はせずそのままptrを返す関数。[18.4.1.1-3]

----
それ以上でも以下でもない。

613 名前:デフォルトの名無しさん :03/08/23 19:16
>>612
ありがとうございます。もう一度refman.pdfや
http://www.kuzbass.ru/docs/isocpp/
を何度も読んでみます。やっぱり難しいなーC++は。

614 名前:デフォルトの名無しさん :03/08/23 19:33
size_t引数がテンプレート引数だったらいいのにな。

615 名前:デフォルトの名無しさん :03/08/23 19:56
>>614
なんかいいことあんの?

616 名前:デフォルトの名無しさん :03/08/23 20:06
>>614
自分で多重定義すれば良いだけでは? 何に使うのか知らんが。

617 名前:デフォルトの名無しさん :03/08/23 20:28
>>614
 void* operator new(size_t N) { ... }
の代わりに
 template<size_t N> void* operator new() { ... }
ってこと?それいいかも。operator new[] には使えなさそうだけど。

618 名前:デフォルトの名無しさん :03/08/24 10:15
サイズが違うたびに別関数?

619 名前:デフォルトの名無しさん :03/08/24 18:53
reinterpret_cast って、口に出して言うとき、何と言えばいいですか?
リインタプリットキャストで通じますかね?
それとも、レインタープレットキャスト?

620 名前:デフォルトの名無しさん :03/08/24 18:55
誰に向かって言うのだ?

621 名前:デフォルトの名無しさん :03/08/24 18:59
佐藤課長とか松井とか渡部とか、かな

622 名前:デフォルトの名無しさん :03/08/24 19:00
リインタプリト・キャスト

623 名前:デフォルトの名無しさん :03/08/24 19:06
俺はリインタプリットって読んでる。
interpreter でインタプリタだから


624 名前:デフォルトの名無しさん :03/08/24 19:07
りーんたーrぷりっきぇぁすっ

625 名前:デフォルトの名無しさん :03/08/24 20:41
riintэ':(r)prэt kae'st

626 名前:デフォルトの名無しさん :03/08/24 21:02
>>619
つーか、どっちかで言わないと虫するようなガキんちょの
あやし係はなるべく担当したくない

レポート
リポート

627 名前:デフォルトの名無しさん :03/08/25 03:50
>>619
辞書で発音記号調べれば解決。


628 名前:デフォルトの名無しさん :03/08/25 05:08
(゚∀゚)ATLってなに?

629 名前:デフォルトの名無しさん :03/08/25 05:27
>>628
Active Template Library

630 名前:デフォルトの名無しさん :03/08/25 08:49
>>628
Antano Tameno Library

631 名前:デフォルトの名無しさん :03/08/25 10:10
CとC++ってまったく違うものなんでしょうか?
文法が違うだけ? それとも、考え方そのものが別物・・・?

632 名前:デフォルトの名無しさん :03/08/25 10:28
>>627
ガキんちょですか?

633 名前:デフォルトの名無しさん :03/08/25 10:29
>>631
C++はCの文法を引き継ぎ、それに色々な概念を導入したものです。
#突込みどころ1
ですので、Cの概念だけで使っても構いませんが、
#突込みどころ2
どうせならC++らしい考え方も習得してみましょう。
#突込みどころ3
あなたがプログラミングになれているなら、
#突込みどころ4
難しくはありません。
#突込みどころ5

634 名前:デフォルトの名無しさん :03/08/25 10:56
C++独自の機能の内、関数のオーバーロードだけ使っています。。。

635 名前:デフォルトの名無しさん :03/08/25 11:10
参照くらい使ってやれ。

636 名前:デフォルトの名無しさん :03/08/25 11:15
>>634
(゚Д゚)クラスも使ってないのか?(゚Д゚)!!

637 名前:デフォルトの名無しさん :03/08/25 12:00
ローカル変数を好きな所で定義できる機能だけだな…

638 名前:デフォルトの名無しさん :03/08/25 13:35
C++を業務で使い始めて3ヶ月、やっと自分でテンプレートを使う(設計する)ようになったが
未だにMFCの部品以外のクラスの継承は書いていない。
関数のオーバーロードや引き数の省略、参照は最早ないと不便に思うようになった。

>>637
//コメントは使わない?
#いやまぁ、Cでもあるところにはあるから含めなかったのかもしれんが。

639 名前:デフォルトの名無しさん :03/08/25 13:43
大抵の機能は使うよ。

640 名前:デフォルトの名無しさん :03/08/25 14:06
>>638
俺の場合、テンプレートより継承の方が多用するけどな。

641 名前:デフォルトの名無しさん :03/08/25 15:13
valarrayは使ったことがない

642 名前:デフォルトの名無しさん :03/08/25 15:36
>>641
valarrayは糞。Blitz++
http://www.oonumerics.org/blitz/
が次期標準に取り入れられる噂がある。

643 名前:デフォルトの名無しさん :03/08/25 15:42
>>642
三角行列はないのー?

644 名前:デフォルトの名無しさん :03/08/25 15:48
>>643
そんなのArrayの初期化の時に設定すればいいじゃん。
それよりC++標準になるとSTN(Standard Template for Numeric)
とか呼ばれるようになるのかな。FORTRANを駆逐できるかも。

645 名前:デフォルトの名無しさん :03/08/25 16:02
>>644
三角行列用の対角化とかしたいんだけどな。
自分で LAPACK と繋げて使ってるけど、
標準であったら激しく便利。

646 名前:デフォルトの名無しさん :03/08/25 16:11
Blitz++はArrayのiteratorを持っているから、対角化は簡単にできる。
LAPACK++もあるけど、こちらは効率の面から見ると問題があるので
標準化の予定はない。あくまでも効率の面でFORTRANに劣らない
速度を実現しようとしている、それがBlitz++なのだ。

647 名前:デフォルトの名無しさん :03/08/25 16:34
>>646
できるんか。
標準化が結構楽しみになってきた。

648 名前:デフォルトの名無しさん :03/08/25 16:55
ただBlitz++はあまりアルゴリズムに関しては多く持ってないので、
三重対角化のルーチンを手前で組んで持っておく必要があるだろう。
しかしBlitz++で書けば簡単に書ける。

あくまでvalarrayの後継ぎを意識している。現在の標準C++のvalarray
は未完成のまま発表されたと言われている。中心人物が途中で抜けて
しまったため、後に残された人はやる気をなくしたのだ。

649 名前:デフォルトの名無しさん :03/08/25 20:43
人の書いたプログラムを読んで勉強したいのですが、
勉強をはじめたばかりで、良いソースと悪いソースの区別がつきません。
何かお勧めのものはありませんか。

650 名前:デフォルトの名無しさん :03/08/25 20:57
>>649
C なら
http://www.pro.or.jp/~fuji/mybooks/cdiag/
があるんだけど。

651 名前:デフォルトの名無しさん :03/08/25 21:08
extern "C"ってエクスタシーでいいのか

652 名前:デフォルトの名無しさん :03/08/25 21:11
>>651
まったく問題ありません

653 名前:デフォルトの名無しさん :03/08/25 21:28
Blitz++の標準化っていつ頃の話になるの?

654 名前:デフォルトの名無しさん :03/08/25 21:55
>>653
つーか次の標準化が5〜6年先と言われているからなあ。
Blitz++もまだβ版だし。気長に待つべし。

655 名前:デフォルトの名無しさん :03/08/25 21:56
それまではBoostと同じくインストールしてBlitz++を使っていよう。
腐ったValarrayは絶対に使わないようにしよう。

656 名前:名無しさん@Emacs :03/08/25 22:38
Blitz++はStencilがもちっとカコ(・∀・)イイ!!くなるといいんだが・・・

657 名前:デフォルトの名無しさん :03/08/25 23:21
初歩的な質問で申し訳ありません。

#include <string.h>
struct TestClass{
  char str[256];
};

int main(){
  char str[] = "Test";
  TestClass myTestClass;

  // Okay!
  for (int i = 0; i < 5; i++){
    myTestClass.str[i] = str[i];
  }

  // Okay!
  strcpy(myTestClass.str, str);

  // NG!
  // myTestClass.str = str[];   // ←ココ
  // myTestClass.str = "Test"; // ←ココ
}

どうしてstructやclassのpublicなchar配列に
代入演算子で文字列定数を代入できないのでしょう?
また、代入演算子で無理やり代入できるようにするにはどんな風にしたらよいでしょうか。

658 名前:デフォルトの名無しさん :03/08/25 23:24
演算子のオーバーロードがあるじゃないか。

659 名前:デフォルトの名無しさん :03/08/25 23:25
>>651
語尾はちゃんと発音されない傾向があるから
英語が母国語の人が喋ってるのを日本人が聞いたら
ちょうどそんな感じに聞こえるんじゃない?

660 名前:デフォルトの名無しさん :03/08/25 23:25
配列に代入演算子を使うことはできません。
仕様です。

661 名前:デフォルトの名無しさん :03/08/25 23:27
Java厨か?

>>657
C++でなくCのスレで質問した方が良い。
Java風の知識だけで押し通したいなら char str[256]; ではなくて
std::string str; にしとけ。#include <string> を忘れるなYO!

そもそも、myTestClass.str = str[]; と、意味不明の[]を付けている
時点でC言語すらわかってないのが自明。がんがれ。

662 名前:デフォルトの名無しさん :03/08/25 23:29
>>657
まず、
#include <string.h>
なんて書いてある参考書を捨てるところから始めろ。


663 名前:657 :03/08/26 01:00
回答ありがとうございます。

>>658
operator + とかいうやつですか?
オーバーロードはまだ勉強してないので・・・。
覚えておきます。

>>660
仕様ですか・・・。CStringみたいに簡単にはいかないんですね。

>>661
Java厨ではないですが・・・単純な文法エラーでした。(〃▽〃)
ところで、僕の使っている本には<string>という標準ライブラリに関する
説明はないんですよね・・・。<string.h>ならあるんですが・・・。

>>662
1994年の本なんですけど、古いですか?
にいやのおさがりなのです。(・ε・)


664 名前:デフォルトの名無しさん :03/08/26 01:07
>>663
絶望的に古い本です。今すぐ捨てた方がいいよ。
iostream.h
stdio.h
stdlib.h
string.h
どれもすでに存在しません。
iostrem
cstdio
cstdlib
cstring
が現存のファイル。
stringはこれらとは別の、標準の文字列クラス。


665 名前:デフォルトの名無しさん :03/08/26 01:07
>>663
C++は1998年のISO標準化前後で言語仕様からライブラリまで大幅に変わったので、
それ以前に書かれた本は概ねゴミといっても過言ではない。

666 名前:デフォルトの名無しさん :03/08/26 01:09
>>664
誤植があった。
s/iostrem/iostream/

>>663
CStringを知っているなら、#include <string> で使えるstd::stringは、
よりマトモな文字列クラスだよ。char文字列なんて使ってられません。

667 名前:657 :03/08/26 01:17
>>664
>絶望的に古い本です。

>>665
>概ねゴミ

・・・。(´・ω・`)
あした本屋行ってきます・・・。

>>666
CStringはBASICみたいに利用できるから楽なんですけど、
なるべくMFCを使わないで作るっていうのが、今の勉強の指針なもので。
MFC使うとブラックボックスな部分が多すぎて
プログラムの中の人がどんな風に働いているのか分からないんですよね。

668 名前:デフォルトの名無しさん :03/08/26 01:22
>>667
そういうことならVC7.1使おうね。VC6なんてのはゴミよ。
http://boost.sourceforge.net/regression-logs/

669 名前:デフォルトの名無しさん :03/08/26 03:12
マカーなんですけど今度C++を勉強しようと思ってるんですよ・・・使うソフトはCodeWarrior for Mac OSになりそうなんですけど・・・普通にWINDOWSユーザー向けのテキスト使って勉強しても大丈夫でしょうか?

670 名前:デフォルトの名無しさん :03/08/26 03:50
>>669
環境に依存しない(非GUI)であれば大丈夫と思われ。

671 名前:デフォルトの名無しさん :03/08/26 04:39
>>670
ありがとうございます。今度はもっと専門的な事でお邪魔したいですね。すいませんでした。

672 名前:デフォルトの名無しさん :03/08/26 06:38
>>669
Mac は特殊な環境だから GUI に関係せずともちゃんと Mac 用の
テキスト探して勉強したほうが多分いいよ。

673 名前:デフォルトの名無しさん :03/08/26 06:50
>>671
MacでC言語
http://pc.2ch.net/test/read.cgi/mac/1048587374/

674 名前:デフォルトの名無しさん :03/08/26 08:17
>>672
特殊って標準入出力が無いとか、リソースフォークの扱いとか?
確かに C++ の勉強をするのに MacOS(Classic) は厳しいかも。
Mac OS X ならかなりまともな環境だと思うけどね。

675 名前:デフォルトの名無しさん :03/08/26 08:31
struct A { int a : 1; };
struct B : A { int b : 1; };

↑このとき、sizeof B == sizeof A となるような最適化
(継承先で定義されたメンバを継承元のパディングに納める)
は、いつの日か期待できますか?

676 名前:デフォルトの名無しさん :03/08/26 09:01
>>675
そういうことをしてくれる特定の処理系が現れることはあっても
それが標準になることはないだろ。 inline だってコンパイラに対する
お願いでしかないし。

677 名前:デフォルトの名無しさん :03/08/26 09:27
>>667
> MFC使うとブラックボックスな部分が多すぎて
ソースコードあるでしょ?


678 名前:デフォルトの名無しさん :03/08/26 12:04
myTestClass.str を = の左辺値にすると、コンパイルできません。

#include <cstring>
#include <iostream>

struct TestClass{
char str[256];
TestClass *operator=(const char *s) {
std::strcpy(this->str, s);
return this;
}
};

int main(){
char str[] = "Test";
TestClass myTestClass;

// Okay!
for (int i = 0; i < 5; i++){
myTestClass.str[i] = str[i];
}
// Okay!
std::strcpy(myTestClass.str, str);
std::cout << myTestClass.str << std::endl;
// OK!
myTestClass = str; // ←ココ
std::cout << myTestClass.str << std::endl;
myTestClass = "Test"; // ←ココ
std::cout << myTestClass.str << std::endl;
}

679 名前:デフォルトの名無しさん :03/08/26 12:05
>>658>>657に対する返答です。

680 名前:デフォルトの名無しさん :03/08/26 12:06
違ったスマソ。>>678>>659に対する返答です。この制限はC++が
C言語の代入演算子の性質を踏襲している所から来ています。

681 名前:デフォルトの名無しさん :03/08/26 12:08
まだ違う。>>678>>657に対する返答です。風邪引いて熱があるからかな・・・・
会社早退しようかな。

682 名前:デフォルトの名無しさん :03/08/26 13:00
>>678
TestClass *operator=(const char *s)
↑これじゃない?

TestClass& operator = (const char* s)

683 名前:デフォルトの名無しさん :03/08/26 13:07
>>682
じゃあこうしとくか。
アカン、風邪薬飲んだらすごく眠くなってきた・・・・・・

struct TestClass{
char str[256];
TestClass& operator=(const char *s) {
std::strcpy(this->str, s);
return *this;
}
};

684 名前:デフォルトの名無しさん :03/08/26 13:09
>>678
operatorは”そのクラスに対する演算子の定義”なので、その仕様で正しい。
もしmyTestClass.str = "Test"とやりたいのだったら
・TestClass::strを自作のoperator=が定義されたクラスにする
・TestClass::strを素直にstd::stringなどあらかじめ用意されてる文字列クラスを使う
のいずれかにするべき。


685 名前:デフォルトの名無しさん :03/08/26 13:33
>>684
じゃあ簡単にstd::stringでも使いましょうかね。

#include <string>
#include <iostream>

struct TestClass{
std::string str;
std::string& operator=(const char *s) {
this->str = s;
return this->str;
}
};

int main(){
char str[] = "Test";
TestClass myTestClass;

// Okay!
myTestClass.str.resize(5);
for (int i = 0; i < 5; i++){
myTestClass.str[i] = str[i];
}
std::cout << myTestClass.str << std::endl;
// OK!
myTestClass.str = str; // ←ココ
std::cout << myTestClass.str << std::endl;
myTestClass.str = "Test"; // ←ココ
std::cout << myTestClass.str << std::endl;
}

686 名前:デフォルトの名無しさん :03/08/26 17:23
basePtr = new derivedClass
派生クラスオブジェクトへのポインタを基本クラス型のポインタ変数に
アップキャストした場合で
delete basePtr としたら、生成されたオブジェクトが完全に開放されずに
ポインタが指している部分(継承した部分)しか開放されないと思うんですが何か?

687 名前:デフォルトの名無しさん :03/08/26 17:39
virtual ~baka

688 名前:デフォルトの名無しさん :03/08/26 17:54
>>686
仮想デストラクタ知らんの?

689 名前:デフォルトの名無しさん :03/08/26 17:55
>>687
オーバーライドした派生クラスのデストラクタがコールされると
アップキャストされたポインタが示す領域だけじゃなく
その派生クラスのオブジェクトが完全に開放されるということですか?

690 名前:デフォルトの名無しさん :03/08/26 18:04
>>689
そう。多態を実現するには必須なので
これを知らないのはまずい

691 名前:デフォルトの名無しさん :03/08/26 18:06
自分で言ってて訳和姦ねー・・・
もう少し勉強して来ます

692 名前:デフォルトの名無しさん :03/08/26 18:07
と思ってたら・・・
>>690
ありがとうございました

693 名前:デフォルトの名無しさん :03/08/26 19:28
コンストラクタはどうやってオーバーライドするの?
コンストラクタにvirtual付けたら怒られた

694 名前:693 :03/08/26 19:30
superも無いみたいだし

695 名前:デフォルトの名無しさん :03/08/26 21:07
>>693
どういう風に「コンストラクト」したいの?
答えはそれによる

696 名前:デフォルトの名無しさん :03/08/26 21:42
>>693
コンストラクタを virtual にして
どうしようというのか小一時間(ry

697 名前:デフォルトの名無しさん :03/08/26 23:19
>>693
コンストラクタの中で基底クラスのコンストラクタを呼び出す。
要するに基本を知らなかった故の質問だろ?

698 名前:デフォルトの名無しさん :03/08/27 07:51
しかし、仮想コンストラクタ(クラスファクトリ)という言葉はあるワナ。

699 名前:デフォルトの名無しさん :03/08/27 09:06
>>698
そういう言葉だけ書いて後放置して、初心者が
コンストラクタにも virtual 付けれるんだと勘違いしたらどうする。


700 名前:デフォルトの名無しさん :03/08/27 09:50
よく分からんが、↓みたいなことがしたいんじゃないの?
class CHage : public CHoge
{
CHage(int boo, int foo, int woo)
: CHoge(boo, foo, woo)
{
}
};

701 名前:698 :03/08/27 09:51
多態性を用いたプログラムでは”パラメータによって違うクラスを生成したい”
という欲求が生じがちです。
これをスマートに実装するために作る専門の関数(クラス)をクラスファクトリといいます。
仮想コンストラクタという言い方もしますが、どちらかというとマイナーです。

クラスファクトリの例としてはWindowsのCOMのIClassFactory(を実装するクラス)などがあります。

702 名前:デフォルトの名無しさん :03/08/27 12:12
[io]fstreamを使用してファイルの読み書きを行った場合、
明示的にclose()を書いたほうがよいですか、それともデストラクタにお任せでよいですか?

703 名前:デフォルトの名無しさん :03/08/27 12:14
猛勉強中の初心者ですが教えてください。

仮想関数を持つクラスは特別にポリモフィズムクラスとして区別されるんですか?
そのポリモフィズムクラスオブジェクトを指すポインタだけ基本クラスのポインタ変数にdynamic_castできるんですか?

704 名前:デフォルトの名無しさん :03/08/27 12:20
ポリモーフィズムクラスなんて用語があるのかどうかは知らないけど、
実行時型情報を利用できるのは仮想関数を持つクラスだけ。

基本クラスのポインタへの代入は dynamic_cast でなくても出来る。
逆に派生クラスへのキャストは dynamic_cast が必要。


705 名前:デフォルトの名無しさん :03/08/27 12:30
そぼくなギモン
C++はどのくらいオブジェクト嗜好なんだぁ?

706 名前:デフォルトの名無しさん :03/08/27 12:35
>>702
エラー処理したいならclose()しる。

707 名前:デフォルトの名無しさん :03/08/27 12:38
"A class that declares or inherits a virtual function is called a polymorphic class." (10.3 -1-)

708 名前:デフォルトの名無しさん :03/08/27 12:42
>>705
その答えは以下の質問への答えと同様だろう。

「おろしニンニクがテーブルに置いてあるラーメン屋のラーメンはどのくらいニンニク風味なんだぁ?」

709 名前:デフォルトの名無しさん :03/08/27 12:46
テーブルのおろしニンニク全部かけてもまだ物足りない罠。

710 名前:デフォルトの名無しさん :03/08/27 12:50
>>708
じゃJAVAはおろしにんにくかぁ?

711 名前:デフォルトの名無しさん :03/08/27 12:51
生ニンニクとおろし金をテーブルに置かれた気分。

712 名前:デフォルトの名無しさん :03/08/27 13:00
C++で田体制書くときこんなんでええの?
 method(int d);
method(double d);

これで田体制の実装完了?

713 名前:デフォルトの名無しさん :03/08/27 13:00
>>704
( ☆ Д ☆ )さんきゅぽ〜ん

714 名前:デフォルトの名無しさん :03/08/27 13:02
>>710
否。
この場合、JAVAはニンニクラーメンに相当する。
すなわち注文した時点ですでに強烈なニンニク風味は確定しているのである。

715 名前:デフォルトの名無しさん :03/08/27 13:05
>>712
それは関数のオーバーロード

716 名前:デフォルトの名無しさん :03/08/27 13:08
>>715
じゃこうか?
virtural void method(void);
実装したら多々異性完了?

717 名前:デフォルトの名無しさん :03/08/27 13:10
>>714
オブジェクト嗜好=にんにく
じゃヴぁ=にんにくラーメン
C++=テーブルのうえにあるにんにくかけても足りないラーメンと
いうことでいいでつか?

718 名前:デフォルトの名無しさん :03/08/27 13:12
>>716
祖鵜打寝。

719 名前:デフォルトの名無しさん :03/08/27 13:25
>>718
馬路で

720 名前:デフォルトの名無しさん :03/08/27 13:26
>>716
鵜祖打寝。

721 名前:デフォルトの名無しさん :03/08/27 13:35
オーバーロードもポリモの一種かと思っていたのにぃ


722 名前:デフォルトの名無しさん :03/08/27 13:49
そのうち、
「ポリモルフィズムをポリモと呼ぶスレ」がたったり、
山崎が「ポリモ」とか言い出したりしそうだ。

723 名前:デフォルトの名無しさん :03/08/27 14:38
>>721
いや、そうだよ。
オーバーロードもポリモーフィズムの一種。
コンパイル時に確定するから静的ポリモーフィズムって言われる。
仮想関数なんかは動的ポリモーフィズム。


724 名前:デフォルトの名無しさん :03/08/27 14:50
えっと、多々異性についてレスされてるのは
本気でレスしてますか?
ネタならネタと悪いけど教えてください。混乱してきたんで(;´Д`A ```

725 名前:716 :03/08/27 14:56

   ∧_∧
  (  ^^ )< ぬるぽ(^^)
ぐぐったらわかるっぽ!

726 名前:デフォルトの名無しさん :03/08/27 14:59

   ∧_∧
  (  ^^ )< ポリモ(^^)




727 名前:デフォルトの名無しさん :03/08/27 16:29
基本クラスのデータメンバはprotected属性にしてた方がいいっすか?

728 名前:デフォルトの名無しさん :03/08/27 16:46
>>727
手を抜きたいなら

729 名前:デフォルトの名無しさん :03/08/27 17:18
>>723
>静的ポリモーフィズムって言われる。
どこで?

730 名前:デフォルトの名無しさん :03/08/27 17:41
>>729はスレッドが荒れることを狙ったネタです。みなさん放置してください。

731 名前:デフォルトの名無しさん :03/08/27 17:57
>>729
http://www.google.com/search?hl=ja&ie=Shift_JIS&c2coff=1&q=%22static+polymorphism%22&btnG=Google+%8C%9F%8D%F5&lr=


732 名前:デフォルトの名無しさん :03/08/27 19:28
C時代のファイルアクセス(fopenやfread)を[io]fstreamのものに置き換えたら、激重になりました。
そういうものですか?



733 名前:デフォルトの名無しさん :03/08/27 19:34
C時代のカキコ(printfやputs)をiostreamに置き換えたら、ファイルサイズが一気に十倍になりました。
そういうものですか?

734 名前:デフォルトの名無しさん :03/08/27 19:46
>>732
そういうものです。

735 名前:デフォルトの名無しさん :03/08/27 19:47
>>732-733
>>730

736 名前:732 :03/08/27 19:48
>>734
もう少し建設的な意見を期待していたんですが。。。(笑)

737 名前:デフォルトの名無しさん :03/08/27 20:16
>>736
ちっとは自分で調べろ。

738 名前:デフォルトの名無しさん :03/08/27 20:18
ここで聞いていいよ
http://cgi28.plala.or.jp/neomoku/vote3/list.cgi?lm=100&h=0&r=1&kw=&ngw=

739 名前:デフォルトの名無しさん :03/08/27 20:41
>>732
それは君が屁たれだからです。もっと精進しましょう。

740 名前:デフォルトの名無しさん :03/08/27 21:05
VC.netでコンパイルしたプログラムを.netフレームワークなしで
動かすにはどうすればいいの?

mscoree.dllがロードできないって言われて終わる。
検索しても.netフレームワークをインストールすれ、っていう
文献は見つかったけど、コンパイルをどう工夫するのか、ってのはない。
なんか簡単なプログラムを書いた友達はデフォルトで動く、
って言ってたけど、なんかオプションとかあるの?

741 名前:デフォルトの名無しさん :03/08/27 21:07
>>740
うるせーはげスレ違いだ

742 名前:740 :03/08/27 21:10
>>741
スマソ
激しく逝ってくる。

743 名前:デフォルトの名無しさん :03/08/27 21:38
C++はソフトウェア業界からヘタレを追い出して、
プログラマの給料を上げる為に開発された言語。

効率や速度は2の次。

744 名前:デフォルトの名無しさん :03/08/27 21:58
なるほど、ヘタレの言葉には説得力があるな

745 名前:デフォルトの名無しさん :03/08/27 22:18
Bjarne Stroustrupはヘタレか

746 名前:デフォルトの名無しさん :03/08/27 22:30
なんか細かいとこ気にしだすときりが無い気がするんですが
こういう仕様だって妥協したほうが良いんすかね>C++の文法

747 名前:デフォルトの名無しさん :03/08/27 22:34
え、あのゲーハーそんなこと言ってたか?

748 名前:デフォルトの名無しさん :03/08/27 22:35
>>746
いちおう、理由があってそうなってるものが殆どだからね。
その理由が全然有り難くない(自分と関係ない領分のフォローとか)ことはあるけど。

749 名前:デフォルトの名無しさん :03/08/28 02:10
えーっと、std::runtime_errorの派生クラスAをこしらえていて、
A::A(int x, int y); のx,yを適当に整形(文字列化)してから
runtime_errorのコンストラクタに渡したいんですが、どのように
したらできますか...

750 名前:デフォルトの名無しさん :03/08/28 06:32
>>749
struct A : std::rutime_error {
 A(int x, int y) : std::runtime_error( tekito_ni_seikei(x,y) ) {}
 static string tekito_ni_seikei(int x, int y) { ... }
};

簡単な処理なら関数を作らなくても
 : std::runtime_error( (boost::format( "(%d, %d)") % x % y).str() )
とか1行で書いてしまえるが。


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