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


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

スレを勃てるまでもないC/C++の質問はここで 15



1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
pc12.2ch.net/test/read.cgi/tech/1260842197/
スレを勃てるまでもないC/C++の質問はここで 14
pc12.2ch.net/test/read.cgi/tech/1269273471/

756 名前:746 mailto:sage [2010/06/23(水) 14:01:17 ]
代わりにgdi+になげて何とかしてみましたが,
たまに一般的エラー?をはきます。
fail safeかけて今のところ順調に動いてますが, 不安定なモジュールなのでしょうか.


757 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 14:10:51 ]
>>756
二行目の . が 。になってるYO

758 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:26:15 ]
>>753
世の中夜勤帰りで朝から寝てる人だっているんだよ?
引っ越しの時ちゃんと挨拶行った?
顔合わせたら軽く会話するとかしてちゃんとコンタクト取り続けてる?
日頃からそういうコミニュケーションが取れてればいつ洗濯機を回していいのか
いつ静かにしなければならないのか
迷惑を掛けないように生活出来るはずなんだが

759 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:43:02 ]
>>758
死ね

760 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 01:57:45 ]
VC++2005のMFCについて質問です。
数値(BYTE型)を入力するエディットボックスを使用します。
DELETEキー等でボックス内の値を未入力状態にすると
「0から255までの数値を入力してください」と出るのですが
これを表示させない方法があれば教えていただけますか?

761 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:26:49 ]
>>758
表札すら出してない隣人どもにわざわざ挨拶なんてしない
仮にしたとしても世間話にすらならないので相手の生活は基本推して知るべしだな

762 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 12:29:15 ]
>>760
値のチェックをしなけりゃいい

763 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 00:20:52 ]
>>762
値のチェックを有効にしたままメッセージだけ出さないように
したいんです。
自分で範囲を決める場合(たとえば1から10までを入力可能範囲
にする)ならメッセージだけ回避する方法はわかるのですが、
型の入力範囲(BYTEなら0から255)そのものに対するチェックを
有効にした上でメッセージだけ回避したいのです。

764 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:26:35 ]
>QIODevice::QIODevice() : QObject(*new QIODevicePrivate, 0)
コードを読んでいたらこんなのを見つけたわけですが、
なんでnewの前に *を付けるんですか?



765 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:35:18 ]
newで返ってくるのはポインタ型。 それに*をつけて参照型にしてるだけ。

766 名前:デフォルトの名無しさん [2010/06/27(日) 11:28:46 ]
「初期化子リスト」の読み方ですが、
「しょきかし・りすと」 or 「しょきか・こりすと」
どっちが正しいのでしょうか?

767 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:32:35 ]
>>765
まて、それどうやってdeleteするんだ?

768 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:33:16 ]
>>766
しょきかし・りすと

769 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 11:54:59 ]
>>767
関数内じゃね?
出来るのか出来ても意味あるのか知らんけど。

770 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:07:16 ]
>>769
たしかに、参照で受けたのをdeleteするって変だよね

771 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:08:08 ]
>>767
&つけてdeleteすれば問題はない

772 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:11:17 ]
それは参照の使い方として正しいのか?

773 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:17:22 ]
出来ると思うけどあまりいいコーディングとは思えないな
shared_ptr使うのが吉

774 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 12:40:15 ]
規格上問題はない
まあ生のポインタを保持する時点で気持ち悪いが



775 名前:766 mailto:sage [2010/06/27(日) 14:43:27 ]
>>768
ありがとうございます。

776 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:40:57 ]
pgm画像に空間フィルタをかけて、平滑化を行うプログラムを、C++で書いているのですが、
実行後の出力画像が分身(?)してしまいます。
何が原因なのでしょうか?

ソースファイル、原画像、出力画像はこちら。
www1.axfc.net/uploader/Sc/so/128110.lzh&key=noisy
プログラムはBCC Debeloperで組んでいます。

777 名前:764 mailto:sage [2010/06/27(日) 21:05:04 ]
一応フレームワークのコードなので、
フレームワーク側で何とかしてくれているんじゃないですかね

