[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/14 14:02 / Filesize : 217 KB / Number-of Response : 865
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part71



1 名前:デフォルトの名無しさん [2009/07/18(土) 02:54:58 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part70
pc12.2ch.net/test/read.cgi/tech/1244942050/l50

496 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 20:41:10 ]
円周率定数は標準にはないので
2*asin(1)でも使うといい

497 名前:デフォルトの名無しさん mailto:sage [2009/08/12(水) 20:45:24 ]
>>496
それって毎回計算されたりするの?

498 名前:492 mailto:sage [2009/08/13(木) 00:24:02 ]
ありがとうございます。
両方とも考慮していきます。

499 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 06:37:53 ]
x87ならFLDPI命令呼びたいよなー。

500 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 08:42:49 ]
#include <stdio.h>

int main(void)
{
double d;

__asm {
FLDPI
FSTP [d]
}

printf("%16.15f\n", d);

return 0;
}

3.141592653589793

501 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 09:58:26 ]
2.0*asin(1.0)をFLDPIにしてくれるコンパイラが欲しいゾ

502 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 10:20:24 ]
幾つかpieを計算する関数を試してみた。
処理時間は概ね、acos(-1) > asin(1) * 2 >> atan2(0, -1)になった。

503 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 10:27:25 ]
>>502
興味深い結果だ。

504 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 11:27:17 ]
環境を変えたら入れ替わったりするんだろうか?

関数呼び出しのオーバーヘッド分とか
2倍する演算の分とかその辺の差のような気がする。



505 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 11:32:44 ]
調査している人がいてもおかしくない気もするが。
とりあえずdoubleに限るなら
#IFDEFでM_PIがあるかどうかで分けるのが正解な気がしますが。

506 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:25:19 ]
>>502
それって本当に「時間」?

507 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:27:49 ]
ぐぐると6*asin(0.5)ってのがよく出てくるけどこの方がいいのかな

508 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:33:08 ]
結果定数なんだから定数で置き換えてくれればいいのに。
そういうのをコンパイラに伝える機能って新しく追加されたりしないんだっけ?
javaだったかな。

509 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:34:48 ]
constexprっていうまさにそういう機能がC++0xで追加されるよ

510 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 12:35:51 ]
thx

511 名前:502 mailto:sage [2009/08/13(木) 12:36:11 ]
>>506
はいな、時間だよ。勿論、atan2(0, -1) >>>>> 定数 だろうけれど。
因みに、gccはpow(2, -23)とかは定数にしてくれるけど>502はM_PIにもfldpiにもならなかった。
尤も、fld1も使う場合と使わない場合があるようだけど。

512 名前:466 mailto:sage [2009/08/13(木) 12:51:27 ]
確かに、πを数値計算する場合、
asin(x)のテイラー展開(正確にはマクローリン展開)が一番自然で、
しかも誤差の項にx^nがかかるため
asin(1)よりもasin(0.5)の方が圧倒的に収束は速いと考えられますね。

そのため6*asin(0.5)が良いという可能性はありますよね。


ところでどなたか
>>466
をお答えいただけませんでしょうか?

513 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:18:09 ]
Cの関数を使わず直接FPUを叩いてみた

結果は>>502と同じ
というか、ソースを見てもらうとわかるが、acosを求めるのに一番
手間がかかり、次はasinであり、atanはfpatan一発で求まるので
一番簡単なので結果は予測できる

kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9897.txt

ここにソースを置いておく
>>502と違う結果が出た人がいたら環境を教えて欲しい

514 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:23:35 ]
C++と関係ない話は他でやれ



515 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:25:46 ]
別にこれ位いいだろ
>>504の疑問に答えただけだ

516 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:31:29 ]
ご教示願います。

詳説C++ではデストラクタは継承されないとあります。
Accelerated C++では仮想デストラクタは継承されるとあります。

非仮想のデストラクタは継承されない。
仮想デストラクタは継承される。

という認識で正しいでしょうか?

