class C++相談室lt;part56gt;

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2007/07/18(水) 20:54:05
名前空間
953デフォルトの名無しさん:2007/07/18(水) 21:36:01
演算子オーバーロード難しくてわかんないですっ!
954デフォルトの名無しさん:2007/07/18(水) 23:18:41
俺は後置 _ をつけておく。

#ifndef XXX_H_
#define XXX_H_

#endif // #ifndef XXX_H_
955デフォルトの名無しさん:2007/07/18(水) 23:20:43
>>953
例えば a + b は a.operator+(b) や operator+(a, b) という関数呼び出しに変換される。
どちらかが定義されていれば、その定義通りに実行される。
ただそれだけのことだ。
956デフォルトの名無しさん:2007/07/21(土) 08:29:19
前者がメンバ関数で後者がフレンド関数ですねっ!
うおおおお、なんだかわかってきたぞー!
でもわかったのと使いこなせるのは別の話だけど。
とりあえず演算子のオーバーロードの章は終わって
これから継承ですっ!
957デフォルトの名無しさん:2007/07/21(土) 08:36:39
必ずフレンドにしなきゃいけないわけでもないが、まあどうでもいい話か。
958デフォルトの名無しさん:2007/07/23(月) 05:33:32
CRTPを使った継承と、
普通のコンポジションとの使い分けを教えてください。
959デフォルトの名無しさん:2007/07/23(月) 06:58:43
>>958
CRTP なんて奇怪なコード、本当に必要だと説明できる場面でしか使うな。
960デフォルトの名無しさん:2007/07/23(月) 07:22:16
CRTP は mix-in の代わりとして使う。
961デフォルトの名無しさん:2007/07/23(月) 09:33:40
仮想関数難しすぎますっ
962デフォルトの名無しさん:2007/07/23(月) 09:52:50
アップキャストしても本来の型の関数が呼ばれるってだけの話。
963デフォルトの名無しさん:2007/07/23(月) 11:14:10
基本クラスのポインタで派生クラスを指すことができるのは
覚えるしかないんでしょうけど、
基本クラスのポインタで派生クラスのメンバにアクセスできないのに
仮想関数では派生クラスで再定義されたものが使われるっていうのが
納得できません。
これはもうそういうものだと覚えるしかないんでしょうか。
964デフォルトの名無しさん:2007/07/23(月) 11:56:55
「納得できない」って言葉は仕様や実装を理解した上で、その欠点をはっきり示す事ができ、よりよいモノを自分で提案できる場合にこそ使われるべきだと思うよ。
仕様や実装は理解できてるのかな?
965デフォルトの名無しさん:2007/07/23(月) 11:57:20
>>963
納得できないとか、覚えるしかないとか何を言いたいのかよくわからんが、
どのポインタとして扱われても本来の関数が起動される仕組みとして仮想関数が用意されているだけの話。
嫌なら仮想関数を使わなければいいだけじゃん。
966デフォルトの名無しさん:2007/07/23(月) 11:59:53
基底クラスが仮想関数を起動するってのは、あくまで自分のメンバである仮想関数を起動した結果、継承クラスの仮想関数が起動されるのであって、
直接継承したクラスの関数を起動するわけではない。
967デフォルトの名無しさん:2007/07/23(月) 13:25:07
>>963
そこが仮想関数の「便利」なところなんだぜ。

複数のクラス D, E, F, ... の共通部分を基底クラス B として提供しておけば、
その基底クラス B への参照やポインタを使って処理 X を 1 個だけ記述しておけば、
それから派生している全てのクラス D, E, F, ... に対してその処理 X を適用できる。
派生クラスごとに処理が変わる部分は、全て仮想関数で提供しておけばいい。

X が派生クラスのメンバに直接アクセスできないのはむしろ利点で、
X が派生クラスに依存しない形で書けているからこそ、
B の派生クラスであれば何であっても X で処理することができるのだ。
968デフォルトの名無しさん:2007/07/23(月) 18:58:52
実際のところ動的多態性が要求される場面ってそんなに多いか?
969デフォルトの名無しさん:2007/07/23(月) 19:17:56
ありまくり
970デフォルトの名無しさん:2007/07/23(月) 21:33:41
JISの規格を読みました。
派生クラスで再定義された仮想関数は
基底クラスの仮想関数を上書きするんですね。

本の説明の解釈の仕方・理解の仕方もちょっとまずかったみたいで
頭の中がぐちゃぐちゃになってたみたいです。

まだすっきりしないかんじはあるけど
なんとなくわかってきました。

