■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part17
751
名前:
デフォルトの名無しさん
:03/04/04 23:23
>>713
例えばどんな本がいいですか?
>>714
読み落としていました。有難うございます。
> 仮に全部フリー関数だけだったとしても、MessageHelperオブジェクトと
> いう一つの実体としてくくる設計はアリだろう。
アリだというのは分かりますが、実際こういう設計ってあるんですか?
インスタンスを作るとメモリが消費されると思うのですが間違いでしょうか?
外部関数として使うのに対して、クラスにしてインスタンスを作成してから使う場合の
メリットってなんですか?
752
名前:
デフォルトの名無しさん
:03/04/04 23:32
>>750
URLのことをアドレスと言ってるようではレスがつかない。
753
名前:
デフォルトの名無しさん
:03/04/04 23:41
携帯のURL教えて〜
754
名前:
744
:03/04/04 23:56
>>752
釣りかと思うが釣られてみる。
ttp://www-6.ibm.com/jp/domino04/pc/support/beginner.nsf/fb8e1a8a5749032f49256a1d00097a28/af49d8cf505a17db49256a2a00286780?OpenDocument
【日本語】 URL (ユー・アール・エル)
【英語】 URL ( Uniform Resource Locator の略)
インターネットに接続されているコンピューター上のサービスを利用するために指定する住所のようなも のです。 アドレスとも言います。
なんかつかれた。春休み早くおわらねーかな。
755
名前:
デフォルトの名無しさん
:03/04/05 00:09
イラク戦争の中継を見ながらこう書いてしまったことはありませんか―――
vector v;
v.bush_back(0);
756
名前:
デフォルトの名無しさん
:03/04/05 00:59
ややウケタw
757
名前:
デフォルトの名無しさん
:03/04/05 11:12
お願いします。コンパイルできません。
% g++ --version
egcs-2.91.66
です。
ostream& operator<< (ostream& out,
const vector<int, allocator<int> >& v)
{
copy(v.begin(),v.end(),ostream_iterator<int,char,char_traits< char > >(out," "));
return out;
}
http://www.mmm.muroran-it.ac.jp/guide/unix/C++/stdlib/stdref/vec_0251.htm#Example
758
名前:
デフォルトの名無しさん
:03/04/05 11:18
>>757
デフォルトのアロケータをサポートしない処理系でSTLを使うのは
一種のチャレンジだ。
759
名前:
デフォルトの名無しさん
:03/04/05 11:39
>>758
そこのところは書き換えました。
解決しました。
760
名前:
sage
:03/04/05 13:20
>>751
クラスの静的メンバを使う場合、そのクラスのインスタンスを生成しなくても利用できるよ。
設計時に関数の固まりをオブジェクトとしてとらえたかどうかでクラスにするか、
namespaceで囲むだけにするか、それともただの大域関数にするかを決めればいい。
761
名前:
デフォルトの名無しさん
:03/04/05 17:19
関数の引数として、クラスオブジェクトのポインタ渡しと参照渡しで、
何か違いってあるのですか?
762
名前:
sage
:03/04/05 17:51
参照渡しで受け取る場合ぬるぽが来る心配がない。
763
名前:
sage
:03/04/05 17:54
ポインタ渡しだと、基底クラスのポインタを渡せる。
つまり多態を使うときはこっち。
764
名前:
デフォルトの名無しさん
:03/04/05 17:58
参照渡しでもぬるぽは来る(…と言っても、そんなもん渡すんじゃねぇ!と
いう意思表示としては使えるが…)し多態も出来ますが。
765
名前:
デフォルトの名無しさん
:03/04/05 18:07
>>764
同意。
参照を選ぶときは、ぬるぽを考慮していないという意思表示に使ってます。
766
名前:
デフォルトの名無しさん
:03/04/05 19:36
僕も 0 を渡したときにしかるべき動作をする、
って仕様ならポインタ、そうでなければ全て参照渡しにしてます。
とくに const T& hoge ってのは慣用句みたいなものなので
覚えておきましょう。
767
名前:
デフォルトの名無しさん
:03/04/05 21:08
>763
参照でもポリモできるでしょ?
768
名前:
デフォルトの名無しさん
:03/04/05 23:32
ねーねー、C++って何ができるの?ゲームでも作れるの?
769
名前:
デフォルトの名無しさん
:03/04/05 23:41
C++は、言語です。
770
名前:
デフォルトの名無しさん
:03/04/05 23:43
>>769
うん。だから?
771
名前:
デフォルトの名無しさん
:03/04/05 23:46
「日本語って何ができるの?」って聞いてるようなもんだ。
772
名前:
デフォルトの名無しさん
:03/04/05 23:52
>>770
にも何かができるような言語は、
今後永遠に生まれることがないはずです。
773
名前:
デフォルトの名無しさん
:03/04/06 01:18
delete NULL;
を実行したとき、処理時間を奪われる以外の
作用がないことは言語仕様として定められて
いるのでしょうか?
if ( p != NULL ) delete p;
は、
delete p;
に置き換えても全く問題はないのでしょうか?
774
名前:
デフォルトの名無しさん
:03/04/06 01:21
ない
775
名前:
デフォルトの名無しさん
:03/04/06 01:23
>>774
ありがとうございます。
776
名前:
デフォルトの名無しさん
:03/04/06 01:30
delete p;
p = NULL;
としないと危ないと思われ。
777
名前:
デフォルトの名無しさん
:03/04/06 01:32
NULLなんてc++にはありませんが何か?
778
名前:
デフォルトの名無しさん
:03/04/06 01:36
>>776
別に危なくはないと思われ。
779
名前:
デフォルトの名無しさん
:03/04/06 01:40
>>776
auto_ptr使っとけ。
780
名前:
デフォルトの名無しさん
:03/04/06 03:08
>>776
それってよく見かけるけど
俺はdelete p;した後pを使うようなコードを書いた事が無い。
メモリの解放はなんらかのスマートポインタにやらせる。
明示的にdeleteを呼び出す事は滅多に無い。
そもそもp = 0;しなきゃ危ないコード
(例えばpを複数回deleteする可能性があるとか)
を書くのが問題なんじゃないのか?
781
名前:
デフォルトの名無しさん
:03/04/06 03:23
778-780 には同意できるが、777 には首をかしげる。
782
名前:
デフォルトの名無しさん
:03/04/06 03:48
#include <cstddef>
783
名前:
デフォルトの名無しさん
:03/04/06 08:46
>>781
首をかしげるだけなら誰にでもできるね。
784
名前:
デフォルトの名無しさん
:03/04/06 12:09
Javaのserialize(deserialize)みたいに、動的にオブジェクトのクラスを
発見するにはどうすればよいですか?
785
名前:
デフォルトの名無しさん
:03/04/06 12:36
>>783
普通そう思うよな?
ところが
786
名前:
デフォルトの名無しさん
:03/04/06 13:46
VC++ の std::runtime_error や std::logic_error が、
文字列を std::string で保存しているのを知って驚いた。
787
名前:
デフォルトの名無しさん
:03/04/06 13:51
>>784
プログラムが自分で管理する
788
名前:
デフォルトの名無しさん
:03/04/06 13:52
×プログラムが自分で管理する
○プログラマが自分で管理する
789
名前:
デフォルトの名無しさん
:03/04/06 16:04
>>784
intも全部クラスにしてクラスのタイプを返すメンバ関数をオーバーライドする
790
名前:
デフォルトの名無しさん
:03/04/06 18:13
#include <stdio.h>
void main()
{
for (int i = 0; i < 1000; i++)
;
printf("%d", i);
}
上のコード、BCBなら通らないけど、VC++なら通ってiの値が表示されるのですが、
どっちが正しいのでしょう?
791
名前:
デフォルトの名無しさん
:03/04/06 18:19
激しくスマソ、テンプレたどったら分かりました。
スレ汚してすみませんでした。
792
名前:
デフォルトの名無しさん
:03/04/06 18:24
どうわかったのかも書いてくれるとわかりやすい
793
名前:
791=790
:03/04/06 18:41
C&C++FAQ の 「for文の( )内で宣言された識別子の有効範囲はどうなっていますか。」を見ると、
for文のカッコ内で宣言された変数は、そのfor文内のみ有効だと書いてあった。
だから、790のコードを通さない方が正しい。
VC++も結構いい加減なんですね。
794
名前:
デフォルトの名無しさん
:03/04/06 18:45
>>793
そのように、どう解決したか書いてくれるとそれが妥当かどうかの検証ができる。
VCは6だとしたら、いいかげんなのではなく当時はそれで良かった。
規格はその後だからね。
(あってるかな?)
795
名前:
791=790
:03/04/06 19:14
>>7994
今度から気をつけます。
規格が決まったのは最近なんですか。
いやぁ、猫でも(ryを読んでて、790でコンパイルが通るような事が書いてあって、
あれっおかしいな?と思ってBCBで確かめてみたんだけど、
気になったので、VC++でも試したところ余計に分からなくなって・・・。
ちなみにVC++.NETです・・・。
796
名前:
デフォルトの名無しさん
:03/04/06 19:18
>>795
C++の規格は98年。VC6はそれよりちょっと前か?
797
名前:
デフォルトの名無しさん
:03/04/06 19:24
>>790-795
> (あってるかな?)
合ってないよ。
規格がどうのこうの言うんなら、「Microsoft 言語拡張機能」を Off してから議論しろや。
798
名前:
デフォルトの名無しさん
:03/04/06 19:41
>>795
同じく 98 年、ただし stdC++ よりも数ヶ月リリースが早かった。
799
名前:
798
:03/04/06 19:41
796 宛てですた。
800
名前:
デフォルトの名無しさん
:03/04/06 20:35
>>787
とうとう自己管理プログラム言語が完成したか。
801
名前:
デフォルトの名無しさん
:03/04/06 20:36
>>798
それならVC++6.0が標準規格に準拠していなくてもおかしくないんじゃない。
802
名前:
デフォルトの名無しさん
:03/04/06 21:02
VC6が出た時期なんてたいした問題じゃない。
VC6に含まれている大量のコードはそれ以前にかかれたもの。
803
名前:
デフォルトの名無しさん
:03/04/06 21:11
>>793
「for文内部」だと { } も含まないのかな?
() だけ?
有効範囲じゃなくても、スコープから外れるわけじゃないのかね?
804
名前:
名無しさん@Emacs
:03/04/06 21:23
いい加減、VC6は捨てろ。
古臭いMuleを使ってるのを見ると吐き気がする、
それと同じだ。
805
名前:
デフォルトの名無しさん
:03/04/06 21:28
エディタとコンパイラを同一視している奴がいるな(w
806
名前:
AGENT-GC
:03/04/06 21:41
Visual Studio .NET でC++できるんすか?
807
名前:
デフォルトの名無しさん
:03/04/06 21:44
MuleでC++はできません。
808
名前:
デフォルトの名無しさん
:03/04/06 21:45
>>806
マルチすんな
809
名前:
AGENT-GC
:03/04/06 21:48
やっぱVisualBasicC++っすよね?
C++するにはボーランドとマイクロソフトどっちがいいっすか?
810
名前:
デフォルトの名無しさん
:03/04/06 21:51
うるさい
811
名前:
デフォルトの名無しさん
:03/04/06 21:52
>VisualBasicC++
落ち着け
812
名前:
名無しさん@Emacs
:03/04/06 21:57
>>805
ハァ?馬鹿かおまいは?
新しいコンパイラぐらい買えっつーいみだボケ
813
名前:
デフォルトの名無しさん
:03/04/06 22:20
デストラクタは明示的には呼び出せない、と聞いて試したのですが、
普通の関数みたく呼び出すことができました。
ただしインスタンスは生きたままで、その後普通に他の関数をコールできました。
こういうものなんでしょうか?
あと、C++が起動、実行時にどのようなメモリの取り方をするのかが、
よくわかるようなサイト等はないでしょうか?
先輩が、インスタンスとは、クラスが必要とするメモリをmallocで取得してるようなもの &
C++は起動時に、リンクしているヘッダで宣言されてる全てのインスタンス分のメモリを取る
と言ってたのですが・・・するとそれらは全てヒープ領域に取られると言うことですか?
どなたか詳しい方お願いします。
814
名前:
デフォルトの名無しさん
:03/04/06 22:35
>>813
正直何が聞きたいのか良くわからん
815
名前:
デフォルトの名無しさん
:03/04/06 22:38
>>813
ヒープ領域はnewでオブジェクトを作成したとき
だけじゃないですかね?
newの実装とかは俺も知りたいけど、解説している
サイトは知らないなぁ。
816
名前:
デフォルトの名無しさん
:03/04/06 22:38
デストラクタは明示的に呼び出せる。
その後インスタンスはたまたま生きてるかも知れないが、
いつ何が起きてもおかしくないのでやらないように。
ヘッダで宣言されている「インスタンス」なんてあったっけ・・・?
あ、std::cin, std::cout, etc. があるか・・・ってそりゃ「定義」だが。
そりゃ、ヘッダでスタックに置いたならスタックに、
ヒープに置いたならヒープに取られるに決まってる。
何か話がかみ合ってない気もする。
817
名前:
sage
:03/04/06 22:39
>>813
allocatorに関して調べるとよろし
818
名前:
デフォルトの名無しさん
:03/04/06 22:43
>何か話がかみ合ってない気もする。
すんません、C++初心者なもので。
例えば、ヘッダに
class test1 {
・・・
};
class test2 {
・・・
test1 tst;
・・・
};
とか書いた場合、tstはいつ、どこに領域が取られるんでしょうか?
819
名前:
デフォルトの名無しさん
:03/04/06 22:48
VCのnewはmallocを使ってるけど
820
名前:
デフォルトの名無しさん
:03/04/06 22:51
>>818
そのヘッダをインクルードしたソースファイルごとにできる
821
名前:
デフォルトの名無しさん
:03/04/06 22:52
>>818
Test2をスッタクにおいた場合はtstもスッタクに。
タイミングはTest2の構築時とほぼ同じと思うが、それが正解なのかどうかはわからん。。
822
名前:
sage
:03/04/06 22:53
>>818
宣言と定義について書いてある本をさがして読むように。
スタックにとる場合は関数やメソッドの中で。たとえば
int foo() { test2 foo; }
起動時に静的な領域に取るなら関数の外で
test2 foo;
もしくはクラスの静的メンバとして
class zoo { static test2 foo; };
test2 zoo::foo;
ヒープに動的に取る場合は
関数やメソッドの中で
test2 *pfoo = new test2;
823
名前:
デフォルトの名無しさん
:03/04/06 23:00
>>818
それだけなら、領域は取られない。
どっかで、インスタンスを生成した時に領域が確保される。
test2 test_on_static; // (1)
void foo()
{
test2 test_on_stack; // (2)
test2 *test_on_heap = new test2; // (3)
...
}
(1) は、プログラム実行前に静敵領域に領域が確保されてて、main() の実行前にコンストラクタが呼ばれる。
(2) は、関数 foo() の入ってきた時にスタック上に領域が確保され、そのあとコンストラクタが呼ばれる。
(3) は、この文が実行された時にヒープ上に領域が確保されて、そのあとコンストラクタが呼ばれる。
>>820
一体何がソースファイル毎にできるんだ ?
もう少しちゃんと勉強しろよ。
>>821
スッタクって、アンタ...。
824
名前:
デフォルトの名無しさん
:03/04/06 23:02
書き方でスタックに取るかヒープに取るかなんて決まっていない。
825
名前:
デフォルトの名無しさん
:03/04/06 23:39
スッタク萌え
826
名前:
デフォルトの名無しさん
:03/04/06 23:55
皆さんありがとうございます。
>>823
(1) は、プログラム実行前に静敵領域に領域が確保されてて、main() の実行前にコンストラクタが呼ばれる。
(1)の場合、明示的にデストラクタを実行はできるんでしょうか?
静的領域にあることは別に問題とはならないのでしょうか?
>>816
デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
明示的に呼び出すことはできませんとありました。
実際のところどうなんでしょうか。
827
名前:
デフォルトの名無しさん
:03/04/06 23:59
unsigned char buf[sizeof(T)];
T* p = new (buf) T(); // これであってるかな?placement new
p->~T();
828
名前:
デフォルトの名無しさん
:03/04/07 00:09
>>827
あってるけど、間違ってる
829
名前:
デフォルトの名無しさん
:03/04/07 00:12
>>826
>デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
>明示的に呼び出すことはできませんとありました。
そのfaqを読み間違えてるのではないか?
830
名前:
デフォルトの名無しさん
:03/04/07 00:29
>>826
ISO/IEC 14882(C++の仕様書)の12.4.12辺りには、
「明示的にデストラクタを呼ぶときには〜」
という旨の記述があるので、できます。
各コンパイラの実装が状況はともかく、仕様上は。
ttp://www.bohyoh.com/CandCPP/FAQ/FAQ00095.html
BohYohのFAQ(↑)は読み間違いようはないけど、間違ってるね。
古い仕様に基づいているのか、仕様をあたらず特定の実装で確かめただけなのか。
何れにせよよろしくないです。
831
名前:
デフォルトの名無しさん
:03/04/07 00:38
なるほど、わかりました。仕様書まで調べていただいて感謝です。
皆さんありがとうございました。m(__)m
832
名前:
デフォルトの名無しさん
:03/04/07 00:43
ま た 「 仕 様 書 」 か ・ ・ ・
833
名前:
デフォルトの名無しさん
:03/04/07 01:00
だって一番正確なんだもん。
$18ぐらい大した額じゃないっしょ。
834
名前:
デフォルトの名無しさん
:03/04/07 01:06
>>826
> (1)の場合、明示的にデストラクタを実行はできるんでしょうか?
> 静的領域にあることは別に問題とはならないのでしょうか?
実行はできるけど、実行結果は保証されないよ。
(暗黙のデストラクタ呼び出しを禁止できないから、2重にデストラクタが呼び出されれてしまうからね。)
> デストラクタは明示的に呼び出せるとのことですが、BohYohのFaqに、
> 明示的に呼び出すことはできませんとありました。
> 実際のところどうなんでしょうか。
呼び出すこと自体はできる。
ただし、暗黙にデストラクタを呼ばないようにする責任はプログラマにあるよ。
ほとんど、
>>827
のケースしかないと思う。
835
名前:
デフォルトの名無しさん
:03/04/07 01:35
>>833
"Standard" ←→ 「規格」
"Specification" ←→ 「仕様」
どっちでもいいのかなぁ?
836
名前:
デフォルトの名無しさん
:03/04/07 01:37
標準書でいいじゃん
837
名前:
デフォルトの名無しさん
:03/04/07 19:41
ofstream fo;
fo.open(filename);
この場合、無いファイルは作られるのでしょうか?
よろしくお願いします。
838
名前:
デフォルトの名無しさん
:03/04/07 21:33
>>826
あれを使うのは、mallocやallocatorで取って来た、未初期化の
生のメモリを扱いたい時、たとえばコンテナを自分で実装したい
時くらいかなあ。いずれにしても、アラインメントやら例外安全
やら、面倒な問題がいっぱいあるから、C,C++のメモリの扱いを
完全に把握してから使うべし。
839
名前:
デフォルトの名無しさん
:03/04/07 22:22
C++って基礎が大事?今文字を出力したりするコード書いてるんだけど、こんなの役に立つかなぁ・・・
と思いまして。
840
名前:
デフォルトの名無しさん
:03/04/07 22:37
>>839
プログラミングにおいては、例え、ただ文字を出力するだけのコードであっても
コードを書いて慣れることに何らかの意味があると思ふ。
841
名前:
デフォルトの名無しさん
:03/04/07 22:46
何事も基礎は大切
842
名前:
デフォルトの名無しさん
:03/04/07 22:47
>>840
ありがとう。それを聞いてやる気が出ました。
っつーわけで今「if文」を勉強中。
843
名前:
デフォルトの名無しさん
:03/04/07 23:06
>>837
std::ofstream のデフォルトは std::ios::out だから、ファイルがあっても
内容を空にする。なければ新規作成する。
844
名前:
デフォルトの名無しさん
:03/04/07 23:26
超初心者で申し訳ない。
int main() で始めるとき、intしかつかえないんですか?
845
名前:
デフォルトの名無しさん
:03/04/07 23:48
>>844
質問の意味が良く分からない
mainの戻り値はintにするしかないが
846
名前:
デフォルトの名無しさん
:03/04/07 23:49
>>844
確実なのはstringにしたら落ちるという事だ。
847
名前:
デフォルトの名無しさん
:03/04/07 23:53
デーモンとか作るときは void じゃね?
848
名前:
デフォルトの名無しさん
:03/04/08 00:18
>>844
int以外で返して、その後どうしようとしてるの?
849
名前:
837
:03/04/08 00:30
>>843
レスありがとうございました。わかりました。
あと、一行目の理由がわかるように精進します。
850
名前:
デフォルトの名無しさん
:03/04/08 17:25
以下のようなクラスAのvectorをソートしたいのですが、ソートの基準は文字列なんです。
このときの叙述関数はどのように書けばいいのでしょうか?
Cの標準関数で文字列の比較をぐぐってみたのですがstrcmpしか引っかからず、もちろんこの関数はつかえません。
class A {
char label[20];
int value;
// :
};
void foo(void)
{
vector<A> vec;
// :
sort(vec.begin(), vec.end(), cmp);
}
bool cmp(const A& a, const B& b)
{
return (a.label < b.label); // <-----ここの書き方が?
}
851
名前:
デフォルトの名無しさん
:03/04/08 17:31
>>850
なぜstrcmpが使えないのか500文字以内で述べよ。
852
名前:
デフォルトの名無しさん
:03/04/08 17:38
そもそもcmp()の第二引数の型がおかしいわけだが。
20文字以下ということならstrncmp()とか、memcmp()とか。
853
名前:
デフォルトの名無しさん
:03/04/08 17:41
>>852
ABC\0DEFGのような文字列がありうるからmemcmpはありえないと思うが。
854
名前:
850
:03/04/08 17:45
>851
すいません。
strcmpの仕様の勉強不足でした。
申し訳ありませんでした。
855
名前:
デフォルトの名無しさん
:03/04/09 01:44
switch と if〜elseif〜else って何が違うんですか?
856
名前:
デフォルトの名無しさん
:03/04/09 02:03
>>855
分岐先の数が違う。
switch : 多方向分岐
if : 2方向分岐
ついでに藻前の質問はスレ違い。
857
名前:
デフォルトの名無しさん
:03/04/09 02:06
switch は if と比べて、条件を簡潔に書ける/フォールスルーができる/コンパイラが
最適化しやすいという利点と、複雑な条件を書けないというデメリットがある。
858
名前:
デフォルトの名無しさん
:03/04/09 16:33
>>846
普通おちることはないだろ。逆なら、おちることはありうるが。
>>856
> 分岐先の数が違う。
ハァ ? if〜 else if 〜 else 〜 だぞ。
~~~~~~~
ついでに、なんでスレ違いなのか聞きたいもんだ。
859
名前:
デフォルトの名無しさん
:03/04/09 16:55
>>858
わかるように書け。
860
名前:
デフォルトの名無しさん
:03/04/09 17:19
>>858
結局2分岐を繰り返しているだけじゃん
861
名前:
デフォルトの名無しさん
:03/04/09 17:59
>>858
まあC言語と共有する問題はC言語スレのほうが相応しいのではないかとは思うが
862
名前:
855
:03/04/09 18:52
>>861
俺のC++参考書に載ってたんですが・・・。
すれ違いならごめんね。
863
名前:
デフォルトの名無しさん
:03/04/09 19:12
そりゃ載ってるだろう
864
名前:
デフォルトの名無しさん
:03/04/09 22:44
アカデミック買ったんだけど何やったらいいのかな
865
名前:
デフォルトの名無しさん
:03/04/09 22:49
みんな最初は2chブラウザを作って一人前になったんだよ。
866
名前:
デフォルトの名無しさん
:03/04/09 23:13
とりあえずHello,world!!やっとけ。
何それって聞くなよ。わからなかったらお前は才能がないと言う事だ。
867
名前:
デフォルトの名無しさん
:03/04/10 01:51
>>866
人間関係クラスタが気の利いた台詞を発言することを提唱。
868
名前:
デフォルトの名無しさん
:03/04/10 02:02
>>867
ZOEなのか、EVAなのか、それともそれ以外なのか、そこが問題だ。
869
名前:
デフォルトの名無しさん
:03/04/10 09:23
(´-`).。oO(ハロワ・・・)
870
名前:
デフォルトの名無しさん
:03/04/10 18:18
俺は、新しい言語を覚えるときは
とりあえずヒットアンドブローを作る。
871
名前:
デフォルトの名無しさん
:03/04/10 19:29
>>864
とりあえず、Kanimiso128を作ってくれ
872
名前:
デフォルトの名無しさん
:03/04/10 19:37
質問です。
ファイルAにある関数内から、別のファイルBに定義したクラスのメンバー関数を使うにはどうしたらよいのでしょうか?
変数や関数は、extern宣言しますが、クラスの場合もそうですか?
873
名前:
デフォルトの名無しさん
:03/04/10 19:45
自分はC言語を勉強した人間です。
C++とVC++を勉強したいのですが、
お奨めの書籍等ありましたらどうかご教授ください。
874
名前:
デフォルトの名無しさん
:03/04/10 19:48
>>873
>>4
とMSDN
875
名前:
デフォルトの名無しさん
:03/04/10 19:51
>>874
お手数掛けました。
876
名前:
デフォルトの名無しさん
:03/04/10 19:52
>>872
ヘッダファイルにクラスの定義を書いて、
877
名前:
855
:03/04/10 20:02
無限ループになるとどうなっちゃうんですか?
パソコンがフリーズしそうで試せません。
878
名前:
デフォルトの名無しさん
:03/04/10 20:18
>>872
クラスについて基本から勉強することを(略
879
名前:
デフォルトの名無しさん
:03/04/10 20:21
>>872
クラスも型なので変数と同じあつかいでいいです。
880
名前:
デフォルトの名無しさん
:03/04/10 20:22
>>877
普通のOSならフリズらないよ
881
名前:
デフォルトの名無しさん
:03/04/10 20:43
>>880
普通のOS・・・・
友人を引っ掛けて試して見ます。
882
名前:
872
:03/04/10 21:34
>>876
,878,879
レスありがとうございます。
エラーが出なくなっても、デバッガでお目当ての関数内を
トレースできなかった(なぜかスルー)ので質問させていただきました。
またよろしくお願いします。では。
883
名前:
デフォルトの名無しさん
:03/04/10 21:37
無限ループ
while(1){
cout << "\t\b\b";
}
884
名前:
デフォルトの名無しさん
:03/04/10 21:49
>>883
OSがWindowsXPだと落ちます。
885
名前:
デフォルトの名無しさん
:03/04/10 22:06
>>884
ま、まじで・・・・?
注意します。
886
名前:
デフォルトの名無しさん
:03/04/10 23:43
質問です。
構造体の中身をゼロで初期したい場合。
struct Hoge_t{
int a,b,c;
};
memset( &Hoge_t,0,sizeof(Hoge_t) );
で 大丈夫ですよね。
それで たとえば、 構造体を public なクラスとして扱う場合に、
struct CHoge{
int a,b,c;
Hoge_t(){};
~Hoge_t(){};
};
memsetで ゼロで埋めても大丈夫でしょうか?また、メモリ確保を
malloc で とる場合(まぁ new を使えばいいんでしょうが)
CHoge = malloc( sizeof(CHoge) ); と sizeof を使用して確保しても大丈夫でしょうか?
887
名前:
デフォルトの名無しさん
:03/04/10 23:48
>>886
おとなしく初期化を使いましょう。
CHoge() : a(0), b(0), c(0) ....
malloc()使うとコンストラクタを呼び出してくれないのでやめましょう。
888
名前:
デフォルトの名無しさん
:03/04/11 01:14
クラスをクラス化したクラスをください。スクリプトにつかうので。
889
名前:
デフォルトの名無しさん
:03/04/11 01:18
Ruby では一応クラスもクラスだぞ。
890
名前:
デフォルトの名無しさん
:03/04/11 01:41
ゲーム用のスクリプトなのでRUBYではダメです
なければintとcharを駆使しますが
891
名前:
デフォルトの名無しさん
:03/04/11 01:46
状況がヨクワカラン。
892
名前:
デフォルトの名無しさん
:03/04/11 10:40
クラスオブジェクトは関数の引数として、ポインタで渡してもいいんですよね。
参照とどう違うんですかね?
893
名前:
デフォルトの名無しさん
:03/04/11 11:09
「参照 ポインタ 引数 違い」これくらいでぐぐればいいようだが。
894
名前:
デフォルトの名無しさん
:03/04/11 18:06
C++にクラスオブジェクトなんてないんだが。
たぶんクラスのインスタンスであるところの
オブジェクトのことだろうけどさ。
895
名前:
デフォルトの名無しさん
:03/04/11 19:14
>>886
コンストラクタ、デストラクタの中身がない場合なら
OK。ただし、「中身」には、メンバ変数の初期化の
ために暗黙に生成されるコードも含まれるので
注意。だから、intやらconst char *だけの構造体
でなく、std::stringみたいのを含んでいたらアウト。
あと、たまーにポインタをmemsetで潰してもNULL
ポインタにならないプラットフォームがあるので注意。
896
名前:
デフォルトの名無しさん
:03/04/11 21:23
memsetよりもこの方がいくない?
static CHoge zero;
*this = zero;
897
名前:
デフォルトの名無しさん
:03/04/11 23:35
>>886
への解答で
仮想関数があったら駄目
という、教えが出てないのはどういうことですか?
898
名前:
デフォルトの名無しさん
:03/04/11 23:50
>>897
>>887
で話は終わっている。
899
名前:
デフォルトの名無しさん
:03/04/12 03:08
ポインタのほうがすき。
900
名前:
デフォルトの名無しさん
:03/04/12 13:51
キリンさんのほうがもっと好き。
901
名前:
デフォルトの名無しさん
:03/04/12 14:00
俺のゾウさんが好きなんだろう。オラオラ
902
名前:
デフォルトの名無しさん
:03/04/12 14:19
これで象?ネズミの尻尾の間違いじゃないの
903
名前:
デフォルトの名無しさん
:03/04/12 14:23
チンポ何センチ級?俺は18〜19センチ級だと思うんだけど。
904
名前:
デフォルトの名無しさん
:03/04/12 15:49
長さに級とかつけないで・・・。ミリまでちゃんとしる。
905
名前:
デフォルトの名無しさん
:03/04/12 17:47
18.0〜19.999999999..............センチの範囲内と言うことだろうか?
906
名前:
デフォルトの名無しさん
:03/04/12 17:56
ずいぶん誤差の大きいものさしだな
907
名前:
デフォルトの名無しさん
:03/04/12 18:27
doubleで示せる20.0に一番近くて20.0未満の数字ってなんだろう。
908
名前:
デフォルトの名無しさん
:03/04/12 18:27
>>907
バイナリサーチ白
909
名前:
デフォルトの名無しさん
:03/04/12 19:26
>>907
機械イプシロンを調べればわかるかも。
910
名前:
デフォルトの名無しさん
:03/04/12 19:37
>>907
19.999999999999996
911
名前:
デフォルトの名無しさん
:03/04/12 19:39
グレト!!
912
名前:
デフォルトの名無しさん
:03/04/12 21:20
C++の基本的な部分を抑えた人が作るプログラムって何?
913
名前:
デフォルトの名無しさん
:03/04/12 21:21
>>912
Hello, world!
914
名前:
デフォルトの名無しさん
:03/04/12 21:31
>>913
それはなんだすか?
915
名前:
デフォルトの名無しさん
:03/04/12 22:13
>>914
挨拶です
916
名前:
デフォルトの名無しさん
:03/04/12 22:20
>>915
そりゃまた随分グローバルな挨拶ですね。
917
名前:
デフォルトの名無しさん
:03/04/12 22:33
>>916
返す言葉もありません。
918
名前:
デフォルトの名無しさん
:03/04/12 23:05
、、、
919
名前:
デフォルトの名無しさん
:03/04/12 23:07
/ヽ /ヽ
/ ヽ / ヽ
______ /U ヽ___/ ヽ
| ____ / U :::::::::::U:\
| | // ___ \ ::::::::::::::|
| | | | | U :::::::::::::|
| | .|U | | ::::::U::::| なにこのスレ・・・
| | | ├―-┤ U.....:::::::::::::::::::/
| |____ ヽ .....:::::::::::::::::::::::<
└___/ ̄ ̄ :::::::::::::::::::::::::|
|\ | :::::::::::::::::::::::|
\ \ \___ ::::::
920
名前:
デフォルトの名無しさん
:03/04/12 23:13
お勧めの解説本おしえてくらさい。
入門編からポインタ位までを扱った初歩的な奴、定番を教えてください。
条件は日本語で書かれてることです。
921
名前:
デフォルトの名無しさん
:03/04/12 23:15
>>920
俺の書いた本を読むか?
922
名前:
デフォルトの名無しさん
:03/04/12 23:18
>>912-919
チョトワラタ
923
名前:
デフォルトの名無しさん
:03/04/12 23:20
●●● Hello worldって死滅しちゃうの??? ●●●
924
名前:
920
:03/04/12 23:22
>>921
なんていう本でしょうか?
925
名前:
デフォルトの名無しさん
:03/04/12 23:23
>>924
10日でわかるC++ 第二版
926
名前:
920
:03/04/12 23:38
>>925
見つからない。(´・ω・`)
「標準C++の基礎知識」「標準講座C++ ― 基礎からSTLを利用したプログラミングまで」
買います。
927
名前:
デフォルトの名無しさん
:03/04/12 23:41
VisualC++3週間完全マスター
928
名前:
デフォルトの名無しさん
:03/04/12 23:58
俺は「詳説C++」と「Effective STL」で乗り切れてる
929
名前:
デフォルトの名無しさん
:03/04/13 00:02
ポインタ完全制覇を鼻で笑って流し読みできればアプリ製作でポインタに困ることはほとんどない
930
名前:
デフォルトの名無しさん
:03/04/13 00:22
コンパイラーのコンパイルエラーメッセージで十分だろ。
そういう問題じゃなくて?
931
名前:
デフォルトの名無しさん
:03/04/13 00:26
初心者はエラーを出すまでが長い
932
名前:
デフォルトの名無しさん
:03/04/13 00:27
HogeClass Hoge;
HogeClass *pHoge;
pHoge = &Hoge;
delete pHoge;
:
:
Hoge.Func(); // 何か処理。
ってやったら、やっぱまずいですよね。
実行時の影響ってどんなのがありますか?
933
名前:
デフォルトの名無しさん
:03/04/13 00:29
>>932
うわぁそりゃひどい。
影響とかそんなレベルじゃない。
未定義動作へ突入。
934
名前:
デフォルトの名無しさん
:03/04/13 00:30
なぜnewで得たものでない領域をdeleteしようとする。
935
名前:
デフォルトの名無しさん
:03/04/13 00:35
>>932
Hogeはヒープには存在しないから、危険です。
936
名前:
デフォルトの名無しさん
:03/04/13 00:37
>>932
未定義動作はシステムを不安定にする。
任意の小さな変更(たとえば、セミコロンを挿入する、プログラムを別の曜日に実行する、Enterキーを押し下げる前に微笑み方を変えるなど)によって
システムがどのように振舞うか(あるいは、どのように間違った振る舞いをするのか)といった大きな事象が変わってしまうかもしれない。
プログラムがファイルを削除することもあるだろうし、間違った答えが返ってくるだけかもしれない。
場合によってはまったく正常に動くかもしれない!
937
名前:
デフォルトの名無しさん
:03/04/13 00:54
struct Test
{
void Func() {}
};
int
main()
{
Test* t = 0;
t->Func();
return 0;
}
未定義ですか?
gccでやってみたら、何も起きなかったが…
938
名前:
デフォルトの名無しさん
:03/04/13 00:56
VC++だったら落ちるよ。
939
名前:
デフォルトの名無しさん
:03/04/13 00:58
public:書くのが面倒だからってstructにするなよ。
940
名前:
デフォルトの名無しさん
:03/04/13 00:58
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/ ←
>>937
(_フ彡 /
941
名前:
デフォルトの名無しさん
:03/04/13 01:00
>>932
C++の基礎から勉強汁
942
名前:
デフォルトの名無しさん
:03/04/13 01:01
>>938
ウソは書かないように。落ちませんでしたが。
Test::Func() が非仮想メンバ関数、かつ、メンバへの参照がないので、
thisへの参照はおこなわれることがないよね。
VCの実装上も、そうなっているようです。
しかし、もしTestが多重継承だったら、勿論、話は違ってきます。
943
名前:
937
:03/04/13 01:01
ああ、これが噂のぬるぽか。よくわかりますた。
ありがとうございました。
944
名前:
デフォルトの名無しさん
:03/04/13 01:02
>>938
VC++で試したが落ちない。つーかこれは落ちなくてもフシギではない。
Func()が仮想関数だったらまず落ちるが。
これを利用したテクニックもある。
struct Foo
{
void Func()
{
if(!this)//NULLだったら処理しない。
return;
}
};
ただ、これを勧めている訳ではもちろんない。
945
名前:
デフォルトの名無しさん
:03/04/13 01:04
でも未定義なのは確かか?それとも規格上も安全?
946
名前:
デフォルトの名無しさん
:03/04/13 01:05
>>938
BCCでもOK
947
名前:
デフォルトの名無しさん
:03/04/13 01:08
VC++5.0なら落ちたが。
948
名前:
デフォルトの名無しさん
:03/04/13 01:10
#include <iostream>
using namespace std;
class Test {
public:
void Func(){ cout << "(゚∀゚)アヒャ" << endl; };
};
int main()
{
Test* t = 0;
t->Func();
return 0;
}
BCCでテスト。
「警告 't'に代入した値は使われていない」ってのが出たが、通った。
949
名前:
デフォルトの名無しさん
:03/04/13 01:12
通ったってコンパイルが?そりゃ通るだろ。
950
名前:
デフォルトの名無しさん
:03/04/13 01:16
>>949
いや、実行もできた。
951
名前:
デフォルトの名無しさん
:03/04/13 01:20
ぬるぽに決まってる!って思ってたら本当に実行できてしまった罠。
952
名前:
デフォルトの名無しさん
:03/04/13 01:24
>>950
それで、そのコードが実行できたってことでなにが主張したいの?
953
名前:
デフォルトの名無しさん
:03/04/13 01:26
>>952
動作するか検証しただけですが、何か問題でも?
954
名前:
デフォルトの名無しさん
:03/04/13 01:28
>>953
未定義動作の結果を見てなにを検証したというのか?
955
名前:
デフォルトの名無しさん
:03/04/13 01:28
ぬるぽでも動くのか。
奇怪だな。
956
名前:
デフォルトの名無しさん
:03/04/13 01:30
>>954
未定義だけど「動いた」って書いただけだろ。
何をムキになってる?
957
名前:
デフォルトの名無しさん
:03/04/13 01:34
>>956
未定義なのがわってるなら、まぁいいんだが。
>>937
みたいなやつがそれ見たら、誤解しかねない。
958
名前:
デフォルトの名無しさん
:03/04/13 01:35
>>932
? に何がくるかだと思うが。
// case 1
phoge = &hoge;
delete phoge;
これはヤバい。
new されてないのを delete してる。
どうなるかは分からんが、普通は落ちる。
// case 2
phoge = new Hoge;
delete phoge;
hoge.foo();
問題なし。
// case 3
phoge = new Hoge[9];
delete phoge;
これはヤバい。
配列 new したのを単一 delete してる。
普通、配列 new した場合はその個数を配列の直前に保持しておくが、
単一 new の場合はそんなものはない。
従って、実際に確保されたメモリブロックは phoge よりちょっと前なのが普通であり、
delete に渡されたアドレスはその先頭とはずれている。
その後どういう動作になるのかは分からん。
仮にその余分なメモリを確保しない仕様のコンパイラであっても、
phoge[1] 〜 phoge[8] がデストラクトされないまま解放されてしまうだろう。
959
名前:
デフォルトの名無しさん
:03/04/13 01:37
>>957
誰も勧めちゃいないって。
>>936
も書いてるけどな。
960
名前:
958
:03/04/13 01:39
ミス。
// case 1
phoge = &hoge;
あと、こう置き換えて。
Hoge → HogeClass
phoge → pHoge
hoge → Hoge
foo → Func
961
名前:
デフォルトの名無しさん
:03/04/13 01:39
>>958
聞いてもいないことを長々と解説するなよ。うざいぞ。
962
名前:
デフォルトの名無しさん
:03/04/13 01:43
>>961
一応
>>932
の回答になってるからいいんじゃない?
963
名前:
デフォルトの名無しさん
:03/04/13 01:45
>>962
はぁ?それならcase 1で十分なうえに既出だろ。
だれも配列newの話なんかしてない。
964
名前:
デフォルトの名無しさん
:03/04/13 01:47
(・A・)まったりしろよ君たち…
965
名前:
デフォルトの名無しさん
:03/04/13 01:48
なんでこうムキになる奴が多いんだろうね(´ー`)y─┛~~
966
名前:
デフォルトの名無しさん
:03/04/13 01:49
>>965
デスマ中なんだろ
そっとしといてやれ
967
名前:
デフォルトの名無しさん
:03/04/13 01:50
だってC++だもん
968
名前:
デフォルトの名無しさん
:03/04/13 01:52
正直言って、普通とか規約とかどうでもいい。
ただ動けば問題ない。
科学と一緒。
認知できないものは存在しない。
969
名前:
デフォルトの名無しさん
:03/04/13 01:54
スマン,ナントナク
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/ ←
>>967
(_フ彡 /
970
名前:
デフォルトの名無しさん
:03/04/13 01:55
>>968
そのうち認知できるようになるかもな。
971
名前:
マイク
◆yrBrqfF1Ew
:03/04/13 01:56
C++は最高だよ。
2ちゃんネラは常にダメだが。
972
名前:
デフォルトの名無しさん
:03/04/13 01:57
動いているように見えてるだけかもしれない
973
名前:
デフォルトの名無しさん
:03/04/13 02:00
>>968
>>936
974
名前:
デフォルトの名無しさん
:03/04/13 02:00
科学と一緒。
認知できてから考えれば良い。
975
名前:
デフォルトの名無しさん
:03/04/13 02:02
>>974
釣られた!!
976
名前:
デフォルトの名無しさん
:03/04/13 02:03
そんな考え方だから2000年問題みたいなんが起こるんだ。
977
名前:
デフォルトの名無しさん
:03/04/13 02:14
2000年問題? 将来はもっと凄い問題が待ってるぜ!
978
名前:
デフォルトの名無しさん
:03/04/13 02:14
問題が起こった方が刺激があっていいYO!
979
名前:
デフォルトの名無しさん
:03/04/13 02:15
>>977
Java死滅?
980
名前:
デフォルトの名無しさん
:03/04/13 02:16
さて、そろそろ次スレの季節ですね。
981
名前:
デフォルトの名無しさん
:03/04/13 02:21
>刺激があっていいYO!
確かに…わくわくするな(`エ´*)
982
名前:
デフォルトの名無しさん
:03/04/13 02:26
ちょうど一ヶ月だ!
983
名前:
デフォルトの名無しさん
:03/04/13 02:31
>>932
VC++6.0とXPだと動作が不安定になる。
以降の処理で問題なく動くときもあるし、いきなり落ちるときもある。
しばらく大丈夫かと思えば、やっぱり途中で落ちたり、
Hoge.Func()が予期しない処理をしたりする。
まあ、慣れないことはしないに越したことが無いってことだ。
984
名前:
デフォルトの名無しさん
:03/04/13 02:32
どうせ誰も2038年問題のことなど何も考えてないだろ
985
名前:
デフォルトの名無しさん
:03/04/13 02:33
っていうか、慣れるって・・・
慣れたら念力で常に正常実行できるとか?(w
986
名前:
デフォルトの名無しさん
:03/04/13 02:33
>>984
その頃には最新のコンピュータが、
問題のあるコンピュータのコードを書き換えてくれるようになってるよ。
987
名前:
デフォルトの名無しさん
:03/04/13 02:46
>>984
もう死んでいるだろうしなぁ。
988
名前:
デフォルトの名無しさん
:03/04/13 03:41
20年後ってVC++使いって需要ありますかね?
989
名前:
デフォルトの名無しさん
:03/04/13 03:42
量子コンピューターが実用化されたら、
今のプログラマーは置いてきぼりかな・・・
990
名前:
デフォルトの名無しさん
:03/04/13 03:53
そのころには年金で宇宙旅行にでもいってるよ
991
名前:
v(^・^)v
:03/04/13 05:40
次スレ立てました
C++相談室 part18
http://pc2.2ch.net/test/read.cgi/tech/1050177746/
992
名前:
デフォルトの名無しさん
:03/04/13 06:14
>>991
朝早くからご苦労様
993
名前:
デフォルトの名無しさん
:03/04/13 15:49
get
994
名前:
デフォルトの名無しさん
:03/04/13 16:22
v(^・^)v
995
名前:
デフォルトの名無しさん
:03/04/13 16:57
1000取り始め
996
名前:
デフォルトの名無しさん
:03/04/13 16:57
996
997
名前:
デフォルトの名無しさん
:03/04/13 16:57
997
998
名前:
デフォルトの名無しさん
:03/04/13 16:58
998
999
名前:
デフォルトの名無しさん
:03/04/13 16:58
999
1000
名前:
デフォルトの名無しさん
:03/04/13 16:58
1000!!!
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.