778 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:14:28 ]
>>776
読み込むときに横方向と縦方向が逆になってると思う

class.cpp
     41         hig=HIG;
     42         for(int i=0;i<hig;i++){
     43                 for(int j=0;j<wid;j++)
     44                         fscanf(fp,"%d",&pix[j][i]);
     45         }
main.cpp
     43         for(int i=0;i<HIG;i++){
     44                 for(int j=0;j<WID;j++){
     45                         fprintf(fp,"%d\n",op[j][i]);
     46                 }
     47         }

779 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:24:03 ]
template<class T>はclass T;と同じニュアンスで書いているのですか?

780 名前:776 mailto:sage [2010/06/27(日) 21:49:53 ]
>>778
解決しました! ご協力感謝いたします。
www1.axfc.net/uploader/Sc/so/128162.pgm&key=noisy

781 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:55:03 ]
List[5][2][20]の配列のi番目をaと置き換えたく
List[i][0]='a';
List[i][1]='a';
としたのですが、「式は変更可能な左辺値である必要があります」と
エラーが出ました。
どうしたらいいですか?



782 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:58:43 ]
>781
i番目がどこなのかさっぱりわかりませぬ。
エラーメッセージの通り、左辺が変更可能では無いのでしょう。

Listはどのように宣言していますか?

783 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:58:57 ]
>>781
要素数が一個足りないような……。

784 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:05:18 ]
なんとなく
strcpy(List[i][0], "a");
とかやりたいのかな、なんて思ったり



785 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:05:25 ]
>>783
×:要素数 ○:添字

786 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:20:05 ]
補足です。
char List[5][2][20] です。

int i;
printf("削除したい番号を入力:");
scanf("%d",&i)
List[i-1][0]='a';
List[i-1][1]='a';

入力した番号の配列を削除するのが目的ですが
置き換えたほうが後に便利なので置き換えたかったのです・・・。


787 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:28:04 ]
List[i-1][0]='a';
List[i-1][1]='a';

の行を、

strcpy(List[i-1][0],"a");
strcpy(List[i-1][1],"a");

に変えればいいと思います。

回答とは関係ないですが、
Listは、「文字列の」2次元配列ってことですか?

788 名前:786 mailto:sage [2010/06/27(日) 22:44:00 ]
>>787
どうもありがとうございます!
成功しました。
えっとちなみにstrcpyを使わない方法はないでしょうか…?

あと自信はないですが、文字列の3次元配列だと思います。

789 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:51:34 ]
string使えばいいと思うよ

790 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 23:15:22 ]
>>788
文字の3次元配列だと思うよ。

strcpy使わないならこんな感じ。
List[i-1][0][0] = 'a';
List[i-1][0][1] = '\0';
List[i-1][1][0] = 'a';
List[i-1][1][1] = '\0';

791 名前:786 mailto:sage [2010/06/28(月) 00:01:38 ]
>>790
成功しました!!!
どうもありがとうございます!!

792 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 06:18:57 ]
ゲーム画面の文字を自動で取得してテキスト化にするには
どうすればいいですか?
というか、可能ですか?

793 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 07:04:16 ]
ゲーム画面を取り込んでOCRにでもかければ?

794 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 10:46:53 ]
>>792
ゲーム毎に対応が異なってくるので、制作者にご相談ください。
相談できないような内容なら、この板のローカルルールに則って然るべくどうぞ。



795 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 22:38:05 ]
>786>790

もう解決したみたいだけど、
>入力した番号の配列を削除するのが目的ですが
配列を削除?ってのがちょっと引っかかる。

ほんとにやりたいのはこれじゃない?
List[i-1][0][0] = '\0'
List[i-1][1][0] = '\0'

796 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 22:45:12 ]
>>795
削除するのをあきらめて置き換えにしてるわけで、空文字列にするのは置き換えのほうに分類されると思う。
ほんとにやりたいのはmemmoveで解決できたんじゃないかな。

797 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:03:02 ]
質問です。
私の環境はVC++2010、2008ですが、C++の言語全体として
答えていただけると幸いです。

