■過去ログ置き場に戻る■ 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.