【初心者歓迎】C/C++室 Ver.25【環境依存OK】
>>951 うはwww夢がポンデリングwwwwwww
うp
>951
前スレで出てたと思う
Cをより原始的に簡単にしたC--があるとおもろいかも
>>951 大当たり
ちなみにタイトルは「図解入門 よくわかる最新C言語の基本と仕組み」
エラッタ見てみるとおもろいな。
>※お詫びと訂正: 編集プロダクションとの行き違いにより、本書には多くの誤字があります。
なんじゃそりゃ。
こいつが書いてるC#の本ちょっと読んだけどすさまじくだめそうだったなぁ・・・w
libc(ランタイム)ってCの仕様に書かれてましたっけ?
>>960 ライブラリ関数の事なら規格票(JIS X3010:1999)の第7章に列挙してある
>>961 ライブラリ関数のことです。
未だにライブラリ関数がないOSがあるんで困るんだよね・・・
そうそう、BTRONとかBTRONとかBTRONとか。
#ディレクトリの概念がないのはいいけど、そこに無理やりシェルを移植するから……
>>963 そういやBTRONにも泣かされたなw
今はMona OSで中途半端なlibcが複数あるから困ってるww
構造体Aのメンバに構造体Bを指すポインタを持たせ、
構造体Bのメンバに構造体Aを指すポインタを持たせるにはどうすればいい?
もちろん↓の様に書いてもだめなことはわかってるんだが。
struct A{
B *p;
};
struct B{
A *p;
};
>965
struct B;
struct A{
B *p;
};
struct B{
A *p;
};
あ、あと前スレのごたごたの蒸し返し禁止ね。>各位
ごたごた
>>968 クラスでも同じことできるから覚えておくといい
>>957 STEP2がまともに表示されないんですが
971 :
デフォルトの名無しさん:2006/03/28(火) 20:02:59
質問です
しょうもない関数
例えば、値を比較して大きいほうを返すだけの関数などを作りたい場合
オブジェクト指向で考えるとどこ設置するのでしょうか?
色々と調べた感じだと、名前空間をどうのこうのってのがあったんですが・・。
メソッドとするにはあまりにもひどすぎるし・・。
大きいか小さいか、の定義はそのオブジェクト自身が知ることじゃない?
>>971 そんなものオブジェクト指向にせず、ただの関数にしろ。
そして名前空間はオブジェクト指向と直接の関係があるのでは無い。
全部が全部クラスに閉じ込めればオブジェクト指向になるわけではないし、完璧なオブジェクト指向なんて存在できない。
たとえばグローバルな変数や関数を廃止したJavaやC#だとそんな関数は静的メソッドになっていて、クラスのありがたみは0だ。
ちなみにその例なら<algorithm>のstd::maxが使える。
>>971 >例えば、値を比較して大きいほうを返すだけの関数などを作りたい場合
何と何の値を比較するかによる。
1つのインスタンスの中の値を2つ比べるだけならクラスのメンバ関数になる。
でも、2つのインスタンスが比べる対象になるならその関数は1つ上の存在を管理している奴にあずけなければならない。
また、1つはクラス、もう1つの値は別のどっかの変数の場合でも同様。
975 :
デフォルトの名無しさん:2006/03/28(火) 20:18:33
すみません。
ちょっと、記述が足りませんでした。
int とか dubule です。
つまるところ、math.h みたいな感じで使えるのかな〜?と思ったんです。
C言語なら、そういったモジュールを自作でつくって、使いまわしてたんで・・。
inline int gyaaa(int a, int b){return (a>b)?a:b;};
ヘッダファイルに置いて比較を使いたいファイル内でインクルード
色々対応したいならテンプレート使うといいかも
977 :
デフォルトの名無しさん:2006/03/28(火) 20:23:21
ふむふむ。
mymath.h
inlinle ナンチャラ
inlinle ナンチャラ
みたいな感じで使えるってことですね。
ていうか、こんなやり方でいいんでしょうかね・・?
スマートなやりかたってないんだろうか。
979 :
デフォルトの名無しさん:2006/03/28(火) 20:39:09
int max(int a, int b){ return ((a^b)&((a-b)
>>31))^a
};
xの2次方程式です。Cのプログラムで答えを書いてください。
a*x*x + b*x + c = 0
>980
宿題片付けて欲しいんなら宿題スレで
C99使えばこんなんかな?
#include <complex.h>
double complex x1 = (-b + csqrt(b * b - 4 * a * c)) / 2 * a
double complex x2 = (-b - csqrt(b * b - 4 * a * c)) / 2 * a
んじゃあ3次以降はどうするよ?
3, 4次は公式に当てはめる。
5次以上はシラネ。
>>982 確か絶対値の大きい方をまず求めて、
その値を使って他方を求める。
そうしないと引き算の桁落ちで
真値と大きく異なる値が得られることがある。
classオブジェクトをnewで作成するときにlistに
そのポインタを保存して、終了するときにまとめて
deleteしたいんですが、異なるclassもまとめて管理
しようとしてvoid*で保存すると、deleteでデストラクタが
呼ばれないんですが、呼び出すべきデストラクタを
listに一緒に保存する上手い方法は無いものでしょうか?
listに登録する異なるクラスに共通のスーパクラスを作り
void*でなくこのスーパクラスのポインタを持つようにする
それか、void*の代わりにboost::shared_ptr<void>を使う
>>988 boostを調べてみたら、他にも色々面白いクラスがあるみたいですね。
教えていただいて感謝。
>>989 ていうか、そんなのが普通に出てくる設計って何かがおかしいと思わないのか?w
>>990 いや、要はdeleteしなくて済む(し忘れてもいい)方法は
無いものかと思っただけで。
shared_ptrやarrayなんてのがあることを知らなかったので。
スマートポインタぐらいは知っておこうぜ・・・
993 :
デフォルトの名無しさん:2006/03/29(水) 11:02:49
ブースト無いとC++はカスだってJava信者さんにいじめられました。
C++にはC++にしかできないことがある
operator, operator->* とか
演算子再定義さえできんJavaに言われたくはないな。なぜかStringだけ+やら+=やら使えるが。
boost::spiritは実にアレゲで素敵ですよコンパイル速度遅すぎだけど
存在からしてカスのJavaに言われたく無い
C++は匿名クラスかラムダ式か、そのあたりの使い捨ての仕組みが
あればいいんだがなー。
そうすると、クロージャとか考え出して、メモリ管理の問題にいきつくので、
ガベコレなしでクロージャはきついな、クロージャなしだと、無名関数の
パワーは半減だなーと思う。
ちょっと構文を拡張してくれれば、あとはboostの人がshared_ptr使って、
なんとかしてくれそうな気がするんだけど。
>>998 クロージャ無しで十分使えるboost::lamdaがあるじゃないか。
1001 :
1001:
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。