enum E
{
E1,
E2,
}:

のようなenumがあったとき、E2 | E1 は、int になるらしいです。
ということは、

E e = E1 | E2;

に警告が出ます。
この辺のenumの取り扱いとして、

1. ビット演算のような用法 ( e = E1 | E2; )
2. まさにenum的な用法 (どれかひとつ)

ざっくりと、2種(または混合)があると思うのですが、この辺、何かしら
指針、指標のようなもの、もしくはベンダからの情報等はあるのでしょうか?

ベンダー依存でもいいので、何かしら情報があれば、よろしくお願いします。

798 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 21:06:56 ]
>>797
enumはフラグじゃないんダナ

799 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 22:14:58 ]
enum E{
 E1 = 0x1,
 E2 = 0x2,
 E3 = E1 | E2
};
または
E e = static_cast<E>( E1 | E2 );
だけどcastするぐらいだったら
int e = E1 | E2;
にして E1、E2もconst int 型にする方が良いと思う。(またはstd::bitset)

E e = E1 | E2;
はgccのc++0xではErrorになる

800 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 23:48:14 ]
>>797
> 1. ビット演算のような用法 ( e = E1 | E2; )

それはない。


801 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 22:21:04 ]
C++では列挙子同士のビット演算の結果を
その列挙型にキャストなしで戻せないからね
ビットフラグを扱う変数は普通の整数型にするしかない

個々のビットフラグをconst intで定義するかenumで定義するかは趣味の領域か

802 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 04:09:20 ]
C++の場合、暗黙のうちに整数型へ昇格されるから各種演算が可能なだけで、
列挙型の演算自体はデフォルトでは定義されないからな。
Cなら列挙型への暗黙の型変換があるから何でもできるが。

803 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 12:16:07 ]
inline関数化して違う型同士のビット演算を弾くべき

804 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 15:38:12 ]
コギレイに static const へ乗数入れる方法教えて。



805 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 17:14:09 ]
いみふ

806 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:16:07 ]
ファクトリでインスタンス生成して複数の他のオブジェクトに所有させるとき
削除の責務を何処に負わせるのが良いでしょうか?

共有してる側に負わせると、共有側それぞれの寿命までキニシナイと行けないようになるし
ファクトリにどんなインスタンスを生成したか記憶させるようにして
動作終了時にごそっと削除させてしまうべきか・・・?

807 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:36:50 ]
よろしい君にshared_ptrを使う権利を与えよう

808 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:39:03 ]
スマポが基本じゃね

809 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 19:03:47 ]
using namespace boost;
bind( CHoge::hoge , this , 50 , _1 , _2 , _3 );

を c++0xでboostを使用せずに記述する方法は無いでしょうか。


810 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:09:57 ]
>>804
staticメソッド作っておいて初期化でそれ使うぐらいしか思いつかん

811 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:10:45 ]
ラムダ関数は使えないのか?

812 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 20:56:51 ]
テンプレートの例題を見ると、変数xとyの値を交換するってのがある
こんなの本当にプログラミングで使うのか?
テンプレートってobject型の代わりに使っているような印象を受けるんだけど

813 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 21:07:19 ]
swapを使うこともない程度のプログラムしか書かないなら、たぶん一生テンプレートの恩恵は理解できない

814 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:19:55 ]
>>811
ヒントありがとうございます

f = [this](int a1,int a2,int a3) -> void { hoge(a1,a2,a3); };
で解決しました( VC10で確認 )
ただ残念な事に gcc4.4 を使用しているので当面は boost::bind の方を使用します。
半年待ちかな




815 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:35:28 ]
配列のバッファオーバーランが生まれてる場所って知る方法ないの?
どっかでぶっ壊れてるんだがまったく特定できん…

816 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:05:03 ]
assert使えばいいじゃない

817 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:48:43 ]
>>815
デバッガにメモリの特定の箇所が変化したら止まる機能があるかもしれないから、
毎回決まった箇所が壊れるなら、それ使えばいい。
VSにはあった。

