■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室2
501
名前:
おでん屋
:01/09/28 06:46
>>500
~AbstructFile() で純粋仮想なはずの Close() を呼んでおりますが
そこは何やら仕掛けで派生の Close() が呼ばれるようになっています。
本質はそこではないので省略いたします...
502
名前:
おでん屋
:01/09/28 06:49
蛇足です。(^^;
一見、最も派生した AbstructFile のデストラクタでやればと思うのですが
さらに派生したとき、問題に...ということなので...
503
名前:
デフォルトの名無しさん
:01/09/28 06:57
>>498
> class A
> class B : public A
> class C : public A, public B
こういう継承は出来ないんでは?
(1) 基底クラスのデストラクタでファイルの後始末処理をする
(2) 基底クラスのデストラクタから派生クラスの関数を呼びたい
ってことだろう。しかし (2) ってことは、実際にファイルの後始末を処理するのは、基本クラスでなくて派生クラスなのか?それなら単に派生クラスのデストラクタで後始末処理をすれば良いと思うが。どうでせう。
504
名前:
デフォルトの名無しさん
:01/09/28 07:00
>>502
さらに派生したときに新しい処理が加わるなら、派生デストラクタで新しい処理だけやれば良いのでは?
505
名前:
デフォルトの名無しさん
:01/09/28 07:09
>>500
私ならインターフェースの継承と実装の継承を分離するかなぁ。
struct FileBase
{
virtual Open() = 0;
virtual Close() = 0;
virtual Read() = 0;
virtual Write() = 0;
virtual ~FileBase() {}
};
struct FileA : public FileBase
{
virtual Seek() = 0;
};
struct FileB : public FileBase
{
virutal Undo() = 0;
};
たとえば、こんな感じでまずインターフェースの階層を作っておく。実装はコンストラクタと
仮想デストラクタ以外は一切無しね。次に、これを継承して実装を作る。
struct FileAImp : public FileA
{
Open();
Close();
...
~FileAImp() { Close(); }
};
struct FileBImp : public FileB
{
Open();
Close();
..
~FileBImp() { Close(); }
};
実装を継承したい場合には、どこかで Close() を書くわけだよね。もし末端のクラスではなく、
途中のクラスで Close() を書いたのなら
- Close() をその先のクラスでオーバーライドしないことに「決め」て、途中のクラスのデストラ
クタで Close() する
- 途中に挟んだクラスのデストラクタでは Close() せずに必ず末端のクラスでのみ Close() する
(ついでに途中に挟んだクラスのデストラクタを protected にして、直接はコンストラクトできない
ように細工)
どちらか好きなほうを選択。どちらにしても、ドキュメントを書いておく。
506
名前:
デフォルトの名無しさん
:01/09/28 07:14
>500
> 閉じ忘れ防止にデストラクタでファイルを閉じる処理はしておきたいです
これを基本クラスでなく派生クラスのデストラクタでやれば済むんでは?
507
名前:
おでん屋
:01/09/28 09:17
皆さんありがとうございます。500です。
>>503
,504,506氏
はい。それで解決です。(^^;
でも、これで解決しても、派生をさらに派生すると Close() はまた、
その派生先に入れる必要がありますよね・・・
こうなると延々といれる作業を繰り返すわけで・・・
このあたりスマートに処理したいのですが・・・。
>>505
ありがとうございます。
Javaでいうfinallyを決めてしまうのでしょうか。(間違っていたらすみません)
最終の派生クラスを定義できればいいのですが
できればさらに派生させたい場合もあるかもしれないので...
仮想関数のようなデストラクタもどきがあればいいのですが・・・
508
名前:
デフォルトの名無しさん
:01/09/28 09:24
各クラスごとでクローズの仕方が違うんですか?
つまり、AbstructFileの閉じ方とAbstructFile2の閉じ方は違うんですか?
もし違うなら継承にする意味がないような?
あとどうでもいいけど、正しいつづりはabstr「a」ctな。
509
名前:
デフォルトの名無しさん
:01/09/28 10:23
>>507
> できればさらに派生させたい場合もあるかもしれないので...
汎用的なクラスライブラリを作っているのなら別ですが、そうでなければクラス階層は
設計段階ですべて見えてると思います。そうでなければ、まだ設計の煮詰め方が甘い。
それと上のほうでも書きましたが、インターフェースの階層だけ決めておいて、実装継
承はとりあえず忘れる(コードを共有しようとしない)方が良いと思います。実装継承は
強力な手法ですが、強力さゆえに使い方を誤ると簡単に泥沼に入りますから。
510
名前:
おでん屋
:01/09/28 14:51
皆さんのご意見と設計を熟読いたしました。
やはり私の設計が全面的に間違っていますね。設計才能の無さを痛感しております。
勉強してもう少しまともな設計ができるようにしたいと思います。
皆さまありがとうございました。
>>508
,509氏
>あとどうでもいいけど、正しいつづりはabstr「a」ctな。
>設計段階ですべて見えてると思います。そうでなければ、まだ設計の煮詰め方が甘い。
その通りです。(^^;
>それと上のほうでも書きましたが、インターフェースの階層だけ決めておいて、実装継
>承はとりあえず忘れる(コードを共有しようとしない)方が良いと思います。実装継承は
>強力な手法ですが、強力さゆえに使い方を誤ると簡単に泥沼に入りますから。
はい。はまってしまいました。
仰る事を心がけてがんばってみます。
511
名前:
デフォルトの名無しさん
:01/09/28 17:09
512
名前:
デフォルトの名無しさん
:01/09/28 21:15
ヌルポインターって作れないんでしょうか?
513
名前:
デフォルトの名無しさん
:01/09/28 21:19
すみません、この板来るの初めてで、違うスレに書いてしまいました
C++の問題です、なにぶん初心者でして
参考になる本などあれば教えて頂きたいです・・・。
1.二つの数をインプットしそれをx,yの読み込んで
和差積商を計算するプログラム
2.1つの数をインプットし読み込んで
その数の二乗、三乗を計算するプログラム
514
名前:
デフォルトの名無しさん
:01/09/28 21:22
>>513
宿題はこっちで聞け。
お兄ちゃんの宿題、私が答えるよ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=982853418
515
名前:
デフォルトの名無しさん
:01/09/28 21:58
>>512
ヌルポインターを「作る」とは何??
516
名前:
デフォルトの名無しさん
:01/09/28 22:16
void* p=(void*)NULL;
終了。
517
名前:
出馬鹿ー
:01/09/28 22:21
classへのポインタってありますか?
518
名前:
デフォルトの名無しさん
:01/09/28 22:22
class A{};
A* a;
終了。
519
名前:
デフォルトの名無しさん
:01/09/28 22:23
>>518
それはオブジェクトへのポインタ
クラスへのポインタではありません
520
名前:
デフォルトの名無しさん
:01/09/28 22:30
>>517
こういう感じのコードを書きたいのかな?
class A;
class_ptr X = A;
X* p = new X();
// 擬似コードなんで、コンパイル通りません。悪しからず。
C++ ではクラス自体を指す変数は定義できません。ただし template クラス/メソッドの
引数としてクラス名を渡すことは可能です。
521
名前:
出馬鹿ー
:01/09/28 22:49
>>520
そういうことっす。ネタでした。
522
名前:
出馬鹿ー
:01/09/28 22:57
ネタとはいえ先ほどは非常に簡潔でいいレスをいただきありがとうございました。
御礼にもう1題
templateメソッドって可能ですか?(template関数ではない)
523
名前:
デフォルトの名無しさん
:01/09/28 23:05
>>522
無理。
コンストラクタを書けない。
継承ができない。
明示的な呼び出しができない。
その前にインスタンスを作れない。
524
名前:
出馬鹿ー
:01/09/28 23:09
>>523
ありがとうございました。疑問は晴れました成仏します。
逝ってきまーす
525
名前:
デフォルトの名無しさん
:01/09/28 23:24
>>517
これが「クラスを指すポインタ」に一番近いかな
type_info* p = typeof(class A);
526
名前:
デフォルトの名無しさん
:01/09/28 23:25
>>522
テンプレートメンバ関数って意味なら、可能です。
class A{
template<typename T> void f(T);
};
527
名前:
デフォルトの名無しさん
:01/09/28 23:27
>>525
間違えた。鬱だ・・・
const type_info* p = typeid(class A);
528
名前:
デフォルトの名無しさん
:01/09/28 23:28
>>527
さらに間違い。逝ってきま・・。
const type_info& p = typeid(class A);
529
名前:
出馬鹿ー
:01/09/28 23:28
>>525
うを〜そんな手が〜あったか〜。早速やってみよ〜。
でっきるかなでっきるかな〜さてさてほほ〜。
530
名前:
出馬鹿ー
:01/09/28 23:45
>>526
>>528
できました〜。ありがとうございました〜迷わず成仏できます。
531
名前:
デフォルトの名無しさん
:01/09/29 00:47
>>void* p=(void*)NULL;
この場合NULLは
stdio.hのマクロ定義かなんかじゃないんですか?
void* p=(void*)0;
とか
int* p=(int*)0;
これでいいのでしょうか?
532
名前:
デフォルトの名無しさん
:01/09/29 00:49
テンプレートってヘッダファイルに書くの?
どこに書いたらいいのかよくわからん。
533
名前:
デフォルトの名無しさん
:01/09/29 00:51
>>530
C++ の type_info は、そこからメソッド一覧を取得したりインスタンスを作ったり
できないので、あまり実用性は無いですけどね。
534
名前:
デフォルトの名無しさん
:01/09/29 00:58
>>531
単に
void* p = 0;
とか
int* p = 0;
で善し
535
名前:
デフォルトの名無しさん
:01/09/29 00:59
>>532
使う場所から見えるところ。一般的にヘッダに書く。
536
名前:
デフォルトの名無しさん
:01/09/29 01:11
>>533
同意。何のためにあるのかさっぱりですな。
誰か有効な利用法プリーズ
537
名前:
デフォルトの名無しさん
:01/09/29 01:25
>>536
ダウンキャストする時に使ってたんじゃない?
その昔は。
538
名前:
デフォルトの名無しさん
:01/09/29 02:16
>>533
C++はObjectを作る方法として、ポインタにnew使う奴と、変数埋めこみで直接作る奴とが有るが、
C++が痛いのは、その両方に対して使える機構しか、提示しない、ということだな。
メタクラスの方向性を否定してるんで、「つみかさねる」ようなプログラミングを
ちまちま手作業で書かないとならないんで、辛い。
539
名前:
デフォルトの名無しさん
:01/09/29 02:22
>>538
すまん。日本語が難しすぎてよく分からんので、もうすこし C++ プログラマに
わかりそうな言葉でしゃべってもらえると、ありがたい。
540
名前:
デフォルトの名無しさん
:01/09/29 02:35
>>535
ヘッダにソース書くのやだなー。
って思う人はどうしてるの?
541
名前:
デフォルトの名無しさん
:01/09/29 02:37
>>540
ヘッダに宣言だけ書いて *.cpp ファイルに実装書くこともできますよ。
でもヘッダに書くのが主流。
542
名前:
デフォルトの名無しさん
:01/09/29 02:51
>>541
そうなんだ。ありがとうございます。
思い切ってヘッダに書いてみます。
昔はよく、「ヘッダにコードを書くな」って怒られたものです。
(それはインクルードするだけで実体化するからですけど〜。)
543
名前:
デフォルトの名無しさん
:01/09/29 02:53
>>540
昔、ミカカ子会社提供のミドルウェアの一部であるテンプレート
ライブラリ(ヘッダに実装かいてあった)に間抜けなバグがある
のを発見した事がある。
ソース完全公開状態だからな。恥さらしだと思った。
(問題は、そこがバグっているとそもそもそのライブラリが
役立たずなものになるという致命的なものだったのだが、誰が
どう試験していたんだろうか…)
544
名前:
デフォルトの名無しさん
:01/09/29 02:56
>>542
ヘッダに書いても、使わない template クラス/関数に対してはコードが生成
されませんから、気にしなくて大丈夫です。
545
名前:
デフォルトの名無しさん
:01/09/29 03:44
>>536
typeidバトラー
#include <iostream>
#include <typeinfo>
#include <stdlib.h>
struct Player {
int getPower() { srand((int)&typeid(*this)); return rand(); };
const char *getName() { return typeid(*this).name(); };
virtual char* say() = 0;
static Player& battle(Player& a, Player& b) {
int ap = a.getPower();
int bp = b.getPower();
cout << a.getName() << " power : " << ap << endl;
cout << b.getName() << " power : " << bp << endl;
Player& winner = (ap > bp) ? a : b;
cout << "..." << winner.getName() << " win." << endl;
cout << "『" << winner.say() << " 』" << endl;
return a;
};
};
struct Monar : Player {
char* say() { return "モナー"; };
};
struct Giko : Player {
char* say() { return "ゴルァ"; };
};
int main() {
Monar m;
Giko g;
Player::battle(m, g);
}
546
名前:
545
:01/09/29 03:46
>>545
どうさ保証なし。実行例。
>gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-cygwin/2.95.3-5/specs
gcc version 2.95.3-5 (cygwin special)
>a.exe
5Monar power : 621329674
4Giko power : 707264478
...4Giko win.
『ゴルァ 』
547
名前:
デフォルトの名無しさん
:01/09/29 08:07
>>545
やべーワラタ。
548
名前:
デフォルトの名無しさん
:01/09/29 10:55
すいません、C++の、ポインタとかクラスとかSTL」とかはぜんぶやったんですが、enumだけ覚えずにここまできてしまいました。
enumってなんでしょう。
549
名前:
デフォルトの名無しさん
:01/09/29 11:19
>>548
const や #define に代わる、定数宣言の最適な手段です(整数に限る)
例:
enum N_{
N = 32
};
550
名前:
デフォルトの名無しさん
:01/09/29 11:37
enum(enumerate: イニューメレイト)ってのは、文字どおり「列挙型」です。
大抵の言語に備わっています。
たとえば
#define ONE 1
#define TWO 2
#define THREE 3
#define NINE 9
#define TEN 10
は
enum 《ここで列挙型の名前を定義できる》{
ONE,
TWO,
THREE,
NINE = 9,
TEN
};
と書けます。
違いは、ONE/TWO/…などが #define だとプリプロセッサで展開される(コンパイラには見えない)のに対して、
enum だとそれらを識別子としてコンパイラが認識する…ってことかな。
これはコンパイラが型チェックできることを意味しています。
型チェックの結果は C と C++ で違います。
たとえば、どちらの場合も変数の型は int 類になるけど、
#define だとそこに定義されていない値を入れても、
コンパイラは「あれっ?」とも思いません。
でも enum だとコンパイラがそれを型として認識できるので、
これが C++ だと、明示的に型キャストしない限り、
コンパイラが「あれっ?」と思ってくれます。
551
名前:
デフォルトの名無しさん
:01/09/29 11:43
>>550
enum は 0 からじゃ…。
552
名前:
デフォルトの名無しさん
:01/09/29 12:56
enum型変数ってどうやって書くの?
553
名前:
うろ覚え
:01/09/29 12:59
基本
enum {...} x;
一般的
typedef enum {...} type;
type x;
554
名前:
:01/09/29 13:24
>>551
値入れても良いんだよ。
555
名前:
デフォルトの名無しさん
:01/09/29 13:29
>>554
いや、
>>551
は、それじゃあONEが0になってるってつっこんでるんだよ。
556
名前:
550
:01/09/29 13:49
>>551
あっ、…。(鬱氏)
>>552
C なら
enum type {...};
enum type x;
C++ ならそれ以外に
enum type {...};
type x;
とも書ける。
(今度こそ!)
557
名前:
553
:01/09/29 14:11
>>556
そういや、構造体と同じで普通に名前付けられるのだったね…。
558
名前:
デフォルトの名無しさん
:01/09/29 15:58
boolが仕様に入るまではこうしてた
typedef enum{
false=0;
true=1;
} bool;
559
名前:
デフォルトの名無しさん
:01/09/29 15:59
セミコロンじゃなくてカンマだっけ
560
名前:
デフォルトの名無しさん
:01/09/29 16:27
汎用性のある参照カウンタ付きのクラスを継承して使いたいのですが、
自作したほうがいいですか?
それとも既にライブラリが存在し、それ使った方がいいですか?
561
名前:
デフォルトの名無しさん
:01/09/29 18:28
C++で動的配列を作りたいのですが、new [ ] で作成した配列
のサイズをあとで変更するにはどうすればいいですか?
int *a = new int[100]; /* とりあえず100確保 */
...途中でサイズを50にしたい
delete a[ ];
562
名前:
デフォルトの名無しさん
:01/09/29 18:31
STLのVector使え。
563
名前:
デフォルトの名無しさん
:01/09/29 18:33
>>561
realloc
564
名前:
デフォルトの名無しさん
:01/09/29 18:40
>>563
newしたやつにreallocするのは止めろ。
ビットコピーされたらどうするつもりだ?
565
名前:
デフォルトの名無しさん
:01/09/29 18:44
>>563
バカ?
素直にmalloc使えよ
566
名前:
デフォルトの名無しさん
:01/09/29 18:46
s/
>>563
/
>>564
/
567
名前:
デフォルトの名無しさん
:01/09/29 20:16
>>561
#include <vector>
void foo(void)
{
vector<int> a(100);
a.resize(50);
//delete不要
}
568
名前:
561
:01/09/29 20:49
eMbedded Visual C++ なので、STL 使えないのです…
realloc 使うことにします。
569
名前:
デフォルトの名無しさん
:01/09/29 20:49
>>561
小さくするだけなら、そのままにしとけ。
570
名前:
sage
:01/09/29 22:15
VCスレに行った方がいいかもね。
STLportとか、つかえねーのかな。
571
名前:
デフォルトの名無しさん
:01/09/29 22:57
おはようございますよろしくお願いします。
えーっと、APIでまずは自分用のテキストエディタを
作成しようと思っているところです。
今はメモ帳がエディタ代わりです。
検索をいちいちダイアログで出すのは面倒なので、
まずデフォルトで検索窓の付いたものを作ります。
当初CreateWindowまたはExで(検索入力用の)エディットボックスを作り、
貼り付けて・・・と構想していました。すると、多分カーソルの
位置とか反転、カーソルの移動・・とかいちいち構造体を調べて・・
と、なにかと面倒そうだ、と思っていましたところ、FindTextと
ReplaceTextっていうのを発見しました。多分構造体が設定されていて
その面倒くささをやってくれるんですよね?っていうか、題意がそれてるんです
けど、
FindTextたちを使わず敢えて自前で組むのと、利用するのでは、
計算効率は違うのでしょうか、僅かでも。
貧乏性な上に、メモリ不足でカリカリいうといつもびくびくしてしまう
性分なので、メモリを食わない路線で処理の最適化を徹底したいと思っとります。
おしえてクダサイ。
572
名前:
デフォルトの名無しさん
:01/09/29 23:01
ねえ、new使うときって
int *a=new int;
より
auto_ptr<int> a;
a=new int;
のほうがいいの?
573
名前:
デフォルトの名無しさん
:01/09/29 23:06
>>571
2行目まで読んだ。
フリーのテキストエディタを探してきて使え。
そしてプログラム書くの止めるか、本買って勉強しなおせ。
574
名前:
デフォルトの名無しさん
:01/09/29 23:09
>>572
別にいいってことはない。
auto_ptrを使った変数などを関数に渡すときに
どういう動作するか考えるとうかつに使うのは
止めた方がいい。
auto_ptrの使い方としては、例外処理が起こって
途中でリターンしなくてはいけなかったりするときに、
開放の処理をやるのが困難な場合など。
あと、一般的にはコレクション系かしら。
575
名前:
デフォルトの名無しさん
:01/09/29 23:10
ダメ雄に言われたくない
>>573
576
名前:
デフォルトの名無しさん
:01/09/29 23:10
自分で書くんだったら、良く書けば効率は良くなるし、
クソに書けばクソになる。
既存APIは中がどうなってるのか知らんから一概に比較はできんが、
いいアルゴリズムで書けるなら書いてもいいんじゃないの?
577
名前:
デフォルトの名無しさん
:01/09/29 23:11
>>576
は
>>571
へのレスね。
578
名前:
デフォルトの名無しさん
:01/09/29 23:11
>>571
ここはC++のスレだぞ。APIについては他所でやれよ。
ついでにいっとけばエディタを作るのにWindowsのEditBox使うのは止めろ。
579
名前:
デフォルトの名無しさん
:01/09/29 23:13
>>574
コンポジションを使う場合にも、メンバ変数も auto_ptr で持つかな。
直接
struct Foo
{
X x;
};
と書いてしまうと、このヘッダをコンパイルするためだけにクラス X のヘッダを
include する必要が出てきてしまうので。
580
名前:
デフォルトの名無しさん
:01/09/29 23:14
コモンダイアログを使うと、
どのみちHWND型だから使うメモリはCreateWindowと
変わらないだろうけど、代入演算が余計に起こって
処理が最適ではなくなってしまうことを心配している者です。
581
名前:
デフォルトの名無しさん
:01/09/29 23:14
>578
なじぇ?
582
名前:
デフォルトの名無しさん
:01/09/29 23:15
>>579
includeしたくないだけにauto_ptr使うか?
そんなこと言ったら
struct Hoge {
auto_ptr<string*> m_str;
}
か?
583
名前:
デフォルトの名無しさん
:01/09/29 23:22
>>581
EditBoxを使った時点でメモ帳以上の物ができないことが保証されるから。
584
名前:
デフォルトの名無しさん
:01/09/29 23:23
>>579
Fooの定義の前に
class X;
と書いとくだけで大丈夫だと思うが?
585
名前:
デフォルトの名無しさん
:01/09/29 23:35
>>584
いや、それじゃだめでしょ。
586
名前:
デフォルトの名無しさん
:01/09/29 23:37
全然知りません
587
名前:
デフォルトの名無しさん
:01/09/29 23:45
>583
では何を使えば?
588
名前:
デフォルトの名無しさん
:01/09/29 23:51
Win98のメモ帳はなぜ大きいファイルを開けないのですか?
エディタソフトハウスから賄賂もらってるから?
589
名前:
デフォルトの名無しさん
:01/09/29 23:54
>588
char[固定]だからです
590
名前:
デフォルトの名無しさん
:01/09/29 23:56
>>588
MSDN読め。
591
名前:
デフォルトの名無しさん
:01/09/29 23:58
>>588
仕様です
592
名前:
デフォルトの名無しさん
:01/09/29 23:59
>>589
それが真実ならマイクロソフトさんって思ったより知能低いですね
速答ありがとうございます
593
名前:
デフォルトの名無しさん
:01/09/29 23:59
>>587
自分で作るか他のエディトコンポーネントを探すか
594
名前:
デフォルトの名無しさん
:01/09/30 00:01
>>582
ヘッダファイルの相互依存関係は、ちょっとソフトウェアの規模が大きくなると
辛いです。一つのヘッダを修正するだけで、ほとんどすべてのソースを再コン
パイルすることになりかねません。
標準ライブラリのヘッダは原則として修正しませんから、さすがにメンバ変数
とはいえ参照やポインタにはしません。
>>584
いや class X の「サイズ」が決まらないと class X をメンバとして持つクラスの
「サイズ」も決まらないので、ダメです。
595
名前:
デフォルトの名無しさん
:01/09/30 00:01
>593
自分で作るって、どういうことですか?CreateWindowの引数でどうにかできるのですか?
596
名前:
デフォルトの名無しさん
:01/09/30 00:04
>595
悪い事いわんから開発やめとけ。
597
名前:
デフォルトの名無しさん
:01/09/30 00:11
>>595
ネタとマジレスの区別も付かない、自分で一切調べないような奴には
一生かかっても無理だ。
598
名前:
デフォルトの名無しさん
:01/09/30 00:34
>>592
っていうか、「メモ帳」だぞ。
そんなおっきいファイル開く方が間違ってるYO。
エディタじゃねーよ。メモって意味考えろ。
599
名前:
:01/09/30 00:49
CEditView(ファイルサイズ64Kまで)かCRichEditViewつかいませう。
CRichEditViewで挫折したらまた質問下さい。
600
名前:
デフォルトの名無しさん
:01/09/30 01:05
リッチエディットをエディタに使うバカはいません。
601
名前:
デフォルトの名無しさん
:01/09/30 02:06
>>600
はあ? じゃあ何使うっつうの?
602
名前:
:01/09/30 02:08
64K以下ならCEditView,64K以上ならCRichEditView。
これ常識。
603
名前:
デフォルトの名無しさん
:01/09/30 02:19
普通のEDIT→メモ帳
リッチエディット→ワードパッド
になるぞ?
604
名前:
デフォルトの名無しさん
:01/09/30 02:22
っていうか本気で作るんだったら、
MFCのクラスなんか使わないでしょ。普通。
でも、元ねたが「メモ帳のかわり」とか言ってるから、
りっちえでぃっとでいいんじゃないかい?
605
名前:
デフォルトの名無しさん
:01/09/30 02:22
良く判らんが、単独で使いたいんじゃなくて、プログラムに
組みこむ形で使いたいんなら
>>602
で合ってる。
606
名前:
デフォルトの名無しさん
:01/09/30 02:36
>>605
俺もそう思う。胴衣
607
名前:
デフォルトの名無しさん
:01/09/30 02:38
>っていうか本気で作るんだったら
>MFCのクラスなんか使わないでしょ。普通。
さすがにそれは普通じゃないと思われ。
608
名前:
デフォルトの名無しさん
:01/09/30 04:11
>>604
MFC使わないやつは
1 完全にオリジナルのUIを構築するやつ(移植性とかなんとか
2 アンチMFC
3 MFCが分からないやつ
で、比率で言えば、1:10:89こんなものかな
609
名前:
デフォルトの名無しさん
:01/09/30 04:43
>>608
604は「エディタのビューとして」の話だと思う所存。
エディタのビューとしてCEditやCRitchEditを使う奴はDQNだと思うナリよ
610
名前:
デフォルトの名無しさん
:01/09/30 04:58
MFC相談室になっているゆえ、Qt使えとか言ってみる。
.
>>609
MVCの話なら歓迎〜。
611
名前:
デフォルトの名無しさん
:01/09/30 05:03
メーラーとかの編集窓でRicheditは多いと思うが
612
名前:
デフォルトの名無しさん
:01/09/30 08:16
Win2000ならメモ帳のサイズ制限はないよ。
613
名前:
デフォルトの名無しさん
:01/09/30 08:17
>>611
俺の知る限りはAL-Mailぐらいだな。
614
名前:
デフォルトの名無しさん
:01/09/30 09:17
>>611
メーラーなんかプレーンテキストで十分だ。
よってCEditで十分だと思うが、どうか?
>>608
禿同。
615
名前:
デフォルトの名無しさん
:01/09/30 09:30
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
ruby撲滅スレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=1001125342
616
名前:
デフォルトの名無しさん
:01/09/30 10:30
RichEditなんて遅くて重いの使ってられるかよ。
つーかエディタを作るってのはエディトコントロールを自分で作るって事じゃないの?
そこがエディタの命なんだからさ。
秀丸がリッチエディット使ってたら誰も買わないだろ。
617
名前:
デフォルトの名無しさん
:01/09/30 10:55
すいません、vector< vector<int> > a;で、
stringのc_str()みたいに配列全体を得たいのですが、どのメソッドを使えばよいのでしょう。
618
名前:
デフォルトの名無しさん
:01/09/30 11:56
vector<>::begin
619
名前:
デフォルトの名無しさん
:01/09/30 11:57
>618
ありがとうございました。
620
名前:
デフォルトの名無しさん
:01/09/30 13:08
>>616
エディタだけ組みこんだソフトなんか誰が作るかよ 阿呆。
621
名前:
デフォルトの名無しさん
:01/09/30 13:16
>>612
こいつも阿呆だな。
622
名前:
デフォルトの名無しさん
:01/09/30 13:30
>>621
氏ね。
>>612
は正しい。
623
名前:
デフォルトの名無しさん
:01/09/30 13:32
>>620
いや、エディタの話をしてたんじゃないのか?
624
名前:
デフォルトの名無しさん
:01/09/30 14:16
>>622
ソフトウエア版行けや。
ライブラリではCEditViewのサイズはshortで定義されてるから駄目。
WIN2000のメモ帖とか言ってるのはPC厨房。
625
名前:
デフォルトの名無しさん
:01/09/30 14:19
>>624
帖って間違ってるYO
626
名前:
デフォルトの名無しさん
:01/09/30 23:57
VC++で
int a[100];
b=99;
cout<<a[b++];
ってやると、エラーになります?
627
名前:
デフォルトの名無しさん
:01/10/01 00:03
>>626
試したら?
628
名前:
デフォルトの名無しさん
:01/10/01 00:04
いいね
629
名前:
デフォルトの名無しさん
:01/10/01 00:14
何でエラーになるんだ??
630
名前:
626
:01/10/01 00:27
勘違いでした
631
名前:
デフォルトの名無しさん
:01/10/01 01:06
/*
if(typeid(*temp)==typeid(A)){
((A*)temp)->methodA();
}else if(typeid(*temp)==typeid(B)){
((B*)temp)->methodB();
}
*/
pa = dynamic_cast<A *> (temp);
if(pa){
pa ->methodA();}
else{
pb= dynamic_cast<B *> (temp);
if(pb){
pb->methodB();
}else{
}
}
632
名前:
デフォルトの名無しさん
:01/10/01 01:07
すいませんが
RTTIがよくわかりません
これで実行しても、実行中にエラーになってしまいます
633
名前:
デフォルトの名無しさん
:01/10/01 01:29
VC++ってRTTI使えなみたいです
サンプルプログラムも実行時エラーがでます
634
名前:
デフォルトの名無しさん
:01/10/01 01:33
>>624
MFCはそうだろうが、NT系のエディットコントロールにサイズ制限がないのは常識だろ?
635
名前:
デフォルトの名無しさん
:01/10/01 02:02
>632
>633
プロジェクト-->設定-->C/C++Tab-->カテゴリ:C++言語-->RTTIを有効にする
をチェック済みかい?
もしかしたらPro 以上じゃないと駄目かも。
636
名前:
デフォルトの名無しさん
:01/10/01 02:11
>>635
できましたー(涙)
ありがとうございます
とりあえず、私はProを使ってますから
standardの方ではちょっとわかりませんが・・・
はまりますねコレは
ホントに助かりました
637
名前:
デフォルトの名無しさん
:01/10/01 06:53
>>624
勝手にMFCと決めつけるなよ。
638
名前:
デフォルトの名無しさん
:01/10/01 06:58
dynamic cast も RTTI 必要ですか? >VC
639
名前:
デフォルトの名無しさん
:01/10/01 07:07
>>638
いぇす
640
名前:
デフォルトの名無しさん
:01/10/01 07:22
>>639
ありがとうございます
# gcc はデフォルトでオンだったような
641
名前:
デフォルトの名無しさん
:01/10/01 13:48
aString == bString (in Java)
は Deep comparison ですか?
それとも Shallow Comparison ですか?
分かる人教えて・・・
642
名前:
641
:01/10/01 13:50
あ、C++のスレだった。間違えました、鬱だ。
でも、分かる人いたら教えてください。悩んでるんです。
643
名前:
デフォルトの名無しさん
:01/10/01 18:26
>>641-642
悩んでる時間があるなら、
ちょろっとコード書いて自分で試せば?
644
名前:
641
:01/10/01 20:27
>>643
どうやって試すの?
645
名前:
デフォルトの名無しさん
:01/10/01 20:34
たった2時間しか考えないで他人に聞くなよ。
頭は帽子を置く台じゃないんだから。
646
名前:
デフォルトの名無しさん
:01/10/01 20:47
頭はかつらをかぶせる台じゃないんだから。
647
名前:
デフォルトの名無しさん
:01/10/02 00:48
つーか、ポインタもわからないのに
Deep comparisonみたいな単語だけは知ってる
Javaはホントはすごいんだけど、馬鹿が使うから馬鹿にされるんだって
648
名前:
デフォルトの名無しさん
:01/10/02 00:49
C言語よりエレガントにバイナリーエディターを作れますか?
649
名前:
デフォルトの名無しさん
:01/10/02 09:43
>>648
C言語でエレガントに作れるものなんかあるのかよ。
エレガントだと思いこんでいる連中はいるようだが…。
650
名前:
641
:01/10/02 10:19
>>647
相談スレだから、書いてみたんだけど・・・やっぱ
ダメだった??
= がShallowって言うのは分かるんだけど、
== がDeepなのかShallowなのか分からない・・
651
名前:
641
:01/10/02 10:26
JAVAスレがありました。ごめんなさい。
652
名前:
デフォルトの名無しさん
:01/10/02 21:21
C++のポインタを使った表記が醜いので
# foo->bar.bazとか
可能な限り参照を使ってみたいのですが
# foo.bar.bazみたいに
何か問題ありますか?
653
名前:
デフォルトの名無しさん
:01/10/02 21:28
使えば?
654
名前:
デフォルトの名無しさん
:01/10/02 22:24
>>652
とりあえずリンクトリストでスタック作ってみそ
655
名前:
デフォルトの名無しさん
:01/10/02 22:24
>>652
問題ないよ。
656
名前:
デフォルトの名無しさん
:01/10/02 22:25
ただ . 演算子が4つくらい並んでいたら、
こいつ大丈夫か?と疑いはじめるだろう。
657
名前:
デフォルトの名無しさん
:01/10/02 23:06
>>652
参照にしたところで、醜いもんは醜いんだよ。
設計がおかしいんじゃねぇの?
658
名前:
デフォルトの名無しさん
:01/10/03 14:43
>>654
stack<CFoo> s;
s.push(CFoo(1));
s.push(CFoo(2));
s.top().bar.baz;
659
名前:
デフォルトの名無しさん
:01/10/03 14:50
>>657
参照はポインタより制限がきつい。
無制限に使えるポインタでなければ組めないとき、
なぜその制限内に収まらないのか検討する余地がある。
参照すらいらないのにポインタを使う奴もいる。
制限の緩い機能を使うときは、強力であるが故に慎重さが欲しい。
とりあえずポインタより参照を優先するという方法は
それなりに有効だよ。
660
名前:
654
:01/10/04 00:16
>>658
STLのstackはデフォルトではリスト使ってないだろうと思い、
ソース読もうとして挫折。
オペレーターオーバーロードされると訳わからん
Javaに還ろ〜っと。
>>659
最初は参照で組む => 後にポインターに変更 => ->を.に置換しまくる。
つーことが良くあります。
661
名前:
デフォルトの名無しさん
:01/10/04 00:26
>>660
それはスキルが低すぎるからだもー。
662
名前:
デフォルトの名無しさん
:01/10/04 00:30
->を無条件に"."に置き換えても
構文的に曖昧になるケースなんてないんだから
全部"."にしちゃえば良かったのに。
まあドキュソ言語だからしゃあねえか>C/C++
663
名前:
デフォルトの名無しさん
:01/10/04 00:43
>>662
何でそうなってるのか考えてみろよ
664
名前:
デフォルトの名無しさん
:01/10/04 01:09
>>662
いや、"->"と"."は明らかに違うだろ。
ポインタと実体(もしくは参照)が同じように
見えるんだったらかなり重症だぞ。
665
名前:
デフォルトの名無しさん
:01/10/04 01:46
たしかにそもそも用途が違いますよね。
参照/ポインタの使い途を定位置を参照することに限った場合、
>>662
のような意見をもつ人がいるようにも思われ。
そうじゃないだろ? とまぁ、いいたいのですが。
666
名前:
デフォルトの名無しさん
:01/10/04 02:31
スタック上にあるオブジェクトをdeleteしても大丈夫な
様にする事ってできますか?
(スタックならデストラクタだけ呼び出して、開放はしない)
ヒープに置いてあるやつと区別しないで扱いたいんで。
CObject a;
667
名前:
デフォルトの名無しさん
:01/10/04 02:51
スタック上の(未初期化の)メモリに対して placement new を使う。
でも、どっちかというと使い方が間違ってると思う。
668
名前:
デフォルトの名無しさん
:01/10/04 07:16
>>662
その話題、別のスレッドでも出てたな。
C だと . と -> はまとめられるけど、ハードウェアに近い階層のプログラムを組む
場合には、ポインタとスタック上の変数を文法上も区別しておいた方がいいと思う。
演算子をまとめて、バグを入れやすくなったら本末転倒だし(ただでさえバグを作
やすい言語なんだから)。
あと C++ に関しては operator->() がないとスマートポインタ実装できないから嫌
です。
669
名前:
デフォルトの名無しさん
:01/10/05 03:17
コンパイラ標準のSTLじゃなくて、SGI STLとかSTLport
とか使ってる人いる?マルチプラットフォームなコードで
統一しようかと思ってるんだけど。
SGI STLってなんかコンテナの種類とか増えてるね。
hash_mapとか。
670
名前:
sage
:01/10/05 07:25
STLportばりばり使ってるよ
671
名前:
デフォルトの名無しさん
:01/10/05 11:58
>>668
> ポインタとスタック上の変数を
という用語はどうかと思うが、
> 文法上も区別しておいた方がいいと思う。
は同意。char **argvとchar *argv[]を混乱する厨房を見るにつけ
672
名前:
デフォルトの名無しさん
:01/10/05 11:59
あ、[]のdouble meaningのことね。
673
名前:
デフォルトの名無しさん
:01/10/05 12:58
STLPort使ってるよ。
バイナリがでかくなるのを除けばVC付属のよりいいんで。
ただ、コンパイラ付属のと切り替えたいときもあるんだけど、
何を#defineすれば良いのかわかんないけど。
だれかしらない?
674
名前:
デフォルトの名無しさん
:01/10/05 16:15
>>673
同一プロジェクト内だと無理だろ。
別プロジェクトで、ということなら、単にインクルードディレクトリの優先度を変えればできるっしょ。
675
名前:
669
:01/10/05 17:24
STLport使ってる人、実際どう?
コンパイルが面倒とか特殊な書き方しないとだめとか
環境によって駄目とかある?
うちはWin, Mac, Linux全部やってるから出来れば
統一したいんだよね。
676
名前:
673
:01/10/05 17:46
>>674
ああ、同一プロジェクトでは統一しますが、
コードがでかいと困るときに標準を使いたいんですよ。
ただ、環境変数で一度に設定してるから優先度いじるの面倒なんで。
>>675
コンパイルが面倒も何も、VC/BCCではmake一発でとおります。
BCCは知らないけど、VCのものよりはパフォーマンスが良いです
VC使う上での注意は、必ずマルチスレッドライブラリをリンクする
必要があるということだけかな。
677
名前:
デフォルトの名無しさん
:01/10/06 01:34
ねぇねぇ、
基底クラスのデストラクタを書いてなくて、
基底クラスでdeleteすると派生クラスの
デストラクタが呼ばれないって知ってた?
678
名前:
669
:01/10/06 01:37
>>676
そっか、特に何にもしなくてもmakeでビルドできるのか。それはナイス。
VCでマルチスレッドライブラリリンクしてシングルCPUなマシンで
動かすと若干遅くない?必ずスレッドセーフなライブラリを使わないと
だめだとするとちょっと問題になりそうな気がするが。
Mac、Linuxで使ってる人が居たら状況キボン。
679
名前:
デフォルトの名無しさん
:01/10/06 02:41
>>677
当たり前だろ。仮想デストラクタにならないんだから
680
名前:
デフォルトの名無しさん
:01/10/06 08:24
>>679
当たり前だが、初心者がはまりやすい落とし穴ではあるな。
>>677
C++ はいろいろ過去を引きずっている影響で、いたるところに落とし穴がある仕
様になってる。痛い思いをしたくなければ Effective C++, More Effective C++
という書籍を買ってきて読んでおきましょう。
681
名前:
sage
:01/10/06 10:15
>>678
実際に自分の書いてるコードで置き換えてみて
評価すればよいよ。
682
名前:
デフォルトの名無しさん
:01/10/06 13:14
>>678
実際に計って速度に問題があればつかわんでいーだろ。
アプリケーション系で応答速度が要求されるような場合、
マルチスレッド化は当たり前のような気がする。
どうしても多重化出来ない場面でかつ、
スループットしか見ないのであれば、微妙な速度差にも
こだわってもいいけどね。
MTスレじゃないからsage
683
名前:
デフォルトの名無しさん
:01/10/06 23:38
>>681
>>682
ごもっとも。なのでsage
684
名前:
思いつき
:01/10/07 01:51
foo->bar->baz = 0
を
using foo->bar
baz = 0
と書けると嬉しくない?
685
名前:
デフォルトの名無しさん
:01/10/07 02:04
>>684
全然嬉しくない。
入れ子にできないジャン!
686
名前:
デフォルトの名無しさん
:01/10/07 02:11
>>685
別に常に使わなくてもいいわけだし。
C++Builderでは便利かもね。
687
名前:
デフォルトの名無しさん
:01/10/07 08:47
>>684
with( foo->bar ){
baz = 0;
}
の方が他の言語で慣れてるので嬉しいかも。
688
名前:
デフォルトの名無しさん
:01/10/07 20:22
typeof_foo_bar &bar = foo->bar;
bar->baz=0;
このくらいで我慢し説け
689
名前:
デフォルトの名無しさん
:01/10/07 21:02
>>684
typeof_baz& baz=foo->bar->baz;
baz=0;
できるよ?なんか文句ある?
690
名前:
デフォルトの名無しさん
:01/10/07 21:09
それだとbaz以外のメンバがいじれなくていやな感じ
691
名前:
689
:01/10/07 21:14
>>690
↓で我慢しとけ。この程度の小石につまづいているようではX
>>688
692
名前:
デフォルトの名無しさん
:01/10/07 23:38
メンバ関数用意すれば?
せっかくC++なんだしさ。
693
名前:
デフォルトの名無しさん
:01/10/08 19:16
メンバ変数にアクセスするインターフェイスをつくるとき、
名前ってどう付けてる?
class Mona {
public:
int giko;
だとして、
・void SetGiko(int);とint GetGiko(void);
・int& Giko(void);
なんかが考えられるけど。
694
名前:
デフォルトの名無しさん
:01/10/08 19:17
void Giko(int value);
int Giko(void);
695
名前:
デフォルトの名無しさん
:01/10/08 19:19
後者は
const int& Giko() const;
だろ。Monaがconstになった途端アクセスできなくなるぞ。
それにその方法だと、結局もう一個
int& Giko();
を用意することになる。
696
名前:
デフォルトの名無しさん
:01/10/08 20:03
>>694
>>695
うん、要するに聞きたいのはSet〜とGet〜っていう命名は良くないのかな
って事なのだ。個人的には悪くないと思うんだけど、オブジェクトとして
考えた時はちょっとおかしいかなと感じるんで。周りには良くないって言う
人も居る。
constに関してはその通りだね。スマソ。
697
名前:
694
:01/10/08 20:12
C#なんかの最近の言語ではset/getメソッドを
隠蔽するプロパティという表現が文法に組み込まれていて
とても有用なのでおかしくは無いよ。
ただ、C++では確かに一般的ではないので
コーディング規約としてきっちり確立することが
出来ないのであればやめといたほうがいいかもよ。
規約
名詞=プロパティ Count()
動詞=メソッド Clear()
698
名前:
デフォルトの名無しさん
:01/10/08 20:31
>>697
うん?ちょっと確認なんだけど、漏れが言いたいのは
Get/Setという命名は悪くないがオブジェクトとして見ると
オブジェクトのメソッドとしてGet/Setのような名前がついて
いるのは違和感がある
って事ね。せっかくカプセル化してるのにそのオブジェクトが
どんなメンバ変数を持っているのか外が知らないといけない
のは変だと思うわけ。
で、
>>697
が「おかしくは無いよ」と言っているのはどっちの表現
方法に対してのこと?それと、最後の規約の部分の文章は
・そのクラスのプロパティに関しては名詞の名前を付ける
例:Count()
・メソッドに関しては動詞の名前を付ける
例:Clear()
という読み方であってる?
699
名前:
697
:01/10/08 20:56
>せっかくカプセル化してるのにそのオブジェクトが
>どんなメンバ変数を持っているのか外が知らないといけない
>のは変だと思うわけ。
それは命名の良し悪しとは別の問題だよ。
メソッド経由で公開するという意味ではGetGiko()もGiko()も変わらない。
理想は全部privateにして自前で処理することだけど、
そうするとクラスが肥大化したり、メソッドの引数がやたらと
多くなってくる。
# 試しにfriend/get/set一切使わないコードを書いてみるべし
なので変数(=アクセスメソッド)を公開することでコードが
簡潔(というと語弊があるが)になるならそれを避けるべきではないと思う。
おかしくないというのはCount() という表現の事。
他言語からの借用なので積極的に推すつもりは無いけど。
規約の方はその通り。
700
名前:
デフォルトの名無しさん
:01/10/08 21:01
int **p;
p = new int [x][y];
って間違ってます?
検索しても、出てきませんでした・・・
まじ質問です。
701
名前:
700
:01/10/08 21:02
sageてしまった・・・
age
702
名前:
デフォルトの名無しさん
:01/10/08 21:05
>>700
C++の質問じゃねーだろ。くだらねー質問スレへ逝け。
それにそのコード間違ってる。
703
名前:
700
:01/10/08 21:08
>>702
newの使い方なのでC++だと思ったんですが・・・
逝ってきます・・・
704
名前:
デフォルトの名無しさん
:01/10/08 21:11
>>699
ふむ。結局、Get/Setという文字列がどうこうじゃなくて、
意味的におかしくないならGetやSetが付いた命名もあり
って事なのかな。
全部自前処理が絶対に良いとは言えないのは分かるよ。
設計が悪いと言われそうだけど、friend使わないとどうしても
見通しが悪くなることはあるよね。
規約のほうは参考にしてみる。これはこれで統一されてると
思うから、うまく命名すれば使えると思う。
705
名前:
デフォルトの名無しさん
:01/10/08 21:13
>>703
newの使い方の問題なのか?それ以前にポインタを復習すれ。
706
名前:
デフォルトの名無しさん
:01/10/08 21:17
>>705
ってことは、
int **p;
*p = new int* [x];
for( i = 0; i < x; i++ )
p[i] = new int [y];
ってことですか?
まとめて確保してくれると思ってました・・・
707
名前:
700
:01/10/08 21:22
>>706
まちがいっす・・・
>*p = new int* [x];
p = new int* [x];
708
名前:
デフォルトの名無しさん
:01/10/08 21:22
多次元配列を扱うコンテナをもってきて
array2<int> *p = new array2<int>(x,y);
みたいにしとけば?
stlで近いことが出来た気もする。
709
名前:
デフォルトの名無しさん
:01/10/08 21:25
>>706
710
名前:
STLマンセー
:01/10/08 21:27
typedef std::vector< std::vector< int > > Aryary;
Aryary p;
p.resize(x);
for( Aryary::iterator it=p.begin(); it!=p.end(); ++it)
it->resize(y);
711
名前:
700
:01/10/08 21:29
>>708
>>710
おお・・なるほど・・・
参考にさせていただきます
ご教授ありがとうございますm(_ _)m
712
名前:
デフォルトの名無しさん
:01/10/08 21:31
>>709
スマソ。操作ミス。
>>706
それでもいいが、newをループさせるよりはこの方がいいだろ。
int **p;
p = new int* [y];
int *x = p[0] = new int* [y*x];
for(int i=1; i<y; i++)
p[i] = &x[i*x];
これだと配列のもち方が[y][x]になるところに注意。
っていうかこれこそC++に関係ないからsage
713
名前:
デフォルトの名無しさん
:01/10/08 21:33
つーか本当に任意にサイズの二次元配列確保しなきゃならないのか?
x,yは両方とも変数で無いと駄目?
714
名前:
712
:01/10/08 21:35
STLをつかう方法もいいが、速度が要求されるか、
配列が大きいなら
>>712
の方法にしとけ。
715
名前:
デフォルトの名無しさん
:01/10/08 21:40
>>712
を自分用コンテナにして使い回すのがよさげ
716
名前:
デフォルトの名無しさん
:01/10/09 18:23
単なるコレクションを返したいのですが、
どのような形で返すのが良いでしょうか?
717
名前:
デフォルトの名無しさん
:01/10/09 19:09
互いに関連(相手へのポインタ)をもつオブジェクトで
なおかつそのオブジェクト同士の関連の仕方が全くの任意である場合、
その関連の仕方をデータに保存するにはどのような方法があるのでしょうか?
私が思いついたのは、全てのオブジェクトを適当に順序づけて一元に保存し、
その後、その順番を元に関連の有るオブジェクト同士の番号を別途保存する
方法なのですが、所詮素人考え、どうにも二度手間で、泥臭く感じてしまうんです。
よくありそうな処理の割に良い方法が、思いつきません。
なにかスマートな方法があったら教えて下さいませ。
718
名前:
デフォルトの名無しさん
:01/10/09 19:34
外部シンボル’〜’が未解決っていうエラーがでたらどう解決したらいいんですか?
719
名前:
デフォルトの名無しさん
:01/10/09 20:12
>>717
説明読んだだけでは何がしたいのか良くわからんけど、
一度「デザインパターン」で検索して勉強してみることを強くお勧めする。
多分解決する。
720
名前:
717
:01/10/09 20:49
>>719
トホホホホ、GoF本持ってる漏れは逝ってよしということですか?
___ ___ ___
| YES | ΛΛ. | YES | ΛΛ |GoFi | ΛΛ
〃 ̄ ̄∩ ゚Д゚) 〃 ̄ ̄∩ ゚Д゚) 〃 ̄ ̄∩ ゚Д゚) GoForIt!
ヾ. ) ヾ. ) ヾ. )
オブジェクトと書きましたが、実際はクラスと言うより、ほとんど構造体なので、
データの持たせ方がまずいっぽいです。むーん良いの思いつかねぇ。ムキョー
721
名前:
デフォルトの名無しさん
:01/10/09 21:15
>>720
サンプル書いてみ?
722
名前:
sage
:01/10/09 22:32
>>716
イテレータ
723
名前:
sage
:01/10/09 22:48
>>717
かっこわるいけど
class Serializer {
static size_t seed = 0;
size_t serial;
public:
Serializer() { serial=seed++; } // 場合によってはmutexで保護ね
size_t Serial() const { return serial; }
void ResetSerial(size_t n); { seed = n; }
};
をそいつらのメンバに加えときなさい。
724
名前:
716
:01/10/10 00:45
>>722
どもです。やはり
const vector<type>&
とか
const type*
を返すのはダサいでしょうか?
725
名前:
デフォルトの名無しさん
:01/10/10 00:52
>>724
いやべつにいいんでない?
726
名前:
デフォルトの名無しさん
:01/10/10 00:56
ダサイよ
Delphi使いな
727
名前:
デフォルトの名無しさん
:01/10/10 01:12
>726
よくわかっているじゃない。
728
名前:
デフォルトの名無しさん
:01/10/10 01:29
つまり、
>>727
は、
「ダサいよ、Delphi使い。な?」
と読んだってわけか。
729
名前:
デフォルトの名無しさん
:01/10/10 01:51
「ダサイよ」Delphiのルビかと思った。
Del厨って全角英数好きなのか?
730
名前:
デフォルトの名無しさん
:01/10/10 02:29
STLのmapやsetは、マルチスレッド環境下でも排他制御なしに使えますか?
(map/setの内部にロック機構を持っていますかという意味です)
よろしくお願いします。
731
名前:
デフォルトの名無しさん
:01/10/10 03:09
>>730
STLportはスレッドセーフになってるらしいけど、
VC++とかGCCの純正(?)STLはどうなんだろうね?
732
名前:
デフォルトの名無しさん
:01/10/10 04:43
>>730
実装によります。
733
名前:
デフォルトの名無しさん
:01/10/10 14:22
>>714
STL使っても速度は変わらないと思ふ
734
名前:
デフォルトの名無しさん
:01/10/10 14:33
>>733
ふつうに使う分にはかわらないね。
でも、マイクロセカンド単位で処理速度を追求する人もいるので
735
名前:
デフォルトの名無しさん
:01/10/10 15:57
>>734
μ単位ならアセンブラ使えよ
ミリ単位ならまだ分かるが
736
名前:
717
:01/10/10 17:27
>>723
なるほど、各オブジェクトにユニークな識別子をつける、と
ありがとうございます。こいつで色々試してみます。
>>721
というわけですいませんです。
レスありがとうございました。
737
名前:
デフォルトの名無しさん
:01/10/12 17:58
画像処理ルーチンなんですが、template<class T>とした時、
Tの最大ビット定数を得る方法ってありますか?
例: Class<unsigned char> → 0xFF
Class<unsigned long> → 0xFFFF
ビットシフトに使いたいんですけど。。。
738
名前:
デフォルトの名無しさん
:01/10/12 18:05
template <class T>
T foo() { return T(-1); }
739
名前:
デフォルトの名無しさん
:01/10/12 18:06
>>737
これの動作、コンパイラ依存だったかな?
template<class T>
T MaxVal()
{
T t=0;
t--; //これで0xFFFFになる?(unsigned shortでWIN32の場合)
return t;
}
740
名前:
739
:01/10/12 18:07
う…
741
名前:
デフォルトの名無しさん
:01/10/12 18:43
>>739
>>740
有難うございます。質問の書き込み間違えてしまいました。
最大ビット定数だと
0xFFじゃなくて0xFFFFで,
0xFFFFじゃなくて0xFFFFFFFFですね。
しかし,欲しいのは
unsigned charの時0xFFで,
unsigned longの時0xFFFFなのです。
半分だけ切り出すことって出来ますか?
742
名前:
デフォルトの名無しさん
:01/10/12 18:52
>>741
なんか言ってること変じゃない?
こういうこと?
template <class T>
T foo() { return T(-1) >> (sizeof(T)*8/2); }
ただし 1 byte は 8 bits と仮定。
743
名前:
デフォルトの名無しさん
:01/10/12 19:14
>>742
申し訳ありません。また質問を間違えてしまいました。
逝って良しですね。。。
しかし、望んでいたのはまさに
>>742
のお答えの通りです。
有難うございました。
744
名前:
デフォルトの名無しさん
:01/10/12 23:50
private: staticフィールド初期化するのって
friendな初期化のためだけのクラス作って
staticなインスタンス一個置いとくのが定跡?
745
名前:
デフォルトの名無しさん
:01/10/13 00:00
>>744
は?.cppでconst付きで初期化するのが普通だろ?
なんでsageてんのか知らないけどsageてるからsage。
746
名前:
sage
:01/10/13 08:39
スレ違いならごめんなさい。
C++に洗脳されたプログラマとしては
JavaのStringクラスは許せないです。
なんでStringだけ+と+=演算子が特殊な言語実装になってるの?
747
名前:
デフォルトの名無しさん
:01/10/13 11:06
その頃のJava設計者の心の中は、VBに犯されていたので。
>746
748
名前:
デフォルトの名無しさん
:01/10/13 15:55
c++ってほとんど知らないので、添削してください。
計算機イプシロンを求めるプログラムです。
#include <stdio.h>
template<class type>
type eps( type dummy )
{
type eps, eps1;
eps = 1.0;
eps1 = 1.1;
while( eps1 > 1.0 )
{
eps = eps * 0.5;
eps1 = eps + 1.0;
}
return eps;
}
int main(void)
{
float f;
double d;
printf( "machine float epsilon %.30f\n", eps(f) );
printf( "machine double epsilon %.30f\n", eps(d) );
return 0;
}
http://www.kuzuoka-lab.esys.tsukuba.ac.jp/simulation/kadai98.html
http://lanmaster.sh.inf.shizuoka.ac.jp/~lecture/csprog99/exam2/epsilon/sld002.htm
749
名前:
744>745
:01/10/13 16:03
>は?.cppでconst付きで初期化するのが普通だろ?
書き忘れましたが
staticフィールドをAPIなどを使って初期化する場合です。
750
名前:
745
:01/10/13 16:40
>>749
あーなるほど
staticフィールドを初期化するinit関数を作りたいわけね。
うーん、これだとやっぱりfriendつくるしかないんじゃないの?
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.