ありがとうございました。
971デフォルトの名無しさん:2007/07/23(月) 22:28:56
C++からJAVAのオブジェクト(API)を利用する事ができますか?
972デフォルトの名無しさん:2007/07/23(月) 22:30:40
VM的なモノをつくればいけます
973デフォルトの名無しさん:2007/07/23(月) 22:35:21
>>971
JNI使えば可能。
974デフォルトの名無しさん:2007/07/23(月) 22:56:34
>>971
gcj限定でよければJNIよりCNIの方がエレガント
975デフォルトの名無しさん:2007/07/23(月) 23:22:57
C++からJAVA?
976デフォルトの名無しさん:2007/07/24(火) 11:52:27
僕をあなたのクラスのfriendにしてください><
977デフォルトの名無しさん:2007/07/24(火) 23:20:01
クラステンプレート難しすぎますっ!
978デフォルトの名無しさん:2007/07/25(水) 00:41:35
template class Tenpureito<T>
{
 T v_;
 const T get() const { return v_; }
 void set(const T& v) { v_ = v; }
 void print() { cout << v_; }
};
979デフォルトの名無しさん:2007/07/25(水) 00:45:26
>>978
このレベルがサクッと空で書けるようになるには普段からtamplateを
多用していないと無理?
書かれたコードを見れば終えるんだけど、いざコーディングするとなると
経験不足から時間がかかってしまうんだが・・・
980デフォルトの名無しさん:2007/07/25(水) 00:57:23
>>979
最初は適当な型で普通にクラスを書いて、
それからテンプレートに置き換える。
というようにやってみては?
981デフォルトの名無しさん:2007/07/25(水) 01:04:14
>>980
ああ、確かに。適当な型で動作したのならテンプレートにしても
とりあえずその型で使っている限りは同じ動作になるはずなんだもんな。
982デフォルトの名無しさん:2007/07/25(水) 03:14:01
>>979
プログラムをサクッ空で書く必要なんて無いだろ。コンパイルエラーが
出てから直せばいいんだよ。そうしてるうちに慣れる。

さんざんこの過程を経てるはずなのに慣れないってんなら、テンプレート
関係無しにプログラムに向いてないだけだと思われ。
983デフォルトの名無しさん:2007/07/25(水) 06:34:26
>>979
デフォルトのアクセス制御とか、const とか、C++ そのものに慣れて
いないみたいだから、もっと手を動かして体で覚えたほうがいいと思う。
984デフォルトの名無しさん:2007/07/25(水) 09:01:49
テンプレートってのは、要するにどんな型でも使えるよってだけの話だ。
985デフォルトの名無しさん:2007/07/25(水) 09:13:09
test
986デフォルトの名無しさん:2007/07/25(水) 19:40:20
>>テンプレートってのは、要するにどんな型でも使えるよってだけの話だ。
そんなこと言うと変なのが湧くぞ
987デフォルトの名無しさん:2007/07/25(水) 22:13:46
あれだよ
あひるタイピングって奴さ
988デフォルトの名無しさん:2007/07/25(水) 22:47:00
それがアヒルならアヒルだ


この言葉知るまでは「テンプレートによるインターフェース」とか言ってたな
989デフォルトの名無しさん:2007/07/25(水) 23:49:30
ダックタイピングって言葉、C++の方で普及してるの?
python使ってるときは、ダックタイピング、
C++の時は静的インターフェイスとか、テンプレートによるインターフェイスとか言ってる。
990デフォルトの名無しさん:2007/07/26(木) 00:27:41
templateってコンテナ作る以外に何が便利なの?
991デフォルトの名無しさん:2007/07/26(木) 00:31:40
イテレータとアルゴリズム作るのに便利。
992デフォルトの名無しさん:2007/07/26(木) 00:56:39
すまん。立てたが番号間違えたorz
C++相談室 part56
http://pc11.2ch.net/test/read.cgi/tech/1185377587/l50
993デフォルトの名無しさん:2007/07/26(木) 09:09:35
Boost を見ればその便利さが分かる。そして気持ち悪さも。
994デフォルトの名無しさん:2007/07/26(木) 13:09:43
テンプレート引数に型以外の物も使えるというのが重要で、
これによって、コンパイル時プログラミングというジャンルが発展した。
Boostはその成果。

とはいえ、実際のプログラミングの場面では、そこまでのものが必要に
なることはあまり無くて、実用上は、
>テンプレートってのは、要するにどんな型でも使えるよってだけ
という認識でも別にいいかなとも思う。
995デフォルトの名無しさん:2007/07/26(木) 17:58:45
たらいを回してみるのもまた一興
996デフォルトの名無しさん:2007/07/26(木) 18:14:33
暑い
997デフォルトの名無しさん:2007/07/27(金) 14:24:25
エルニーニョ→ショタ
ラニーニャ→ロリ
998デフォルトの名無しさん:2007/07/27(金) 18:15:26
ぬるぽ
999デフォルトの名無しさん:2007/07/27(金) 18:17:10
ぬるぽ
1000デフォルトの名無しさん:2007/07/27(金) 18:17:42
ぬるぽ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。