818 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 09:36:58 ]
>>817
まじで。スレ違いだけど教えてもらっていい?vs2008proで出来る?

819 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 11:17:42 ]
>>818
手元に2008がないから確認できない。
2005proなら、メニューの「デバッグ」→「ブレークポイントの作成」→「新しいデータブレイクポイントの作成」でできる。


820 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 11:38:27 ]
>>819
出来た!ありがとう!

821 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:25:14 ]
>>820
選択できないんだけど、どうすればいい?

822 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:26:34 ]
あ、ごめんデバッグ中にやればいいのか。

823 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:52:44 ]
int/intをやったときに小数点以下が「切り下げ」られるってのは保証されてる?

824 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 23:57:29 ]
うん



825 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 00:18:31 ]
てんきゅー

826 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 00:26:32 ]
>>823
-x/y だと 89 と 99 で結果が異なる CPU もあるんじゃなかったけ?
たしか、89 だと CPU 依存で 99 だと厳密に来ていされていたような気が…
# 完全にうろ覚え


827 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 01:49:05 ]
>>826
つttp://seclan.dll.jp/c99d/c99d05.htm

828 名前:デフォルトの名無しさん [2010/07/03(土) 13:10:28 ]
gcc4.2 mac osx で次のコードがコンパイルできません。不可能なのでしょうか。ご教授下さい。

template< class T >
class A
{
public:
A()
{
std::vector< A< T > > vec;
}
};

829 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:20:08 ]
>>828
vectorのところでA<T>のサイズが決まらないからじゃなイカ?
vector<shared_ptr<A<T>>> vec;
で試すでゲソ

830 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 17:52:30 ]
explicit なんですか、これ?

831 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 18:25:56 ]
暗黙的型変換を抑制するキーワード

832 名前:830 mailto:sage [2010/07/03(土) 19:29:19 ]
>>831
thx

833 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 01:29:47 ]
Windows 7
Borland C++ 5.5.1で、カラー画像を指定した閾値で2値化するプログラムを書きました。

プログラムで処理した画像をout.bmpとして出力しているのですが、
この画像をプログラムを終了させることなく表示する方法はありませんか?

834 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 01:35:46 ]
閉じろ



835 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 07:57:20 ]
>>833
GUIを扱えるように勉強する

system関数等でwindows付属のビューア等を呼び出す

あたりかな


836 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 09:29:48 ]
>>833
C#使え

837 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 03:50:48 ]
system("out.bmp");

838 名前:デフォルトの名無しさん [2010/07/05(月) 14:21:21 ]
出力と入力が決まっていない関数は
f(cin , cout );
って感じの関数を作ればいいですか?
cinとかをfinとかに変えても動作するみたいにできますか?

839 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 14:34:45 ]
Foo f(std::istream& in, std::ostream& out);

840 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 15:04:45 ]
ありがとうございます。

841 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:16:42 ]
ヘッダファイルって何であるんですか?
ヘッダファイルはコンピュータにとって何処が美味しいの

842 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:21:53 ]
ヘッダーはコンパイラのためにあるよ

843 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 23:22:07 ]
>>841
ja.wikipedia.org/wiki/%E3%83%98%E3%83%83%E3%83%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB


844 名前:デフォルトの名無しさん [2010/07/06(火) 06:27:36 ]
vector<クラス*>のobjがあって(* objのイタレータ)->idというint型のメンバがあるのですが
vector<クラス*>の要素数は最大10個で
idは1〜10までの整数で、重複しないようにしたいのです
vector<クラス*>に要素を追加した時にそのidメンバに他のvector<クラス*>の要素が持ってない整数を入れたいです
例えば今要素5個のvctor<クラス*>があったとして前から並べた時にidが3,5,2,6,0のような場合に
6個目のvector<クラス*>を作ってそのidに3,5,2,6,0以外の1〜10の整数のうち一つ(無い値ならなんでも良い)を入れたいのですがどうすれば良いでしょうか?



845 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 07:00:37 ]
vectorじゃなくてmapを使う

