■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part15
501
名前:
デフォルトの名無しさん
:03/02/06 23:02
朝のぬるぽから夜のぬるぽまで幅広くサポート
502
名前:
デフォルトの名無しさん
:03/02/06 23:05
あるクラス(Aとしよう)のデストラクタがvirtualであれば、
そのクラスを継承したクラス(Bとしよう)のデストラクタは必ずvirtualになる。
Bのデストラクタに対しvirtualキーワードを付けるかどうかに依存しない。
これはメンバ関数についても当てはまる。
503
名前:
デフォルトの名無しさん
:03/02/07 00:26
class A {
virtual void func() const {}
};
class B : public A {
nullpo void func() const {}
};
Bのfunc()をvirtualで無くす方法。ぬるぽ。
504
名前:
502
:03/02/07 00:31
502に追記。classとstructの違いは、デフォルトのアクセス権のみなので、
502の事柄はstructにも当てはまる。
505
名前:
デフォルトの名無しさん
:03/02/07 00:33
ぬるぽっていつごろからどういう意味で使われだしたの?
506
名前:
デフォルトの名無しさん
:03/02/07 00:37
ぬるぽ
http://pc.2ch.net/test/read.cgi/prog/1042017145/
507
名前:
デフォルトの名無しさん
:03/02/07 00:46
頭痛い...。
「デストラクタを途中で切る」
>>502
の言う通り。
「クラス階層以下で動的確保」
やっぱり意味が分からない。
多分
>>502
を踏まえれば意味の無くなる言葉なのだろう。
「NULLデストラクタ」
デストラクタは暗黙に
メンバ変数と基底クラスのデストラクタを呼ぶという後処理を含むので、
完全に無くなるというのはメンバ変数にデストラクタを呼ぶクラスがなく、
かつ基底クラスも同条件である場合のみ。
「NULL命令」
いわゆる NOP のことか?
上記の様に完全に消え去る場合は関数が呼ばれすらしないし、
それ以外でも NOP などは入らない。
関数と関数の間の詰め物として NOP を使うことがあるが、それは100%別の話だ。
それとも ((void*)0)(); という類のものか?
これは上の完全に消え去るということと同義なわけだが、
その条件は上の通り非常に厳しいものだ。
508
名前:
デフォルトの名無しさん
:03/02/07 00:50
>>506
途中まで読んでみたが理解できなかった
509
名前:
デフォルトの名無しさん
:03/02/07 00:52
「NULL命令」
もしかして空文のことか?
510
名前:
デフォルトの名無しさん
:03/02/07 00:54
>>508
どっかの誰かが書いたテンプレ
プログラム板の名物スレですな。こうでもしなけりゃ心が落ち着かない人が多いのです。
■ NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc.2ch.net/prog/kako/1024/10245/1024553352.html
■ NullPointerExceptionを「ぬるぽ」と呼ぶスレ2
http://pc.2ch.net/test/read.cgi/prog/1039481980/l50
<<関連スレ>>
■ ぬるぽ
http://pc.2ch.net/test/read.cgi/prog/1042017145/l50
■ (ム板)NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc2.2ch.net/test/read.cgi/tech/1043623143/l50
■ (モナ板)NullPointerExceptionを「ぬるぽ」と呼ぶスレ
http://pc2.2ch.net/test/read.cgi/tech/1043623143/l50
511
名前:
デフォルトの名無しさん
:03/02/07 00:56
>>510
あーそういうことか、ありがとう。
512
名前:
デフォルトの名無しさん
:03/02/07 01:08
まあ、リソースの解放を気にしているだけマシなのかもしれん。
513
名前:
デフォルトの名無しさん
:03/02/07 01:08
モナ板のアドレスが間違ってる。
http://aa.2ch.net/test/read.cgi/mona/1044358791/l50
514
名前:
デフォルトの名無しさん
:03/02/07 02:04
>>485
のリンク先読んでみたけど、
"A Good Thing"と"Yuck"が訳せん…
特に後者。ひょっとして笑うところ?(んなわけないか)
515
名前:
デフォルトの名無しさん
:03/02/07 02:39
>>514
http://www2.alc.co.jp/ejr/index.php?word_in=yuck
>>485
のリンク先読んでないからなんともいえないけど、
A Good Thing って言ったら、「それはいいことだ」とかそういうの。
516
名前:
デフォルトの名無しさん
:03/02/07 04:25
>>514
笑うところでしょ(笑)
517
名前:
デフォルトの名無しさん
:03/02/07 11:17
質問です。
↓のような op= の定義は、C++的にアリですか?
std::wstring& operator=( std::wstring& lhs, std::string& rhs )
{
if( !s.empty() )
{
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw charactertype_convert_exception();
lhs = &buff[0];
}
return( lhs = L"" );
}
518
名前:
517
:03/02/07 11:34
>>517
…つーか グローバルな op= ってコンパイル通らないや。
ごめん、op<<=に変更 VC++7.0 で動作確認。
std::wstring& operator<<=( std::wstring& lhs, const std::string& rhs )
{
if( !rhs.empty() )
{
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw std::runtime_error("bad chartype convert");
lhs = &buff[0];
returnlhs;
}
return( lhs = L"" );
}
アリですか、ナシですか?
519
名前:
デフォルトの名無しさん
:03/02/07 12:36
>>518
ちゃんと動くんならアリだと思うけど、<<=はあんまり見慣れないから、
ソースが読みづらくなりそうだと思いました。
520
名前:
デフォルトの名無しさん
:03/02/07 14:10
つーか・・・何がしたいの?
521
名前:
デフォルトの名無しさん
:03/02/07 14:28
if ("おっぱい" == "おっぱい")
cerr<<"Is this undefined?"<<endl;
522
名前:
デフォルトの名無しさん
:03/02/07 14:31
つか書き方がキモい
std::wstring& operator<<=( std::wstring& lhs, const std::string& rhs )
{
if( rhs.empty() )
return( lhs = L"" );
std::vector< wchar_t > buff( rhs.size()+1 );
if( std::mbstowcs( &buff[0], rhs.c_str(), rhs.size() ) == -1 )
throw std::runtime_error("bad chartype convert");
lhs = &buff[0];
returnlhs;
}
523
名前:
デフォルトの名無しさん
:03/02/07 14:36
てかなんでこの処理を演算子にするんだ
524
名前:
517
:03/02/07 16:53
>>520
,523
std::string& operator <<= ( std::string& lhs, std::string& rhs );
std::string& operator <<= ( std::string& lhs, std::wstring& rhs );
std::wstring& operator <<= ( std::wstring& lhs, std::string& rhs );
std::wstring& operator <<= ( std::wstring& lhs, std::wstring& rhs );
...
std::wstring& operator <<= ( std::wstring& lhs, int rhs );
int& operator <<= ( int lhs, tstring& rhs );
などとそれぞれ作っておけば、型や方向を気にすることなく、
target <<= source; とか、
str <<= 123;
と何でも変換機みたく書けるなぁ…と考えたからです。
lexical_cast みたいにターゲットの型を明記する必要もないし。
ただ、
>>519
のいうように、ソースみて混乱するかも…
つーか、書いてて無用の混乱を生み出しそうな気がしてきたな…
まぁ、忘れてください。
525
名前:
デフォルトの名無しさん
:03/02/07 22:52
wstringstream, stringstream
にそれぞれ operator<< を定義するっちゅーのはまぁいいと思うんだが。
526
名前:
デフォルトの名無しさん
:03/02/07 23:55
lexical_castが
UNICODE対応とトークン対応すりゃいいんだが。
(doubleもspecializeする必要あるが...)
(でも、すべてのコンパイラでUNICODE使えるかわからん)
cout << lexical_cast<string>("あい aうえ",L"う"); //あい a
な感じで
527
名前:
デフォルトの名無しさん
:03/02/07 23:57
L""ってgccだと悲惨なことにならんか?
528
名前:
デフォルトの名無しさん
:03/02/08 02:15
とりあえず前スレより上へ浮上age。
529
名前:
デフォルトの名無しさん
:03/02/08 02:23
>>524
「何でも変換」って時点で最悪。
キャストとかも explicit にすべきなのに、
代入演算子で暗黙の型変換なんかされた日にはもう。
530
名前:
デフォルトの名無しさん
:03/02/08 12:23
ロケールってあんま良く分かってないんだけど、とりあえず
setlocale( LC_ALL,"”);
のかわりにしたいなら
locale::global(locale(""));
ってやっときゃいいの?
531
名前:
C++厨
:03/02/08 14:44
てsつとふぁせtto
532
名前:
デフォルトの名無しさん
:03/02/08 21:12
質問です。
#include<iostream.h>
int main()
{
cout<<rand()<<endl;
}
とやると、何度やっても答えが130になります。が、
int main()
{
cout<<rand()<<endl;cout<<rand()<<endl;cout<<rand()<<endl;
}
とやると、130、10982、1090となります。
数字を実行毎に変化させる事は出来ないのでしょうか?
533
名前:
デフォルトの名無しさん
:03/02/08 21:16
>532
srand
534
名前:
デフォルトの名無しさん
:03/02/08 21:27
srand(time(NULL));
535
名前:
デフォルトの名無しさん
:03/02/08 21:59
>533-534
アリガd
ところで、gmtimeってなんの略でしょう?
536
名前:
デフォルトの名無しさん
:03/02/08 22:01
give me your time.
537
名前:
デフォルトの名無しさん
:03/02/08 22:13
なるほど「お時間もらえますか?」ですね。アリガd
538
名前:
デフォルトの名無しさん
:03/02/08 22:16
Σ(゚Д゚)
539
名前:
デフォルトの名無しさん
:03/02/09 00:02
グリニッジ標準時(Greenwich Mean Time; GMT)だYO!
540
名前:
デフォルトの名無しさん
:03/02/09 00:08
ま、マリリンモンローのポポポスターが・・・
541
名前:
デフォルトの名無しさん
:03/02/09 00:12
>539
すると、残りのimeってなんの略ですか?
542
名前:
デフォルトの名無しさん
:03/02/09 00:15
Ikumaeno
Meidonomiyageni
Ehimemikan
543
名前:
デフォルトの名無しさん
:03/02/09 00:20
Greenwich Mean Time Ikumaeno Meidonomiyageni Ehimemikan
544
名前:
デフォルトの名無しさん
:03/02/09 00:23
和洋折衷すぎ
545
名前:
デフォルトの名無しさん
:03/02/09 00:36
>>541
g m time だYO!
546
名前:
デフォルトの名無しさん
:03/02/09 00:38
warota
547
名前:
デフォルトの名無しさん
:03/02/09 00:52
>>532-545
お前らいい仕事してはりますな
548
名前:
:03/02/09 20:48
参照を使って次のようなコードを書いたとします。
int* p = NULL;
int& i = *p;
i = 100;
ここで3行目のように i を使うと segmentation fault を起こします。
(int*)NULL にアクセスすることになるのだから当然ですね。
また (&i == NULL) という式の値は真(非零)となります。
少なくとも僕の環境 Debian GNU/Linux 3.0r1 (gcc 2.95.1) ではそうなります。
で、お聞きしたいのは、ANSI C++ や Stroustrup の C++ の
言語仕様的には次のいずれなのでしょうか?
1) 2行目の宣言が不可能でその結果が未定義
2) 3行目の式の評価が不可能でその結果が未定義
549
名前:
デフォルトの名無しさん
:03/02/09 20:55
2行目の宣言…ではなく、
> *p;
null pointer の dereference が未定義。
550
名前:
:03/02/09 20:59
ということは、2行目の時点で実行時エラーとなるような
実装もあり得ると言うことでしょうか?
551
名前:
デフォルトの名無しさん
:03/02/09 21:07
よく、サンプルプログラムについてる、
Return 0;
って何ですか?例えばこんなん。
#include <stdio.h>
main()
{
printf("name: ");
return 0; //←これ。
}
552
名前:
548
:03/02/09 21:11
>>551
多くの処理系(というか OS)では
main 関数の戻り値が 0 であった場合に
プログラムが正常終了したと見なします。
なので、特に main 関数の中で問題が発生しなかったときには
return 0 などとしているわけです。
でも 0 が正常終了を表さないような処理系もあるので、
次のように書く方が移植性が高いでしょう。
#include <stdlib.h>
int main (void)
{
// your main code here
return EXIT_SUCCESS;
}
553
名前:
デフォルトの名無しさん
:03/02/09 21:17
>0
が正常終了を表さないような処理系
ネタでつか
554
名前:
デフォルトの名無しさん
:03/02/09 21:20
>>552
なるほど。ありがとうございます。
何故かほとんどの記事がコレには触れないんです^-^;
bcc32ではreturn 0; 無くてもコンパイル・実行共に通ったので、
悩んでました。
555
名前:
デフォルトの名無しさん
:03/02/09 21:34
省略するのが一番移植性高そうだな。
556
名前:
デフォルトの名無しさん
:03/02/09 21:45
>>550
うむ。例えばCINTはそこで落ちるね。
557
名前:
548
:03/02/09 21:50
>>556
ふーむ、やはりそうですか。
うちの環境で #include <iostream.h> やって、
cout << *(int*)NULL << endl;
なんて実行すると (nil) って表示されたんで、
「ん? lisp みたいに nil を返すなんてこともトリッキーながらできたりして。」
って思ったわけです。
558
名前:
548
:03/02/09 21:58
ある関数ないでエラーが発生したりして、
意味のある値を返すことができない場合は
次の二つの方法があると思います。
1) あり得ない値を返す。
たとえば年齢として負の値を返すとか。
2) 戻り値とは異なる経路でエラーを伝達する。
3) 例外を発生させる。
で、lisp で言うところの nil みたいなものを扱う方法が C++ にあれば
1) をやる場合に便利だなぁと思ったわけで・・・
まぁ浮動小数点における NAN みたいなものでしょうか。
いや、 int をそのまま使わずに Java の Integer 型みたいに
クラスにくるんでしまえばなんとでもなるのはわかっているんですけど、
それも大げさだなぁ、と思った次第でして。
559
名前:
デフォルトの名無しさん
:03/02/09 22:03
>>553
dos の batkey とかは、リターンコードで情報を返したりするよ。
560
名前:
デフォルトの名無しさん
:03/02/09 22:10
>>559
だからどうした?
561
名前:
デフォルトの名無しさん
:03/02/09 22:21
>>560
うん ?
>>553
に対して、ネタじゃないよと言うだけのことだけど。
562
名前:
デフォルトの名無しさん
:03/02/09 22:24
>>559
が「0 が正常終了を表さないような処理系」だっていうのか?
へぇ・・・。
563
名前:
デフォルトの名無しさん
:03/02/09 22:31
>>562
そうだけど、それがどうかしたか ?
564
名前:
デフォルトの名無しさん
:03/02/09 22:34
C++ならstdlib.hじゃなくてcstdlibだろ
565
名前:
デフォルトの名無しさん
:03/02/09 22:39
なるほど、batkeyという「処理系」があるんですね。アリガd
566
名前:
デフォルトの名無しさん
:03/02/09 23:08
>>565
dos と言うものを知らんアフォが絡んできただけのことか...。
567
名前:
549
:03/02/09 23:30
>>557-558
> cout << *(int*)NULL << endl;
> なんて実行すると (nil) って表示されたんで、
ふおぉ。そんな風になってる処理系もあるのか。面白い。
「意味のない値」を返す話なら、boost::optional
http://www.kmonos.net/alang/boost/classes/optional.html
なんかを覗いてみると良いかと。
568
名前:
デフォルトの名無しさん
:03/02/09 23:34
標準C++はmain関数に限り、return文を書かないと、return 0; を
実行して終了したのと同じ意味になるので、0が正常終了を表さない
処理系では標準C++は使えないね。
569
名前:
デフォルトの名無しさん
:03/02/09 23:49
>>568
main 関数の返す値とプログラムの返す値が同じである必要は無い。
570
名前:
デフォルトの名無しさん
:03/02/09 23:56
0とEXIT_SUCCESSとは、exitの引数およびmainの戻り値として渡されたとき、
同じ動作をする仕様となっております。
571
名前:
デフォルトの名無しさん
:03/02/10 00:05
>>569
ダウト。
572
名前:
548
:03/02/10 00:06
>>567
いま boost の class optional のコードを読んでみました。
結局のところ、
class optional
{
いろいろ
省略
private:
bool m_initialized;
storage_type m_storage;
}
となっていて、そのオブジェクトが有効か無効かを記憶しているだけですね。
573
名前:
デフォルトの名無しさん
:03/02/10 02:17
>>559
0 が正常終了を表さないような処理系もある
と言う事と
リターンコードで情報を返したりする
事は全く別の問題だろ
574
名前:
デフォルトの名無しさん
:03/02/10 06:36
アクセス関数でメンバにアクセスするとインライン化してもかなり重くなる
こういうのを全部publicにしちゃうのはC++的にどうですか?
ちなみにゲームのプログラムです。
575
名前:
デフォルトの名無しさん
:03/02/10 07:49
折れアクセサあんまり書かん。
安全上必要なときだけ書く。
面倒なだけじゃなく、コードが増えて可読性落ちる、保守性落ちる。
折れのまわりには、必ずアクセサ書く香具師いる。
いろいろ理由言ってるけど、最後は趣味の問題。
576
名前:
デフォルトの名無しさん
:03/02/10 08:05
>>575
OO厨の召喚ですか?
577
名前:
デフォルトの名無しさん
:03/02/10 10:38
>>575
アクセサにしとかんと、インターフェースと実装を分離できないやん。
>>574
> ちなみにゲームのプログラムです。
俺は本職のゲームプログラマだけど、性能が要求される部分なんて、全体から
見たらほんの一部だよ。
たとえばアクションゲームでプレイヤーの制御する部分なんか、しょせん 1/60s
に一階しか呼ばれないから、そこで間接ジャンプが 100 回ぐらい入っても誤差
誤差。
578
名前:
デフォルトの名無しさん
:03/02/10 11:32
>>577
C++なら、アクセサ無しでもテンプレつかって分離という手もあるぞ、まあお勧めはせんけど。
579
名前:
デフォルトの名無しさん
:03/02/10 11:37
>>578
テンプレートはコンパイル時にシグネチャに基づいて結合させるから、プレイヤーの
状態遷移の制御なんかにゃ使えんでしょ。(あっちは実行してみないと状態が確定
しないわけで)
580
名前:
デフォルトの名無しさん
:03/02/10 12:36
アクセサをインライン化しても重くなる場合ってどこでオーバーヘッドが
かかってるの?
581
名前:
デフォルトの名無しさん
:03/02/10 14:14
>>580
まぁ、
>>574
がなんか勘違いしてるくらいだろ。
582
名前:
548
:03/02/10 14:16
>>581
デバッギングオプションを on にしていて、
実は inline になっていない、とか?
583
名前:
デフォルトの名無しさん
:03/02/10 14:54
//戻り値void, 引数void
void f(){ cout<<"f()"<<endl; }
f(f()); //error. why?
584
名前:
デフォルトの名無しさん
:03/02/10 14:59
引数voidってのはな、void型を受け取るって意味じゃぁないぞ。
585
名前:
デフォルトの名無しさん
:03/02/10 15:10
>>575
が逝ってることは、不要ならGetやSetを書かんということじゃないの?
メンバ変数は当然privateとして。
そんなら、普通のことだが。
もし、メンバ変数をpublicにしるということなら。。。
ガクガクブルブル
586
名前:
548
:03/02/10 16:30
>>585
使いたくないけど、どうしても必要なら friend ですかね。
でも漏れは今まで演算しオーバーロード以外で使ったこと無いですけど。
メンバ変数を public にするならむしろ明示的に class じゃなくて
struct って書いた方がいいかも。
587
名前:
デフォルトの名無しさん
:03/02/10 16:31
>>585
virtualじゃないなら書いてもコンパイルが遅くなるだけでアプリのスピードは変わらん。
588
名前:
574
:03/02/10 16:54
すいません勘違いしてました。582sanの言うように設定ミスってました。
>>577
san
そろそろ全体の負荷を把握しときたいなとプロファイラを導入したのが事の発端でした
589
名前:
デフォルトの名無しさん
:03/02/10 16:57
>>586
てきとーなこといってんじゃねぇよ。
得意げな顔してなにが「 fiend ですかね。」だ。
お前は本当に、以下略。
590
名前:
デフォルトの名無しさん
:03/02/10 17:00
>>585
> もし、メンバ変数をpublicにしるということなら。。。
> ガクガクブルブル
なんでメンバ変数をpublicにしたらいけんのか小一時間
591
名前:
デフォルトの名無しさん
:03/02/10 17:01
>>589
煽りでtypoカコワルイ!!!
592
名前:
デフォルトの名無しさん
:03/02/10 17:02
>>590
データメンバをpublicにするなら、classの中に置いてある意味が無くなるだろ。
593
名前:
デフォルトの名無しさん
:03/02/10 17:05
>>592
データメンバをpublicにするなら、classに置くのもグローバルにするのも
同じと言いたいのですか?
594
名前:
デフォルトの名無しさん
:03/02/10 17:07
>>590
は明らかに釣り。
595
名前:
デフォルトの名無しさん
:03/02/10 17:07
>>590
君は、
1.ただのばか
2.いろんな可能性でうんちくを述べたいばか
のどちらかだろうから、とりあえず、息の根を止めてよかよ。
596
名前:
デフォルトの名無しさん
:03/02/10 17:09
ばかが一人でもはいるとC++の開発は破綻するって、名言だなあ。
597
名前:
デフォルトの名無しさん
:03/02/10 17:09
あはは。煽りうざいなぁ。息の根止めて氏ねよ。
598
名前:
583
:03/02/10 17:28
>>584
内側のf()は何も返さないのだからOKになるのが普通じゃないですか?
599
名前:
:03/02/10 17:40
言われてみるとそんな気もしてきたけど・・・
ハッ?漏れは
>>583
にだまされているのか?
600
名前:
デフォルトの名無しさん
:03/02/10 17:46
575じゃないが、時と場合によっては、
メンバ変数をパブリックにしてもいい場合もあると思うが。
メンバを勝手に変更しても、問題ない場合とか。
class RectDrawer
{
...
public:
Point begin;
Point end;
};
他にも、Point とか、Rect とか、Matrix みたいなのは、その典型。
601
名前:
デフォルトの名無しさん
:03/02/10 17:48
引数をとらない関数の「引数リスト」に引数を記述すること自体が
構文として間違っているのでは。
602
名前:
デフォルトの名無しさん
:03/02/10 18:04
>>600
C の構造体に、操作に便利なメソッドを幾つか追加したってタイプのデータ構造な。
個人的には struct にするけど。
603
名前:
デフォルトの名無しさん
:03/02/10 20:16
最近C#使い始めて、移植性の都合上で意図的にメンバを public にする事が多くなってる。
C++ にもプロパティーが欲しい今日この頃。
604
名前:
デフォルトの名無しさん
:03/02/10 20:41
プロ仕様のパティー
↓
(゚д゚)ウマ-
605
名前:
デフォルトの名無しさん
:03/02/10 20:43
ファイルのプロパテー
606
名前:
デフォルトの名無しさん
:03/02/10 21:17
>>603
operator=もメンバだが?
607
名前:
デフォルトの名無しさん
:03/02/10 21:23
Java3DのVectorとかMatrixとかも速度のために成分がpublicになってるでござる。
って普通かも。
608
名前:
デフォルトの名無しさん
:03/02/10 21:56
>>606
それはね、使ってみると分るよメッチャ便利だから。
特にテンプレートと組み合わさったら無敵になると想像。
609
名前:
デフォルトの名無しさん
:03/02/10 23:18
>>607
VECTOR や MATRIX みたいな、値指向の型だとそれもありだろう。OOP でいうところ
のオブジェクトではなく、むしろプログラミングのネジ・クギにあたる具象クラスってヤツ
な。
プログラミング言語 C++ でも散々解説されてるけど。
610
名前:
デフォルトの名無しさん
:03/02/10 23:22
プロ現C++高いよアニキ〜
611
名前:
デフォルトの名無しさん
:03/02/10 23:57
下手な本2,3冊買ってしまうより,なんぼかまし.
どんと買っとけ
612
名前:
名無しさん
:03/02/11 00:19
>>610
本棚の肥やしになっている…
613
名前:
デフォルトの名無しさん
:03/02/11 01:01
C++Primerもそのアンサーブックも買ったよ。
プロ現C++よりさらに分厚くて、見て笑ってしまう。
614
名前:
デフォルトの名無しさん
:03/02/11 06:00
所謂has-aの場合、クラスの外からメンバクラスへのアクセスがだるいのですが。
615
名前:
:03/02/11 06:56
漏れ的には、いまだに A級B型C++ が
初心者にはもっともわかりやすいと信じて疑わないんだけど、
でも廃刊。しょぼーん。
616
名前:
:03/02/11 07:49
class A
{
//いろいろとかく
};
typedef B A;
これって、エラーになりますよね。
単純な型以外で typedef のようなことはできないものでしょうか?
class B : A {}
と継承しても良さそうなものですが、
オーバーロード演算子は継承されませんよね。
617
名前:
:03/02/11 07:49
やっぱり #define でプリプロセッサの助けを借りるしかないのでしょうか?
618
名前:
デフォルトの名無しさん
:03/02/11 07:52
typedef A B;
じゃないのか?
619
名前:
:03/02/11 07:57
ごめん、
>>616
は typo
で、よくソースみてみたら
typedef A : B;
ってやってたよ!
何で真ん中にコロンなんて入れちゃったんだろう。
620
名前:
デフォルトの名無しさん
:03/02/11 12:57
( ゚д゚)ポカーン
621
名前:
デフォルトの名無しさん
:03/02/11 14:36
コンパイルは通るのですが、実行すると落ちまする。
殿,どうかご助力を。
#include <stdio.h>
aisatsu()
{
printf("hello");
return 0;
}
main()
{
int ans;
int loop;
ans = 0;
printf("処理を選択してください\n");
printf("1.aisatsu 2.aisatsu");
scanf("%d",ans);
if (ans == 1)
aisatsu();
else
aisatsu();
}
622
名前:
デフォルトの名無しさん
:03/02/11 14:42
&ans;
623
名前:
622
:03/02/11 14:42
なんで俺セミコロン書いてるんだ・・・?
624
名前:
デフォルトの名無しさん
:03/02/11 14:45
>>622
Σ( ̄ロ ̄;
実行できました。かたじけのうござる。
どうして &をつけるとうまくいくのでござろうか。
625
名前:
デフォルトの名無しさん
:03/02/11 14:49
Cスレでやってよ
626
名前:
デフォルトの名無しさん
:03/02/11 14:50
あれ?Cスレ?
627
名前:
デフォルトの名無しさん
:03/02/11 14:50
かぶた
628
名前:
C++厨
:03/02/11 14:55
こんにちわ、C++厨です。
629
名前:
デフォルトの名無しさん
:03/02/11 15:03
厨はすっこんでろ
630
名前:
デフォルトの名無しさん
:03/02/11 16:08
一瞬、豚はすっこんでろ、かとオモタヨ。
631
名前:
デフォルトの名無しさん
:03/02/11 16:11
たしかに豚もすっこんでて良い
632
名前:
◆8x8z91r9YM
:03/02/11 16:20
こんなソフト探してます!
又はスキルがある方安く作成して頂けませんか?
ttp://popup6.tok2.com/home2/DMmaster/
633
名前:
デフォルトの名無しさん
:03/02/11 16:32
>>632
そういうのを使う用事のある人に対して反感を持っています。
無作為にor不特定多数にメールを投げるのはやめなさい。
もっとまっとうな商売をしなさい。
634
名前:
デフォルトの名無しさん
:03/02/11 16:35
つか、こいつこの板に常駐してね?
前もどっかのスレで作ってくれって言ってたよ。
635
名前:
デフォルトの名無しさん
:03/02/11 16:51
In-Depthシリーズの「C++ ネットワークプログラミング」を買おうか子一時間迷った。
636
名前:
:03/02/11 17:37
C++ というかオブジェクト指向の言語を使っていて、
いつも悩むのが 「ああ、コンストラクタが失敗してたらどうしよう・・・ 」
もちろんこういうことは例外で処理するのがスマートなのだとは思いますが、
例外処理を使いたくない場合は皆さんどうしておられるのでしょうか?
1) クラスの中に、コンストラクト成功・失敗のフラグを用意する。
で、アクセス関数として int IsAvail(void) みたいなのを用意する。
2) コンストラクタの引数に成功・失敗を返すための変数への参照を取る。
MyClass::MyClass ( int & flag)
でも引数なしのデフォルトコンストラクタだとどうしようもない。
これ以外に何か方法あります?
#グローバル変数使ったりするのは即却下。
637
名前:
デフォルトの名無しさん
:03/02/11 17:38
コンストラクタで初期化処理を行わない
638
名前:
:03/02/11 17:49
た、確かにそれは一つの解決法ですね。
どうしてもコンストラクタが必要になるケース以外では。
1) 引数なしのデフォルトコンストラクタが自動的に呼び出される場合。
2) 型変換のためにコンストラクタが自動的に呼び出される場合。
「自動的」って言い方はよくないかなぁ。
「暗黙に」といった方がいいのかもしれないですが。
639
名前:
デフォルトの名無しさん
:03/02/11 17:49
> 安く作成
(・∀・)カエレ!
640
名前:
デフォルトの名無しさん
:03/02/11 17:54
>>635
Aceとかいうのを使ってナニする奴かい?
漏れも一瞬迷ったけど、変な物使うぐらいならと思ってWinSock2.0の本を買って帰ったよ。
641
名前:
デフォルトの名無しさん
:03/02/11 18:21
636じゃないですが、
例外処理を有効にしてコンパイルするときに、
例外処理のオーバーヘッドを最小限に抑えるためのアプローチって、
なにか一般的なものはありませんか?
642
名前:
デフォルトの名無しさん
:03/02/11 18:37
例外の無い言語使えばいいじゃん
643
名前:
:03/02/11 18:45
例外処理を有効にしてコンパイルしている時点で、
例外処理によるオーバーヘッドは仕方ないものだと思います。
#実行時型情報もオーバーヘッドありますね。
644
名前:
デフォルトの名無しさん
:03/02/11 18:57
やはりオブジェクト指向は高水準言語の方が適してるのか
645
名前:
:03/02/11 19:06
速度が求められるところは C++ で書いて、
それ以外は Scheme とかで書きたいなぁ、なんて思う今日この頃。
いや、10分ほど前から libguile のマニュアル読み出したところなんだけど。
646
名前:
641
:03/02/11 19:09
メモリの動的確保を採用してもそのオーバーヘッドを
最小限に抑えるようなアプローチは結構一般的なものがあると思ってるけど、
例外処理については
>>643
のように「仕方ないもの」で
済ませてしまっているようで、もうちょっとなんとかならんものか、と。
手当たり次第に throw() を付けていくってのは効果的なんでしょか?
647
名前:
デフォルトの名無しさん
:03/02/11 19:27
CとかC++使えちゃえば他のジャヴァとか覚えるのは簡単ですか?
648
名前:
デフォルトの名無しさん
:03/02/11 19:29
覚えるんじゃなくて学ぶんだよ。
649
名前:
デフォルトの名無しさん
:03/02/11 19:55
(゚Д゚)ハァ?
650
名前:
デフォルトの名無しさん
:03/02/11 19:56
(゚O゚) オオ?
651
名前:
:03/02/11 22:01
みんなどこいっちゃったの? オロオロ
652
名前:
デフォルトの名無しさん
:03/02/11 22:07
>>651
姿は見えなくても、いつも漏まえのそばにぬるぽ。
653
名前:
デフォルトの名無しさん
:03/02/11 22:32
VC6の場合、static_cast<>使う場合はコンパイラに実行時型情報を要求されるんですが
static_cast<>の場合って普通の型キャストとおなじなので実行時型情報はいらないですよね?
654
名前:
デフォルトの名無しさん
:03/02/11 22:40
> static_cast<>の場合って普通の型キャストとおなじなので実行時型情報はいらないですよね?
これはたしかにそうだが、
> コンパイラに実行時型情報を要求される
これの意味がわからん。
655
名前:
デフォルトの名無しさん
:03/02/11 22:58
1行目は dynamic_cast の typo の悪寒。
656
名前:
デフォルトの名無しさん
:03/02/12 02:19
>>646
>手当たり次第に throw() を付けていくってのは効果的なんでしょか?
throw() があると、例外の有無をチェックするコードが挿入されるので、
逆に効率が悪くなる。
657
名前:
デフォルトの名無しさん
:03/02/12 03:31
>>656
げ、そーなの?俺
>>646
じゃないけど、throw()付けとけば
例外投げない宣言として変なコードが挿入されないだろうとばっかり思ってた・・・
658
名前:
641
:03/02/12 03:56
>>656
それはthrow()を付けた関数の中に、throw()のついてない関数の呼び出しがある場合。
とはいえ、インターフェース決めるときの手がかりにはならんな。
gcc3.2で少し試してみたけど、例外が発生しなかった場合のコードに注目すれば、
throw()を付けても付けなくてもほとんど変わらないようだ。
追加コードも妥当なものだった。
もっと想像を絶するコードになるかと思ったが、結構理想的な実装になってるじゃないか。
throw()をつけるつけないで効率が変わるのは、コンパイラの実装が未熟なのだろう。
そうなると、一般的なアプローチがないのもしょうがないな。
659
名前:
デフォルトの名無しさん
:03/02/12 17:13
>throw()を付けた関数の中に、throw()のついてない関数の呼び出しがある
↑個人的にはこの場合はコンパイルエラーにして欲しいな。
660
名前:
C++厨
:03/02/12 17:16
unexpectedォーーー
661
名前:
:03/02/12 17:48
えっちだ!
662
名前:
:03/02/12 17:48
誤爆スマソ
663
名前:
デフォルトの名無しさん
:03/02/12 23:35
fstreamとofstreamってなにか違いが有りますか?
例:
fstream fl;
fl.open(ios::app){...}
fl.close()
と
ofstream ofl;
ofl.open(ios::app){...}
ofl.close()
って、やってることは何か違うのでしょうか?
664
名前:
デフォルトの名無しさん
:03/02/12 23:46
>>663
openのデフォルトモードが異なる。
std::fstreamはstd::ios::in及びstd::ios::out
std::ofstreamはstd::ios::outのみ
665
名前:
デフォルトの名無しさん
:03/02/12 23:54
あーでもstd::fstreamはstd::istreamとstd::ostreamを継承しているけど
std::ofstreamはstd::ostreamしか継承してないから、std::ofstreamに
>>なんか適用しようとするとエラーが出るかも知れない。試してないけど。
666
名前:
デフォルトの名無しさん
:03/02/13 00:11
>664-665
為になる情報を有難うございます。
非常に参考になりました。
667
名前:
デフォルトの名無しさん
:03/02/13 00:13
わからないので教えてください
AをベースにB、Cを継承してクラスを作り
A *hoge; で、hogeにBまたはCのポインタを持たせた場合
hogeが保持しているクラス型を特定することはできますか?
クラスBなら1、クラスCなら2などと応答するメンバ関数を作らないとだめですか?
668
名前:
デフォルトの名無しさん
:03/02/13 00:20
typeid().name()を使ってもだめだったー
669
名前:
デフォルトの名無しさん
:03/02/13 00:25
>>667
何をしたいのかがわからん。
特定するだけならtypeid()でいいんじゃないの?
670
名前:
デフォルトの名無しさん
:03/02/13 00:28
>>667
わかりました。基底クラスのAが一つでも仮想関数を持っていれば、
typeid(*hoge).name()で実際の型がわかります。
もしAが仮想関数を持っていなければ、typeid()の結果は常にAに
なります。
671
名前:
667
:03/02/13 00:55
おおお、できましたありがとうございました!
こんな演算子があったなんて・・・
672
名前:
デフォルトの名無しさん
:03/02/13 02:17
標準入力を標準出力に流すだけのプログラムを↓のように書きました。
#include <iostream>
main(){ std::cin.tie(0); std::cout << std::cin.rdbuf(); }
cygwinのgcc3.2で実行すると、1文字でも入力すると無限ループに陥ってしまいます。
なにかまちがってるんでしょうか?
673
名前:
672
:03/02/13 02:23
超高速事故解決しました。
std::ios_base::sync_with_stdio(false);
674
名前:
デフォルトの名無しさん
:03/02/13 09:59
ifstreamの内容をstringstreamに読み込んで、複数回読み取りを
行おうとしましたがうまくいきません。どこがおかしいのでしょうか。
int main()
{
std::ifstream ifs("stringstream1.cpp");
std::stringstream str;
char ch;
str << ifs.rdbuf();
str >> std::noskipws;
while (str >> ch) std::cout << ch;
str.seekg(0, std::ios::beg);
while (str >> ch) std::cout << ch; // だめぽ・・・
}
675
名前:
デフォルトの名無しさん
:03/02/13 10:07
674です。自己解決しました。
strにeofbitが立っていたのが原因でした。clear()をかませると
うまく動作しました。
int main()
{
std::ifstream ifs("stringstream1.cpp");
std::stringstream str;
char ch;
str << ifs.rdbuf();
str >> std::noskipws;
while (str >> ch) std::cout << ch;
str.clear();
str.seekg(0, std::ios::beg);
while (str >> ch) std::cout << ch;
}
676
名前:
デフォルトの名無しさん
:03/02/13 10:20
自己解決ブーム
677
名前:
デフォルトの名無しさん
:03/02/13 10:37
>>672
>>673
MinGW3.2.2だとsync_with_stdio(false);がなくてもハングしないよ。
環境に依存する問題なのかな。
678
名前:
デフォルトの名無しさん
:03/02/13 15:35
なんでfstream系にファイルサイズ返すメソッド無いの?
679
名前:
デフォルトの名無しさん
:03/02/13 15:50
>>678
それは俺も悩んだ。ファイルサイズというもの自体が環境依存だから
らしい。
従来のようにバイナリでfopenしてfseek()とftell()を使って求めてる。
680
名前:
デフォルトの名無しさん
:03/02/13 16:04
C++Primerには
string f(){
string str;
....
return str;
}
のようなコードが良く出てますが、これって無駄に文字列のコピーが行われますよね?
681
名前:
デフォルトの名無しさん
:03/02/13 16:08
>>680
autoのstd::stringのリファレンスを返すと大変な事になるから。
682
名前:
デフォルトの名無しさん
:03/02/13 17:09
ファイルがあってファイルサイズがないとはこれは随分矛盾した話だ
683
名前:
デフォルトの名無しさん
:03/02/13 17:12
>>680
最適化で少しはマシになるんじゃない。
684
名前:
デフォルトの名無しさん
:03/02/13 17:31
>>682
例えばUN*Xのようなシステムにおけるデバイスファイル(スペシャルファイル)
のようなものにはファイルサイズはないだろ。
デバイス、FIFO、ソケット、ディレクトリ、etc...を含めたファイルの種別
だの、そのファイルシステムにおける管理のされかたなんてものは
立派に環境依存だ。
685
名前:
デフォルトの名無しさん
:03/02/13 17:41
そうか、C++は低水準言語だったな
それじゃしかたない
686
名前:
デフォルトの名無しさん
:03/02/13 20:04
>>680
g++3では、最適化を禁止してもコピーが抑制されるよ。
規格上オッケーなのかなあ?
687
名前:
C++厨
:03/02/13 20:50
\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< C++って超最高!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< 最高最高さいこ〜
超最高〜〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
688
名前:
デフォルトの名無しさん
:03/02/13 21:26
int main() {
return 0;
};
//↑ これってなんかまずいですか?
689
名前:
デフォルトの名無しさん
:03/02/13 21:42
>>686
コピーが抑制って
>>680
のstrのデストラクタが呼ばれないってこと?
690
名前:
デフォルトの名無しさん
:03/02/13 22:41
嫁
http://www.pro-g.co.jp/download_files/DVDConverter.zip
691
名前:
デフォルトの名無しさん
:03/02/13 22:49
>>690
何コレ dvdconverter?
692
名前:
デフォルトの名無しさん
:03/02/13 22:49
>>689
ちがう。
戻り値をどっかで受けるときにコピーが発生するはず?だが
g++3はコピーせずに戻り値のところに直接生成する。
693
名前:
デフォルトの名無しさん
:03/02/13 22:54
>>691
市販アプリのソースコード
694
名前:
デフォルトの名無しさん
:03/02/13 23:13
あんた!この携帯代どうすんの!?
おかん払っといて
おかん??!!
プオーーーン
あんた・・・本当はやったら出来る子やのに・・・(涙
695
名前:
デフォルトの名無しさん
:03/02/14 00:08
>691
【盗作】Pro-G Divxコンバータ その2【疑惑 】
http://pc.2ch.net/test/read.cgi/pcnews/1044893317/
【PC】プロジーの『DivXコンバータ』にGPL違反の疑い
http://news2.2ch.net/test/read.cgi/newsplus/1044854247/
スレ違いだけどな。
696
名前:
デフォルトの名無しさん
:03/02/14 00:10
>>686
RVO( Return Value Optimization ) で検索しる。
697
名前:
デフォルトの名無しさん
:03/02/14 00:46
>>688
} のあとの ; はいらない。
それ以外は別に何も。
698
名前:
デフォルトの名無しさん
:03/02/14 03:30
初心者質問ですが、一般に、例外を投入して、
catch ブロックにぶっ飛んだ後、問題を処理して
元のtryブロックのコード(の次)に戻りたいときは
どうしたら良いのですか?
投入する構造体に、細かいデータを与えておけば
可能でしょうけど、例えばMFCのCFileException には
そんなデータは入ってないみたいだし、そういう動作は
想定していないのでしょうか?
699
名前:
デフォルトの名無しさん
:03/02/14 03:36
>>698
ttp://www.research.att.com/~bs/bs_faq2.html#resume
700
名前:
デフォルトの名無しさん
:03/02/14 03:40
>>698
try の中に try を書けば?
701
名前:
デフォルトの名無しさん
:03/02/14 03:55
>>699
ありがとうございます。
ややこしくなるから、実装しなかったということですか。
>>700
例外を投入する可能性のある関数ごとに、執拗に1つずつ
try - catchで囲っていくのって、なんかソースが冗長で美しく
なくなる気がするんですよね。そんなことないですかね?
標準関数に例外を投入する関数があるから、使わないわけ
にもいかないし・・・。
702
名前:
デフォルトの名無しさん
:03/02/14 04:11
>>698
goto
703
名前:
デフォルトの名無しさん
:03/02/14 04:12
if(! foo())
{ /* 失敗した時の処理 */ }
と
try{ bar(); } catch(,,,)
{ /* 失敗した時の処理 */ }
の差をどう感じるか、かな。
失敗した時の処理が必要ないなら冗長に感じるのも分かるけどね。
マクロでも作ると楽かも?
でも、そもそも例外ってのはすぐ復帰できるようなものには使わず、
そういう時は bool 値か何かを返すのが普通だと思うんだけど、
その関数はそういう仕様にはなってないのかな?
704
名前:
デフォルトの名無しさん
:03/02/14 04:13
>>702
goto キタ━━━( ´∀`)・ω・) ゚Д゚)・∀・) ̄ー ̄)´_ゝ`)-_-)=゚ω゚)ノ━━━!!!!
705
名前:
デフォルトの名無しさん
:03/02/14 04:14
たかが goto でそんなに嬉しい?
706
名前:
デフォルトの名無しさん
:03/02/14 04:16
たかが goto 。
されど goto 。
707
名前:
デフォルトの名無しさん
:03/02/14 04:19
>>702
goto ってやっぱり最後の手段じゃないかなぁと。
ただcatchから戻るのは goto しかないですね。
おそらく戻る必要のないようにエラー処理をするのが
正しい書き方なのでしょうが。
708
名前:
デフォルトの名無しさん
:03/02/14 04:28
>>703
自分が想定していたのはMFCのCFileです。
ファイルが存在しないときに、CFileExceptionを
投入するんですが。
直接、CFile でファイルを開こうとすると、file not found で
例外投入の可能性があるし、CFindFile でファイルを
検索してからだと、CFileにcatchブロック書くのが不必要な気がするし。
まあ、堅牢なソースには良いのでしょうが、個人用にちょこちょこ
と作ったアプリだと、その辺が面倒に感じてしまう・・。
709
名前:
デフォルトの名無しさん
:03/02/14 04:55
>>707
gotoに必要以上に敏感になる必要はない。
適切に使われてる限り何の問題もないどころか、
ラベルを適切な名前にすることでソースの可読性を上げることができる。
そういうところで意地んなってdo/whileとか使ってると余計わけわかなコードになる。
710
名前:
デフォルトの名無しさん
:03/02/14 06:50
>>709
まぁ概ね同意だけど、
catch から goto で戻るというのはあかんかと(w
try ブロック内のオブジェクトのデストラクタが全部呼ばれてるというのに
戻っちゃまずいっしょ。
>>708
直接 CFile のコンストラクタで開こうとせず、
CFile::Open を使って開こうとすれば
第3引数を指定することで例外を投げないようにできます。
711
名前:
デフォルトの名無しさん
:03/02/14 09:40
基礎クラス(仮想メソッドがあって、new出来ないヤシ)って、
名称にbaseとか入れたりします?
712
名前:
デフォルトの名無しさん
:03/02/14 09:50
仮想メソッドがあってnew出来ないヤシって
何のことかと思ったがpure virtualのことか
713
名前:
デフォルトの名無しさん
:03/02/14 09:50
質問させてください。C6Entです。
タスクトレイ(時計が表示されている所です)にあるアイコンの
ToolTipTextを取得する為にはどうすればよろしいでしょうか?
やりたい事は・・・
あるアプリ(他人のアプリ)がありタスクトレイのアイコンのToolTipTextに記
載されている文字が「pp」と「ss」とあったとします。そして「pp」であれば
何もしない。「ss」であればそのアプリを強制的に終了させる。
という動作を行いたいと思っています。
よき方法をお教え下さい。お願いします。
714
名前:
デフォルトの名無しさん
:03/02/14 09:51
MFCスレへ逝け
715
名前:
デフォルトの名無しさん
:03/02/14 09:57
>>711
まあ名前付け規則は趣味の問題って感じだが。
漏れは付けない。
通常、そのベースクラスが外から使うインターフェイスになることが多いので、
一般的な名前にする。
716
名前:
デフォルトの名無しさん
:03/02/14 10:38
>>715
じゃ、他の方法、例えば、ファイル名とかでベースクラスって分かるようにするの?
C言語な人が多い環境でベースクラスを普通にCVSしといても無視されるかゴミ扱いされる悪寒。
717
名前:
デフォルトの名無しさん
:03/02/14 10:49
>>715
そうやね。漏れも同じ。
Stream ← StreamFile, StreamXXX
特殊化(派生)するならこんな具合につける。
718
名前:
デフォルトの名無しさん
:03/02/14 11:04
>Stream ← StreamFile, StreamXXX
これも逆もあったりするね。
某だと、
TStream ← TFileStream TSocketStream
とか。
順番どっちが良いよ。
それから、Streamにプリフィックスも無し?
719
名前:
717
:03/02/14 11:18
>>718
クラス名をアルファベット順に並べたときのすっきり感と
基本:派生:派生…のほうが意味が(漏れには)わかりやすいので
そうしているけど、それぞれ個人の好みでしょうなぁ。
>それから、Streamにプリフィックスも無し?
あれは例なので、クラス名が衝突しそうなら紛らわしいので
ひねって別名を考えています。
うーん。prefix が必要なケースもありますかな?
経験不足なせいか、漏れはあまり使った記憶はないのですが。
720
名前:
デフォルトの名無しさん
:03/02/14 11:20
baseが外部に隠された実装詳細でしか無いのであればbaseつきだろうが
そうでなかろうがどうでもいい気がするが、baseが外部に公開されており
しかもそれが一般的にインタフェースとして利用されることを期待している
場合は、baseなんて付いていないほうがいいと思うけどね。
"base"ってのは要は実装で、そのクラスの概念とは全く関係の無いものだろ。
そういうのを思わず外に漏らしてしまうような名前の付け方ってのは、
俺はあんまり好きじゃない。
# とは云えそれが用いているデザインパターンを明らかにするために
# FacadeやFactoryといった名前を付けることは多いし一般的なんだよな。。
# プログラマにとっては分かりやすいとも云えるし。しかしオブジェクト指向の
# 本質からいって、クラスの名前はそのクラスの概念を表すのが本筋だと
# 思う。
721
名前:
デフォルトの名無しさん
:03/02/14 11:42
>>719
別名を考えるのは面倒
名前の衝突を恐れずに namespace で分けたほうがいいYO!
長くなるけど
TaroFoo TaroBar ッテクラスメイミルトメマイガ・・
722
名前:
デフォルトの名無しさん
:03/02/14 11:43
>基本:派生:派生…のほうが意味が(漏れには)わかりやすいので
これは納得。こちらが流行って欲しいけど、英語圏では違和感があるのかな。
># とは云えそれが用いているデザインパターンを明らかにするために
そう。
これをしたいんだけど、みんな、どーしてるのかなー、と思って。
名前に付けるのかファイルに付けるのか。(Javaだとこの点不自由だね)
723
名前:
デフォルトの名無しさん
:03/02/14 13:59
#ifndef __cplusplus
#error Must use C++ for STDCOMP.H
#endif
STDCOMP.Hに上のようなステートメントがあって、エラーになります。
STDCOMP.Hというのは、最初に自分で手直しして使うもんなんでしょうか?
724
名前:
デフォルトの名無しさん
:03/02/14 14:05
>>723
マルチすんなボケ
725
名前:
デフォルトの名無しさん
:03/02/14 14:12
>>724
その上
>>723
はマルチボケだったりするから恐い
726
名前:
デフォルトの名無しさん
:03/02/14 14:18
まさにマルチとマルチのハーモニー。
727
名前:
デフォルトの名無しさん
:03/02/14 16:01
コンストラクタの初期化リストは左から右に必ず実行されますか?
C() :a_(0), b_(f(&a)) {} //f()呼び出しの前にaは必ず生成されている?
728
名前:
デフォルトの名無しさん
:03/02/14 16:45
>>727
Exceptional C++のソースを見ると
保証はされていない印象。
729
名前:
デフォルトの名無しさん
:03/02/14 16:48
>>727
初期化順序は、常に「宣言定義の登場順」。
class A {
int b_;
int c_;
A(): c_(0), b_(0) {}
};
ならば、b_が先に初期化される。
ちなみにまぎらわしいのでコンパイラによっては順序が違うと警告が出るよ。
730
名前:
sage
:03/02/14 16:54
>>727
コンストラクタの初期化順は「基底クラスの宣言順→メンバの宣言順」だ。
でも a_ を初期化しても a は初期化されていない罠。
731
名前:
デフォルトの名無しさん
:03/02/14 17:00
そんなヤツはわらぶき屋根にすみません。
732
名前:
727
:03/02/14 17:59
>>729-730
ほんとありがとう
733
名前:
デフォルトの名無しさん
:03/02/14 20:03
参考書の例題で、変数nに0→1→0→1を永久に繰り返させる例として
int n;
OnTimer(UINT nIDEvent)
{
n = (n + 1) % 2;
としているのですが、int型変数nが計算過程で領域より大きい数字を扱うのは
問題ないのでしょうか?
734
名前:
デフォルトの名無しさん
:03/02/14 20:05
>>733
領域?
何を問題にしてるのか分からん
735
名前:
デフォルトの名無しさん
:03/02/14 20:18
int n = 0;
n ^= 1;
俺ならこう書くが。
736
名前:
デフォルトの名無しさん
:03/02/14 20:23
俺は n = !n; 派
737
名前:
おふとぴ
:03/02/14 20:35
BASIC時代は N=1-N をよく使った。
応用もあって、3と5を交互に入れ替えるなら N=8-N とかもできる。
738
名前:
デフォルトの名無しさん
:03/02/14 20:40
n=(a+b)-n か。いいね。
n=(a^b)^n でもいけるかな。
739
名前:
デフォルトの名無しさん
:03/02/14 21:05
souka!!
740
名前:
デフォルトの名無しさん
:03/02/14 21:05
プププ
741
名前:
デフォルトの名無しさん
:03/02/14 22:05
>>636-638
637に一票。
使って欲しくないコンストラクタはprivateにするとかFactoryパターンを使うとか。
暗黙の呼び出しは…、使わない。明示的な変換関数を用意する。
ちなみにデストラクタでも例外は投げないようにするため、
後始末はデストラクタ実行前にやっておく。
それが行われたかどうかをデバッグ時に確認(assert)するだけ。
742
名前:
デフォルトの名無しさん
:03/02/15 02:03
>>741
コンストラクタから例外投げないように細工するってこと?
例外処理が問題なく動作する環境でもそうするの?
それは勘弁してほしいなぁ。
743
名前:
デフォルトの名無しさん
:03/02/15 07:57
C/C++って2進数表記が使えないのはなんでだろう?
32bitくらいまでだと、2進数表記でも
冗長うにならずに、かえって分かりやすいと
思うんだが。
744
名前:
デフォルトの名無しさん
:03/02/15 09:21
>>743
漏れもわからん
ANSI-ISO標準化のときに取り入れてもよかったと思うけど
要望が少なかった(8,16進で表現できる)から?
2進数表記のためにわざわざパーサ組むのも面倒くさいな
745
名前:
:03/02/15 09:51
それよりも、ビットローテートがないのが悲しい。
746
名前:
デフォルトの名無しさん
:03/02/15 13:11
下のようなコードでimage1,image2がクラスoneのオブジェクトで
image1->v = 100;image2->v = 200;
であるとしたとき、base1,base2とも200になるのはなぜ?
base1には100をbase2には200入れたいのだけど、
どうしたらよいでしょう?
setで定義されたjに上書きしてるようなのですが・・・。
int* one::set(){
int j;
j = v;
return &j;
}
int *base1, *base2;
base1 = image1->set();
base2 = image2->set();
747
名前:
746
:03/02/15 13:13
int j;
のところは
static int j;
748
名前:
デフォルトの名無しさん
:03/02/15 13:22
class one {
int* v;
public:
int* set();
};
int* one::set(){
return &v;
}
じゃ駄目?
749
名前:
748
:03/02/15 13:23
すまそ、int* v; → int v;
750
名前:
746
:03/02/15 13:29
>>748
コードを簡略化してたのですが、
int jのところは構造体で
構造体にクラスの変数の値を入れて構造体を返すようにしたいです。
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.