517 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:33:52 ]
So death.

518 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 14:43:20 ]
>>516
「継承される」ってどういう状態のこと言ってんの?

デストラクタは必ず派生クラスで再定義されるから、普通のメンバ関数や
メンバ変数みたいに基底クラスのものがそのまま使われるってことは無いよ。

あ、少なくとも言語仕様上はね。派生側で追加の処理が無ければまったく
同じ関数が走るようにコンパイルされることは考えられる。

でも、これは virtual 付いてようが付いてなかろうが同じ話。

519 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:01:08 ]
>>512 メンバ関数(演算子)の有無で切り替えたいというのなら、C++はできなかったと思う。
その代わり、関数の有無を継承したクラスで示すタグディスパッチという手法がある。
class EQ_tag{};//==があることを示すタグのクラス
class NE_tag{};//!=があることを示すタグのクラス
class A :public EQ_tag
{
public:
bool operator==(int val)const{return val==3;};
};
class B :public NE_tag
{
public:
bool operator!=(int val)const{return val!=3;};
};

template<class T>bool _isEQ(const T& s,int val,const EQ_tag&){return s==val;}
template<class T>bool _isEQ(const T& s,int val,const NE_tag&){return !(s!=val);}
template<class T>bool isEQ(const T& s,int val){return _isEQ(s,val,s);}// この第3引数で切り替える。

int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
isEQ(a,3); //==が呼ばれる
isEQ(b,3); //!=が呼ばれる
return 0;
}


520 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:06:26 ]
>>517
>>518
結局、基底クラスのデストラクタを仮想にしておけば

・派生クラスのデストラクタ
・基底クラスのデストラクタ

がこの順番で呼び出されるので納得しました。


521 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:08:22 ]
>>520
仮想で宣言した場合としていない場合、
どう違うか
たぶん理解してないよ、それ。

基底クラスのポインタにキャストしてdeleteした場合について
限定しているわけじゃないでしょ?

522 名前:466 mailto:sage [2009/08/13(木) 15:10:29 ]
>>519
タグディスパッチとは、
input_iterator_tag
forward_iterator_tag
bidirectional_iterator_tag
random_access_iterator_tag
output_iterator_tag
と同じような物でしょうか?

523 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:14:36 ]
template <class T>
class Hoge
{
T val;
//詳細が続く。
}
こんなTクラスのラッパクラスであるHogeに対して、
hoge->T方向のキャスト演算子をオーバーロードしたいのですが、
const operator T()const{return val;}
operator T(){return val;}
のような2通りのバージョンを用意すべきでしょうか?
それとも上の1つだけにした方が望ましいですか?

524 名前:523 mailto:sage [2009/08/13(木) 15:16:12 ]
正しくは
operator const T &()const{return val;}
operator T &(){return val;}
かもしれません。
参照をいまいち理解出来ていなくて。。。



525 名前:519 mailto:sage [2009/08/13(木) 15:18:09 ]
>>522
うん

526 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:21:55 ]
参照でない(コピーを返す)なら、const版だけでいい
参照を返すなら、valを変更されてもよければ2つとも用意する
valを変更されたくなければconst版だけ

527 名前:466 mailto:sage [2009/08/13(木) 15:22:22 ]
>>525
ありがとうございます。
そのあたり、もっと勉強してきます。

528 名前:523 mailto:sage [2009/08/13(木) 15:27:36 ]
>>526
valはHogeのプライベートメンバなのですが、

T型へのキャストでvalを変更可能にするのとしないのと、
クラス設計としてはどちらが望ましいとかはありますか?


529 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 15:32:01 ]
そのラッパクラスの目的、どういう利用方法を想定しているかによる

530 名前:デフォルトの名無しさん [2009/08/13(木) 15:41:16 ]
なるほど、一概には言えませんということですか。
ありがとうございました。