846 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 07:04:42 ]
10個程度なら、総当りで使ってない整数を探したらいい

847 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:15:56 ]
>>844
たとえばクラスをFooとする。
Foo *valids[10] = {0};

vector<Foo *> v;
for (int i = 0; i < 10; i++) {
 if (!valids[i]) {
  Foo *foo = new Foo();
  foo->id = i;
  v.push_back(foo);
  valids[i] = foo;
 }
}

848 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:27:05 ]
ユニークな整数のリストを共有して
そこから借りたり返したりする


849 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:07:25 ]
入門Qt4プログラミングで

OvenTimer::OvenTimer(QWidget *parent)
 : QWidget(parent)
{
 //関数の中身
}

という表現があるのですが、
「: QWidget(parent)」の部分は何を意味しているのでしょうか?
OvenTimerクラスはpublicでQWidgetクラスを継承しています

850 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:10:36 ]
>>849
C++の基礎を勉強しなおせ
基底クラスの初期化子


851 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:23:30 ]
>>850
ベースクラスのコンストラクタの引数がポインタなことに違和感があって、
何か意味があるのかなと。。。参照ならしっくりくるんですが。

私に基礎がないからなんですね?頑張って勉強します。

852 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 17:34:22 ]
>>851
がんばれ

853 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:16:47 ]
> ベースクラスのコンストラクタの引数がポインタなことに違和感があって、

なんでだよw そのコンストラクタの引数も単にポインタでしょうにw

854 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 18:50:11 ]
>>853
コピーコンストラクタとかでは参照で受けるようにするのが普通だと思っていて、
そのコンストラクタを呼び出してもいいはずなのに、あえてポインタで受けるコントラクタを用意して
そのコンストラクタを呼び出すのは何か理由があるのかなと思ってしまったんです。

サブクラスのコンストラクタでベースクラスのポインタを受けるのは、
そのベースクラスがisでなくhasな場合もあるだろうし、
あまり違和感を感じないんです^^;

そもそも自身のポインタを受けるコンストラクタって用意するのが普通なんでしょうか。
ってことからわかってない><



855 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:02:51 ]
> そもそも自身のポインタを受けるコンストラクタって用意するのが普通なんでしょうか。

厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
自身のポインタを受けるコンストラクタっていう表現が。
コンストラクタにそのインスタンスのthisポインタを渡すことなどできない(?)し、
コンストラクタの初期化リスト呼び出しが終わったあと、
コンストラクタ本体へ処理が移らないとthisは使えない。

自身のポインタってのがQWidget(parent)に対する、
QWidget *parentのことであるとするなら(多分そのつもりなんだろうけど)、
クラスとインスタンスの違いが分かってない可能性すらある。
分かってるんだとしたら、そういう質問出てこないと思う。

たとえば、古典的なリンクリストを実装しようとしたら、
Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
双方向だとしたらNode::Node(Node *next, Node *prev)ってのがあって不思議じゃない。

GUIのコンポーネント間に親子関係があるとき、
親が子を知っていることにくわえ、
子が親を知っていることもあたりまえによくあること。
だから、OvenTimer(QWidget *parent) みたいにコンストラクタで親オブジェクトを渡す。

コンストラクタだからどうあるべき、ってんじゃなくて、
あくまで用途ありきでオブジェクトやクラスなんかもあるし、
どういうコンストラクタを設けるかも、あくまで用途次第。

> そのコンストラクタを呼び出してもいいはずなのに

つまり、コピーする目的じゃ無いと思われ。

856 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 19:18:13 ]
>>855
ありがとうございます。

>厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
インスタンスの話ではなく、型の話です。ですから this のことはないと思っています。

>Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
リンクのノードならしっくりきます。全然普通です。

>つまり、コピーする目的じゃ無いと思われ。
ということなんですね。よくわかりました。謎が解けました。
自身の(コピーによる)初期化ではなくて、あくまでメンバの一つにそのポインタを格納しているんですね。

そういう想像が直ぐにできなくて、不思議な書き方だなと思ってしまいました。
勉強になりました。ありがとうございました。






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

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

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