531 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:32:09 ]
class hogeのインスタンスメソッドbokeをthreadや、
APIのコールバック設定関数の引数void (*arg)(void)に渡したいんですが、どうすればいいでしょうか?
頼みのboost.bindやfunctionも、boost内部のクラスで定義され、void (*arg)()にキャスト不可能でした

532 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:38:01 ]
APIのコールバック関数は大抵void*のパラメータを渡せるようになってるはずなので、
それ使ってthisを渡してstatic関数経由で呼べばいいと思います

533 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:39:09 ]
      - -―- 、
    /...::::::::::::::.. ヽ
  / ..:::::::::::::::::::/\ ヽ
  /..:::/::::/::::// ヽ l:. l.
  l:::::!::::/●)  (●)|:: |
.  !:::l::::l///  ,, ///l:i:l  ェェエエ工工
  ヽ:i::!、 r ― ァ ノノ'     
    ` l\`ー './
   ノヽ \_フ.ヽ
   |_ 丶   ヽ
.   | |' 初心者)


534 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:47:14 ]
>>521
いえ大丈夫です。
ありがとうございます。



535 名前:531 mailto:sage [2009/08/13(木) 16:47:58 ]
>>532
が、できたら苦労はないんですけど、
引数void (*arg)(void)からわかる通り、指定できるコールバック関数の引数が0個なんですよ…
なので、クラスメソッド→インスタンスメソッド経由だと、インスタンスのアドレスもわからないですし
複数のインスタンスを扱う事を考えるとグローバル変数も使えずで…途方に暮れてます

536 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 16:58:49 ]
じゃあ、適当に10個くらいコールバック関数を用意して、
どのオブジェクトがどのコールバック関数を使用中か管理して、
空いてるコールバック関数を使う
一杯だったらリソース不足ってことにしてあきらめる

CPUが決まってるなら、実行時に各オブジェクト用のコードを
その場で生成するっていう手もないこともない・・・

537 名前:531 mailto:sage [2009/08/13(木) 17:18:23 ]
>>536
そうですね…、やはり管理クラスを別で作るしかなさそうな感じです。
コールバックごときに時間も掛けてられないので、この仕様で行こうと思います。
ありがとうございました。

538 名前:519 mailto:sage [2009/08/13(木) 18:02:35 ]
>>535
プライベートなスタティック変数を経由する。



539 名前:デフォルトの名無しさん [2009/08/13(木) 19:07:06 ]
複数のグローバル変数を1つのclassで包めば安全度あがる?

540 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 19:15:11 ]
オブジェクトとして扱うなら

541 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 19:15:27 ]
あがりません。
グローバル変数のまずい点の一つは
密結合であるということだからです。

542 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 20:47:43 ]
安全度ってものが何を意味するか微妙だけど、
とりあえず何の名前空間にも含まれていないグローバル変数が
複数あるならその段階でコードがクソ設計である可能性は高い。
・・・って誰もこんな事聞いてないか。


543 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:26:18 ]
MapDataというマップダータの変数があるとして
マップ描写、当たり判定、キャラなどのクラスからアクセスがあるなら
グローバル変数以外にどう実装すればおk?

全部ひとつのクラスで包めばいいかもしれないが
それぞれのクラスにMapDataを渡すとなれば引数が多くなりスマートにならないんじゃね

544 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:33:05 ]
今日はじめてC++の文法解説サイトを読みました。
C++というか構造体++に見えてしまうんですが、
オブジェクト指向とか仰々しい名前が付いててこんなもんですか?



545 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:34:28 ]
>>544
継承と仮想関数があってもですか?

546 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:39:25 ]
オブジェクト指向なんて今時珍しくもなんともないだろ

547 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:39:44 ]
テンプレート超楽しい

548 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:41:50 ]
>>543
マップデータを内包するMapDataというクラスにマップ描写や当たり判定を行うメンバ関数を用意する。
キャラクラスからのアクセスはどんなものかわからんので知らない。

549 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:43:18 ]
オブジェクト指向の入門書はJavaやC#の方が多いくらいだし
C++学ぶ段階でオブジェクト指向ってなんですか?って言う人は減ったわな。

550 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:44:26 ]
C++特有の物といったら多重継承ぐらいなもんだしな
それを使ったオブジェクト指向入門書というのは割と少ない

551 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:48:23 ]
普通はMapDataのインスタンスを受け取ってデータ取得や当り判定、描画を行うクラスを用意する。

552 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:51:41 ]
>>545
>継承と仮想関数があってもですか?
これから読んできます!

クラスの解説読んでるとSQLとRelationalDatabaseで良いじゃん!と思ってしまんですが、
クラスのありがたみってどのあたりで現れてきますか?

553 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 21:52:58 ]
>>552
君はGoF読むか独習デザインパターンC++を読みなさい

554 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:00:40 ]
>>543
唯一絶対の正解なんてのはねーが、マップ描写なら
ttp://marupeke296.com/OOD_No6_CS2_ShootBullet2.html
描画対象の基底クラスを作ってうにゃむにゃ。
描画対象が抽象化されるからレンダラーで奥行描画の調整もしやすい。
いま漏れが思いつく限りでは一番好きなやり方。
キャラなら適当なクラスを作ってインスタンスをプール。
当たり判定はmapdataのお仕事って感じかな?



555 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:01:05 ]
>>552
おいっす、明日ジュンク堂あたりでじっくり読んできます。

とは言うものの、デザインパターンって昔読んでさっぱり分からなかったんですが、
デザインパターンその物の解説本よりも、
デザインパターンを使って作ってみましょう!見たいな本はないですか?

556 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:06:33 ]
>>555
推薦図書/必読書のためのスレッド 51
pc12.2ch.net/test/read.cgi/tech/1250040767/

このスレで聞いてみたら?
出来るだけ詳しく「これこれこういう本が欲しいんです」と
自分の意志を伝える事かな

それからweb上にも役立つ所がある
俺は

www.01-tec.com/document/cpp_design_pattern.html

ここを良く読んでるけどな

557 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:11:42 ]
>>556
ありがとうございます。
聞いてくる前にまず読んできます。

558 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:12:40 ]
クラス解説とSQLがどうしても結びつくのかわからない・・・

559 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:17:25 ]
だから初心者なんだろ

560 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:18:22 ]
いやー、なんか値の代わりに関数が登録されてるように見えて、
検索して値を取り出すのが、関数の呼び出しに見えてしまったんですが、
SQL勉強しなおしですかね・・・・

561 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:25:12 ]
いあいあ、なるほどそういう見方もあるのかと
思ってしまった
ありかとう

562 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:31:50 ]
オブジェクト指向データベースってあったなぁ…あれどうなったんだろう。

563 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:33:11 ]
構造体+アクセス・セキュリティ強化 → 関数管理ライブラリ?
構造体+データ処理特化 → リレーショナルデータベース?
見たいなあいまいな知識しかもってません(笑)

むかーし、Cの構造体でDB組んでて、
DBが大規模化して手に負えなくなって、
構造体に機能追加してったら、
関数ライブラリを管理するのにちょうど良いので
その方向に進化させたのがクラスなのかなーとか

564 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:34:32 ]
Cで構造体に機能追加って、Cの構造体はメンバ関数持てないでしょ



565 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:37:44 ]
>>564
メンバ関数として第一変数を構造体へのポインタにすればいいだけでは?

566 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:38:30 ]
Cの構造体に機能追加(メンバ関数を持てる様にした)したのが
C++のクラスなのかなーという認識で、
初心者の戯言です。

567 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:39:38 ]
>>566
それはカプセル化ね

データと手続きを今まで別々に扱っていた不自然さを
統一して解決したわけですよ

仮想関数と継承はまた別

568 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:41:52 ]
C++はテンプレートを利用したコンパイル時静的多相解決という
とんでもない仕組みも持っているけどね

そのおかげでBoostという怪物ライブラリが現れて来た

569 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:46:17 ]
>>567
ありがとうございます。
データと手続きは別個の方が自然だと思ってましたorz

>>568
奥が深いですね・・・
もう一度解説サイト読み直してきます。

C++でGUIのあるアプリケーションを作ろうとしたら.net?とかいうライブラリを使うんでしょうか。

570 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:47:02 ]
>>568
テンプレートメタプログラミングってすげぇよな。
俺できないけど、みんなは出来る物なの?

ライブラリ作る職業の人すら出来るのかあやしいんだが。

571 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:47:20 ]
コンパル時に結果を演算してしまうというのはものすごい技術だけど、
一方で、エラーメッセージが意味不明だったり、
リアルタイムコンパイルによって実現されているMicroshiftのインテリセンスと相性が悪かったり…
VS2010で改善されないかなぁ。


572 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:48:02 ]
>>569
データと手続きが別個だとプログラムの規模が上がった時に
一人で扱える限度を超えて手に負えなくなるんですよ

.NETはC++/CLIという全く別個の言語ですので混同しないように
他にC#とかVB.NETなどもある

573 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:48:09 ]
>>569
自然かどうかはちょっと微妙なところがあるとおもうけど、
自分や他人の作った複数のクラスが
うまく組み合わさって動くその様は、まさに壮観。

574 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:50:35 ]
盛り上がっているところ失礼します。

const unsigned int num = 10;
と書くと、numはコンパイル時に定数となると聞きました。

const unsigned int hoge = 3 + 4;

const unsigned int piyo = (3 + 4 - 1) * 2 / 3;
はコンパイル時に定数になりますか?




575 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 22:51:08 ]
なります

576 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:02:04 ]
なるかどうかはコンパイラ次第だったりしない?

最適化を禁止してアセンブラコード出させてみるとか。



577 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:05:50 ]
>>572
>データと手続きが別個だとプログラムの規模が上がった時に
>一人で扱える限度を超えて手に負えなくなるんですよ
なるほどー

>.NETはC++/CLIという全く別個の言語ですので混同しないように
>他にC#とかVB.NETなどもある
あさってな質問ですいませんorz
GUIのあるアプリケーション作ろうとするなら開発環境のスレに移るべきでしょうか?

>>573
>自然かどうかはちょっと微妙なところがあるとおもうけど、
>自分や他人の作った複数のクラスが
>うまく組み合わさって動くその様は、まさに壮観。
多人数で大規模なプログラムを作るための工夫の結果がクラスっていう概念なんでしょうか?
呼び出し方は最初に決めるけど、データ構造と処理の仕方は各々見えないところで好き勝手やってOK見たいな。



578 名前:574 mailto:sage [2009/08/13(木) 23:06:11 ]
>>575
>>576
ありがとうございます。

const unsigned int num = 10;
const unsigned int hoge = 3 + 4;
const unsigned int piyo = (3 + 4 - 1) * 2 / 3;
char a[10], b[num], c[hoge], d[piyo];
がg++で通ることは確認しました。

579 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:06:44 ]
>>554
よく理解できないがすげー参考になったわ

580 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:08:12 ]
>>577
GUIの話題ならコンパイラスレに行った方がいいな

>呼び出し方は最初に決めるけど、データ構造と処理の仕方は各々見えないところで好き勝手やってOK見たいな。

それは仕様書の話だね
OOPとは関係ない

581 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:08:48 ]
>>577
>多人数で大規模なプログラムを作るための工夫の結果がクラスっていう概念なんでしょうか?
いい表現だね。
まあ工夫の一つってことだけど。

クラスはテンプレートと組み合わせたときもまたすごいことになる。
例えば君が有理数クラスを作ったとして普通に使うとintが分母分子の型になるけど、
誰かが多倍長整数クラスを作ってくれていればそれを使うことで
多倍長桁数で分母分子を管理する有理数クラスが一瞬で出来る。




582 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:12:42 ]
そうだなクラスの目玉機能の一つとして演算子の多重定義というのがあるな
これをテンプレートと組み合わせるとtraitsになる

583 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:18:08 ]
>>580
了解しました。コンパイラスレ探しに行ってきます。
初心者の的はずれな質問に付き合って頂いてありがとうございます。

>>581
難しいですねw
理解するにはまだまだ勉強が必要みたいです。
大は小を兼ねる的な、
基本的な関数を、継承使ってちょっとカスタマイズすることで、
ゼロから書くよりは大幅に工数を削減して欲しい関数を実現する見たいな?

584 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:20:05 ]
大規模開発ではクラスは使わない
クラスと言う名の構造体しか使わない



585 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:22:12 ]
>>583
実際は仮想関数を使うために仕方なくpublic継承を使うけど
できることならコンポジションで対応出来る所はそうしたい

継承は使いすぎるとプログラムの見通しが悪くなるんですよ
実際にプログラム書いてみるとわかるけど

それからUML図にも慣れるといいね
UML無しにOOPしようとすると頭が爆発します

templateは継承とはまた全然別の機能
ジェネリック・プログラミングのための機能でこれがあるために
C++は特別な言語になっちゃってます

586 名前:デフォルトの名無しさん mailto:sage [2009/08/13(木) 23:29:26 ]
>>585
ありがとうございます。

実のところ、
UMLライクなお絵かきするとCコードを生成してくれる環境に慣れすぎてて、
裏で何が起きてるのかさっぱ分からないという状況に慌てて、
連休利用してCの文法見直してたらいつの間にかここに辿り着いたといった次第です。
(作って覚えるVC#とかの本でキーボード叩くのえらい難儀しました。)

継承とtemplateの違いがまださっぱりなので、
明日もじっくり解説サイト読んで来ることにします。

レスくれた人ありがとうございます。&おやすみなさいー

587 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 10:50:36 ]
一応Cは理解していると思っているのですが
C++を最初から勉強しようとした時、何かオススメの書籍なりサイトはありますか?

猫とかやさしい〜ってのはやめとけみたいな話を「C言語なら俺に聞け」というスレで目にしたもので

588 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:03:33 ]
>>587
ロベールのC++を読んでおけ
規格書に近い内容まで知りたいなら詳説C++も読め

589 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:12:34 ]
ロベール=ピエール

590 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:26:36 ]
>>587
AcceralatedC++一択じゃないか?
それはいいけど、折角書籍スレがあるんだから見てきたら?

591 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 11:34:09 ]
>>590
C++を「一から」理解したい人に「AcceralatedC++」は
違うだろうと思うんだけど

それよりC++ in-depth seriesそのものが違うだろうと思う
あれは中級者が上級者に進むためのシリーズだろう

592 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 12:31:06 ]
>>587
猫はそこまでは悪くないよ。
ロベールのC++教室
ttp://www7b.biglobe.ne.jp/~robe/cpphtml/index.html
ここはお薦め。
ここと猫は併用して学んで欲しい。

入門者ならエクスメディアの『ビジュアルラーニングC++』って本が
個人的なオススメだったけど、会社が倒産した。

593 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 14:09:29 ]
Webサイトの方のロベールはだめだ。いろいろ古い。
推奨されないコーディングもある。
本はそういうところ直されてるから、そっちを読んだほうがいい。

594 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:27:14 ]
gotoって処理自体は軽いでしょうか?

gotoを使うと無駄なコンストラクタを一回さけられる状況なんですが。



595 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:34:11 ]
そのコンストラクタを避けるのは本当に必要なことか?
何か速度的に重要な場面?

gotoは、ローカル変数のデストラクタを呼ばなきゃいけなかったり
tryブロックの出入りが必要な場合を除けば、軽い

596 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 20:51:40 ]
goto使うなんて言ったら最後、
何回レビューして注意書き何箇所に追記せにゃならんか・・・

って状況でもなければ作って走らせて比較してみては?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<217KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef