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


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

【初心者歓迎】C/C++室 Ver.78【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2012/03/16(金) 19:44:28.87 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
toro.2ch.net/test/read.cgi/tech/1323692486/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

511 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 21:17:40.76 ]
なんで初心者ってGUIから入るんだろうね
正直GUIなんてどうでもいいよな


512 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 21:22:36.10 ]
そりゃGUIアプリを作りたいからだろう

513 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 21:31:17.85 ]
ただ、最初からGUIアプリを作りたいならC/C++を選ぶのは茨の道だよなw

514 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 21:38:55.40 ]
そうか?
VC++ならマウス操作だけで、カッコいいVisualStudioライクのGUIが即できるぞ

515 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 21:46:28.83 ]
>>496 はたぶん C/C++相談室から誘導されてきたんだろうけど
あっちのソースみる限りアルゴリズム自体はそれなりにかけるんじゃないかな

UNIX系で勉強していきなり Windows APIは C++ といってもまったく別言語だよな
大学なんかで習ってるなら Java あたりで GUI 覚えてからの方が普通だしな


516 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 22:05:48.33 ]
>>496 ですけどあの後もいろいろレスいただいたみたいでありがとうございます

>>501-506
タイマーは使ったことないですけど仕組みは何となくわかります
ループ1回分の処理を別関数に分けて
何秒後にその関数を呼び出すように登録するようなライブラリがあるんですよね…
とりあえずもっとクリティカルなところでつまずいてたので…
そこが解決したらタイマーも使ってみることにします

>>507
別にそれでもいいんですけど現状覚えたのがメッセージボックスだけで…
C++相談室の方でさきに質問したら Shell_NotifyIcon を進められたんです
メッセージボックスを2つ出せれば解決しそうなんですけど
入力待ちをブロックせずに2つ出すことってできるんでしょうか…

>>511
人に頼まれたプログラムなのでGUIの方がいいかなと…

あとVCは完全にはじめてですがGUI自体は Java なら軽く AWT 習いました
理解してるわけではないんですがテンプレの処理とどのメソッドにとんでくるか覚えてるだけですけど

いろいろサイトみてみたんですけど…
Visual C++ は動かすための最小セットが長すぎてすぐに理解できないんですよね><
どこまでがテンプレでどこまでが追加されたコードなのかっていうのが…
GUIのイベント処理理解するための入門サイトみたいなのがあれば知りたいんですけど…

517 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 22:24:26.63 ]
なんでやねん。Javaほど簡単じゃないけど、やってることの基本は簡単だべ。
関数はたった2つ、main関数とコールバック関数(関数名は自由)。
main関数の仕事はたった2つ。
自分自身が何者であるかをOSに登録して無限ループに入るだけ。
これはもう定型文なのでほとんどコピペ。
コールバック関数はOSから呼び出されるたびに、
引数のひとつであるWindow Message(単なる整数)の値に応じて処理を分岐するだけ。
これはイベントドリブン型のプログラムではたいてい同じロジックだから
言語ひとつ知ってれば全部応用できる。

MFCは複雑だけどね。メッセージループがワークフレームの中に隠れてたりするし。

518 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 22:52:21.91 ]
まあ単純にコード行数の問題じゃね
確かに VC++ で挿入されるテンプレみたら初心者はやる気なくす
俺も最初はそうだった

あと Java は興味あるイベントリスナーだけを登録しておけば
イベント内容に応じて分かりやすい関数名にとばしてくれるからな

イベントディスパッチを自分でやるって違いだけなんだけど
switch 文に見慣れない変数がずらずら並んでると難しく見えるのも分からないでもない

519 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 23:04:55.44 ]
本当はwinapiスレ行けと言いたいがどうなんだろうな



520 名前:デフォルトの名無しさん mailto:sage [2012/06/04(月) 23:11:05.50 ]
環境依存か

521 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 00:01:49.16 ]
質問よろしいでしょうか?
知り合いとプログラムをつくっているのですが
知り合いが new した int配列を mapの中にいれて、eraseでメモリの開放できているといいます。
私がメモリのリークチェックで確認したところ 未開放の情報が出力されるのですがeraseで本当に削除されるのでしょうか?
それともlist::pop_frontみたくmapの中の要素リストから排除するのみなのでしょうか?

522 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 00:07:30.95 ]
自分でdeleteしてね

523 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 00:13:45.04 ]
ですよね ありがとうございます。

524 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 00:50:02.89 ]
>>521-523
delete すんな vector 使え。

525 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 00:59:44.40 ]
std::map<x, std::vector<y> >これアリなんだっけ

526 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 01:23:19.75 ]
もちろん

527 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 11:49:21.23 ]
>>521
何の証拠もなしにできているとほざく知り合いは死ぬべき

528 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 12:34:56.25 ]
だよな
そういうやつがよくわからないバグを生み出す原因だったりするよな

529 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 12:39:32.19 ]
リークしてることを証明すればいい



530 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 12:45:38.46 ]
Thread32First/Nextで列挙したスレッドが
特定のDLLで開始されているか調べるには
どうしたらいいですか?

開始アドレスをNtQueryInformationThreadで
調べるというのは見つけたのですが、
それが特定のDLLのものか、どう調べれば良いですか?

531 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 13:01:09.91 ]
CreateToolhelp32Snapshot(TH32CS_SNAPMODULE)でプロセス内のDLLを列挙して
DLLからエクスポート関数を列挙して
プロセス内のDLLアドレス+関数の相対アドレス == 開始アドレス
もしくは GetProcAddress(dll,fname) == 開始アドレス で比較したら
分かる・・・かもしれない やったことないけど

532 名前:片山博文MZボット ◆0lBZNi.Q7evd [2012/06/05(火) 13:19:34.63 ]
>>531 それじゃエクスポートしていない関数じゃできないじゃん。

533 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 13:26:48.51 ]
質問が分からないがスレッドがどのプロセスに属するかどうか?

534 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 14:00:31.87 ]
>>532
DLLベースアドレス <= 開始アドレス < DLLベースアドレス+DLLサイズで
分かるんじゃね?

535 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 14:43:42.23 ]
>>533
Process Explorerでプロセス内のスレッド一覧見ると
Start Addressに
  gdiplus.dll!GdipGetVisibleClipBoundsI+0xad4
  firefox.exe+0x1bf9
とか表示されるから、そういう情報を取りたいんだと思う

536 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 15:02:11.80 ]
質問の意図や前提をくみ取れない糞質問
が多い。それで回答者が逆質問をしたり
悪口を言ったりする。それを前もって思
い描く力が絶望的に欠如してるに違いない。
スーパーハッカーだけが意図を理解できる。
レアなそういう神が颯爽と登場する予感。

537 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 15:08:37.44 ]
そのコピペは1スレに1回までにしてください

538 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 15:27:53.91 ]
ありがとうございます。
>>531 >>532 とりあえず、エクスポート関数に限定して、これを試します。
>>534 DLLベースアドレスの取得方法を教えていただけませんか?
ベースアドレスが衝突してデフォルトでない場合も
取得できるのでしょうか? この方法も試してみたいです。
>>533 >>535さんのおっしゃるとおりです。
dll!func+0xXXXというのは、エクスポートされている関数のアドレスから
0xXXX後にある、エクスポートされてない関数という意味なのですか?
>>536 わかりにくくてすいません。

539 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 15:34:38.71 ]
そもそもなにしたいのん?



540 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 15:38:56.47 ]
>>538
ベースアドレスはロードされたDLLの先頭メモリアドレスなので
1プロセス内で衝突することは無い
MODULEENTRY32.modBaseAddr がベースアドレス
MODULEENTRY32.modBaseSize がサイズ

modBaseAddr <= p < modBaseAddr+modBaseSize がDLLのメモリ領域

541 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 16:12:31.78 ]
のんのんのん♪

542 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 18:24:38.63 ]
そんなマニアックなことして何をしたいんだか
ウイルスでも作るのか

543 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 18:35:32.14 ]
わかんねーなら黙ってろよ

544 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 18:59:48.46 ]
やりたいことによっては別案があるかもしれねぇから聞いているかも知れねぇだろ
アスペは黙ってろ

545 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:16:25.38 ]
などと、アスペが喚いておりますが、気にしないでくださいね★

546 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:17:42.89 ]
んだこら

547 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 19:23:29.12 ]
最終的に何をやりたいのか明らかにしてないだろ

548 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:27:18.21 ]
自作のコンテナのイテレータで、stl::listのbegin()ようにポリモーフィズムの呼び出しをさせたくて
iteratorとconst_iteratorのふたつを用意したところ、エラーになります。
なにがいけないのでしょうか? 環境はVS2010です。begjn()が片方だけならコンパイルは通ります。
class MyContainer
{
public:
  template<typename T>
  struct iterator_ {
    iterator_(T* p) : ptr(p) {}
    T* ptr;
  };
  template<typename T>
  struct const_iterator_ {
    const_iterator_(const T* p) : ptr(p) {}
    const T* ptr;
  };
  typedef    iterator_<MyContainer>    iterator;
  typedef const_iterator_<MyContainer> const_iterator;
     iterator  begin()     { return    iterator(this); }
  const_iterator  begin()  const { return const_iterator(this); }
};

MyContainer x;
MyContainer::const_iterator ix = x.begin();

エラー出力
error C2440: '初期化中' : 'MyContainer::iterator' から 'MyContainer::const_iterator_<T>' に変換できません。
with
[
  T=MyContainer
]
コンストラクターはソース型を持てません、またはコンストラクターのオーバーロードの解決があいまいです。

549 名前:デフォルトの名無しさん mailto:sage [2012/06/05(火) 21:48:37.88 ]
うん。だって、xは非constだから、x.begin()は iterator begin() { return iterator(this); } を呼び出してる。
僕の見た限り、iterator を const_iterator に自動変換するコードはなさそうなのでそれでエラーになってる。
struct const_iterator_ {
const_iterator_(const T* p) : ptr(p) {}
template< typename T > const_iterator_( iterator_< T > const &it ) : ptr( it.ptr ) {}
const T* ptr;
};
これでいいんじゃないかな?



550 名前:548 mailto:sage [2012/06/06(水) 06:19:50.51 ]
>>549
なるほど。そういうことなんですね。ありがとうございました!

551 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 08:26:14.79 ]
codepadはいつ見てもcookpadに見える

552 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 11:46:05.93 ]
基本的な質問で申し訳ありませんが
自分は参照渡しとポインタ渡しは書き方が違うだけでコードは同様と思っていますが
意味が違うと言っている人(ポインタを理解していない?)がいたので質問します

以下のコードに書き方以外の違いはあるのでしょうか?
void hoge::func1(int &p1)
{
p1++;
}

void hoge::func2(int *p1)
{
*p1++;
}


553 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:00:28.31 ]
間違えました
コードは同様→機能は同様

です

554 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:04:08.66 ]
基本的には一緒
NULLやポインタ演算を使う場合はポインタを使う

本人じゃないと分からんけど
そういった点でセマンティクスが違うと言ってるのかもしれない


555 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:04:28.94 ]
>>552
全く違う。ポインタを理解していないのはあんただ。
前者は内容を更新し、後者はポインタを更新する。

556 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:09:27.37 ]
ポインタを理解してないのか、演算子の優先順位を理解してないのか
どっちなんだろうな。

557 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:12:58.44 ]
>>555
どっちも結果を捨てているから一緒じゃねぇか。

って突っ込もうと思ったが、ポインタ版は在らぬところを指してしまうからやっぱり拙いかな?

558 名前:530 mailto:sage [2012/06/06(水) 12:21:48.86 ]
ありがとうございます。
>>539 >>542 とりあえずは、ws2_32.dllの非同期通信スレッドが
他のスレッドに邪魔されないように、優先度を上げようと思っています。
>>540 これで行けそうです。ありがとうございます。

559 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:22:27.46 ]
>>552
*p1++; は *(p1++); になるから (*p1)++; って書かないと参照の方と同じ処理にならないよ



560 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 12:59:12.13 ]
> どっちも結果を捨てている
お前大丈夫か?

561 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 14:47:40.54 ]
>>558
言語のインストーラがやたらと重いし時間が掛かるのでいつもmsiexexcexeをタスクマネージャで
一個下の優先度に変えているぜ

マルチコアだと関係ないと思われるかも知れないがそれでもタスクの切り替えの時に何か引っ掛かる

562 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 15:55:12.46 ]
c++のbool型って1バイト使ってますよね?
bool型の変数を本当に1bitで使うことって出来ますかね?
具体的に言うとboolの配列を出来るだけ多く使いたいので、メモリ節約することで単純に宣言した場合の8倍の量使えるように出来ないかな思ったんですが・・・

563 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 16:06:14.41 ]
bitsetを使おう

564 名前:530 mailto:sage [2012/06/06(水) 16:19:46.29 ]
>>561 マルチコアでも、全部のコアが100%に近い場合は、
優先度が顕著に影響しますね。

言語を頻繁にインストールしているのですか?

565 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 17:10:27.14 ]
>>564
そんな事はないけどあるコアを100%使う時に気づいた
100%使うような処理は優先度を一つ落とすべきだと思った

>>562
Proxy Classを使うと実現可能だと思うけど遅いと思うぞ

566 名前:562 mailto:sage [2012/06/06(水) 17:30:22.35 ]
>>563,565
bitsetで出来たのでこれでやってみます
ありがとうございました

567 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:10:51.82 ]
コンストラクタ・デストラクタ呼び出しについて、
new deleteではなくmalloc、コンストラクタ、デストラクタ、freeとやってしまって問題ありますか?
呼び出し忘れの可能性が増えること以外で

568 名前:552 mailto:sage [2012/06/06(水) 21:11:06.78 ]
演算子の優先順を考慮していませんでした (*p)++;ですね
慌ててて書き込むとダメですね

要は
func1を p1 = 0;
func2を *p1 = 0;
として結果は同じことを確認したかったのです

569 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:26:40.20 ]
>>567
問題ない
デフォルトのoperator newは大抵mallocを使ってる




570 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:32:58.30 ]
そうですか、とりあえず安心
では続けて質問・・・
class Hoge
{
public:
int hensu;
Hoge(){hensu = 0;}
}

//
Hoge* hogeP = (Hoge*)malloc(sizeof(Hoge));
hogeP->Hoge();//エラー
hogeP->Hoge::Hoge();//OKっぽい、hensu = 0になっている

上記エラーとOKの差の意味ってなんでしょう?

571 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:46:04.45 ]
本来は両方エラーだがコンパイラの独自拡張が下の例だけ対応しているだけのこと

572 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:47:15.64 ]
>>570
配置new
ideone.com/ate3L

573 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:48:31.56 ]
なるほど・・・気にしたら負けな世界ですかね、あんまり深追いしないでおきます

574 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 21:51:11.80 ]
> new(p) A();

初めて見る書き方です。replacement newですかね?勉強してみます

575 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:08:51.39 ]
>>569
おいおい変な事を教えるなよ
規格票に従え

576 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:10:22.34 ]
だいたい継承関係にあるクラスの派生クラスをdeleteせずにfreeしたらちゃんと
基底クラスのデストラクタ呼び出してくれるのか?よく考えろ

577 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:13:45.30 ]
大概のライブラリでbitsetってスレッドセーフじゃないんだよね…vector<int>より結局遅くなるケースがおまんちん(´・ω・`)

578 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:15:37.02 ]
POD型以外はmallocじゃ正しいサイズになる保証もないしな。

579 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 22:26:03.75 ]
引数付きコンストラクタも呼び出せないしな



580 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 23:48:03.25 ]
>>575
具体的に

>>576
されるけど、何がよく考えろ?
ideone.com/C8PJH

>>578
sizeofが正しいサイズを返さないってこと?
sizeofにはvtblもアラインメントのパディングも反映されるし
mallocの開始アドレスは基本型のアラインメントも保証されてる

>>579
呼び出せるけど、確認してから言ってるの?
ideone.com/TKP9g

581 名前:デフォルトの名無しさん mailto:sage [2012/06/06(水) 23:56:44.79 ]
>>576
>freeしたらちゃんと
というか継承以前にfreeとデストラクタは関係無い

582 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:18:29.56 ]
質問させてください

引数で可変サイズの2次元配列を受け渡すにはどうしたらいいんでしょうか?

int det(int[][] a, int n) {

みたいに2次元配列とサイズをうけとってサイズに応じて計算したいんですけど…

583 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:29:35.85 ]
>>580
だれもplacement newの話はしてないんだが・・・

頭おかしい?

584 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:32:38.67 ]
>>582
C#のジャグ配列みたいな奴って事?

それじゃポインタのポインタのポインタもしくはポインタのポインタのリファレンスを渡して
行もしくは列方向が伸び縮みするようならreallocもしくはC++ならvectorを使った方がいいね
俺自身はvecctorが常に今の行数と行ごとの列数が簡単に把握出来て好きなんだが

585 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:33:30.43 ]
ちなみにポインタのポインタではいけないのは、呼び出し元に行方向にreallocした
場合の結果を返せないから

586 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:34:53.65 ]
>>582
こういうの?std::vector使った方が良いとは思うけど
ideone.com/pspcT

587 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:36:37.16 ]
>>583
どの部分に対するレスかも書けないお前の頭がおかしい

588 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:40:51.82 ]
int det(int *, int);
det((int *)a, (sizeof(a) / sizeof(int));

589 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:53:17.89 ]
>>587
何でも人のせいにすんなカス
自分の文章を読む能力の不足を棚に上げて偉そうに



590 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 00:57:17.14 ]
>>589
で、結局お前は>>580のアンカ先のうちどれなわけ?
それを書けと言ってるんだが

591 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:04:38.95 ]
お返事ありがとうございます

>>584,586
C言語の話でしたすいません

>>585
とりあえず配列は READ ONLY で動いてくれれば…

>>588
ためしにしたのプログラムでコンパイルしてみたんですけど a[1][1] でエラーになります
メソッド内で要素にアクセスするにはどうすればいいんでしょうか…

int det(int *a, int n) {
return a[1][1];
}

int main() {
int a[2][2] = {{1, 2}, {3, 4}};
printf("%d\n", det(a));
return 0;
}



592 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:09:32.39 ]
>>582
ideone.com/tQkZx

やっぱりC++とmalloc/free/reallocを組み合わせるのは気が引けるな
std::vector<std::vector<int> > を使うか自前のクラスを作りたい

593 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:11:20.40 ]
>>583の正体は次のどれ?
A:>>575 B:>>576
C:>>578 D:>>579

オーディエンスで。

594 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:12:46.86 ]
>>591
>>586をCにした
ideone.com/VazAq

595 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:29:56.54 ]
>>594
おーーー この方法で動ききました ほんとにありがとうございます! 助かりました!

int det(int *a, int n) {
return *(a+1 * n + 1);
}

int main() {
int a[2][2] = {{1, 2}, {3, 4}};
printf("%d\n", det((int *)a));
return 0;
}

>>592
int det(int **&a, int n) {
return a[1][1];
}
って書き方試してみたんですけど

printf("%d\n", det((int **)a, 2));

だとコンパイルとおらなくて

int **b = a;
printf("%d\n", det(b, 2));

で無理やり型あわせてわたしてみたらコンパイルできたんですけど動かなかったです


596 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:45:02.40 ]
>>595
>>592はC++だよ

597 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:48:28.56 ]
>>596
そうなんですけど
Cでも int**& って書き方自体できたので
メソッド中で a[1][1] って書き方でアクセスできれば楽かなって試してみたんですけどダメでした

Cで2次元配列扱うのって結構大変なんですね…

598 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:52:46.91 ]
>Cでも int**& って書き方自体できたので

やめてください

599 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 01:56:23.42 ]
>>597
コンパイラが a[1][1] を *(a+1 * n + 1) のような計算に変換してくれているので
nの部分をコンパイラが認識出来ないとどうしようもない
mainの中で書けるのは int a[2][2] という定義が見えているため

↓のように認識させれば a[1][1] のように書けるけど1次元分以外は固定になってしまう
ideone.com/vgeLc



600 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 02:09:39.53 ]
>>599
なるほどです

#define ならできるのはわかるんですけど
配列サイズをちっちゃくしながら再帰的にこのメソッドをよびたいので
変数で可変じゃないと困るんですよね…

ちょっとソースが醜くなるけど
一応やりたいことは >>594 でできそうなのでこれでかいてみます
本当にみなさんありがとうございました


601 名前:デフォルトの名無しさん mailto:age [2012/06/07(木) 06:55:51.82 ]
C++

class Hoge{
private:
int hogehoge;
};

このclassをvectorに4つ格納したいのですがどう記述すればいいのでしょうか
型の宣言がわかりません。

vector<Hoge> array(4)

これじゃだめなんですか?


602 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 08:21:09.34 ]
#include <vector>
class Hoge{
private:
int hogehoge;
};

std::vector<Hoge> array(4);


603 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:31:48.34 ]
.NETで開発する場合C++/CLIは必須ですか?

604 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 20:45:19.07 ]
いいえ

605 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:26:18.99 ]
>>604
だとするとCLIはいつ使うのですか?



606 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:32:22.18 ]
>>605
d.hatena.ne.jp/itaro3/20110727/1311716477

これ見て考えろや
でもここまでするなら普通にC/C++使えと思う
既存の.NETのリソースを活用したい時だけか

607 名前:デフォルトの名無しさん mailto:sage [2012/06/07(木) 21:33:34.20 ]
>>606
ありがとうございます!!!!!

608 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:20:14.46 ]
久しぶりにクラスのポインタの配列をnewしようとしたら記述方法が解らず過去のソース漁っちまったぜ

何でこんな記述方法なんだ

609 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:26:58.79 ]
バカ避け



610 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 17:43:51.53 ]
>>608
勘違いしてたらごめん、普通な記述方法だと思うけどコレと違うの?
ideone.com/ZCwKK

611 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:07:55.41 ]
>>610
自明ではないなあ、確かに調べたくなる。
int *p, *q;
なのに
int* [10];。

612 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:08:13.99 ]
Bjarne Stroustrup氏 インタビュー
www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html

613 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 19:31:09.43 ]
そこそこ有名な古文書ですね

614 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 20:28:57.23 ]
>>611
配列のnewは
 type* p = new type[n];
なのでクラスのポインタ(type = cls*)なら
 cls** p = new cls*[n];

まとめて変数を定義する構文は欠陥品みたいなもんだから使わない方がいい
理解云々より「型 変数,変数;」にならない場合があるシンタックスがキモイ

615 名前:デフォルトの名無しさん mailto:sage [2012/06/08(金) 23:18:54.25 ]
ポインタ配列は使わずにptr_vector使ってるわ

616 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 00:09:07.32 ]
>欠陥品みたいなもん
聞いたことないわ
脳内か?

617 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 01:31:56.33 ]
禿がそんなようなこと言ってた気がする

618 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 06:33:12.18 ]
int *p, *q;

int* p, q;

どっちが意図通りか分かりにくい

619 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 09:22:15.62 ]
>>616
C++言語設計者曰く
Bjarne Stroustrup's C++ Style and Technique FAQ
www2.research.att.com/~bs/bs_faq2.html#whitespace
>A ``typical C programmer'' writes ``int *p;''
>A ``typical C++ programmer'' writes ``int* p;''
>...
>Stick to one pointer per declaration and always initialize variables and the source of confusion disappears.



620 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 10:32:50.57 ]
[C++設計と進化]でもCの宣言シンタクスをdisってるよね。
構文を変えようとしたけどCユーザーの反発とか色々あって放置に決めたっていう。

621 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 11:10:58.17 ]
>>618
どっちがどうなのかさっぱりだ

基本Cな俺は上で記述したくなるけど

622 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 12:27:10.29 ]
int*をtypedefしたらさらにややこしい

623 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 13:20:15.63 ]
いやそこは#define だろ

624 名前: ◆QZaw55cn4c mailto:sage [2012/06/09(土) 13:47:33.95 ]
なんでもありの #define は避けれるのであれば避けたほうがいい。

625 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 14:35:41.84 ]
コテはアスペとわかっちゃいても
ヤッパむかつくな

626 名前: ◆QZaw55cn4c mailto:日常やってるjね。野見祐二love [2012/06/09(土) 15:12:12.59 ]
>>625
コードをみせてくれ。話はそれからだ。

627 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 15:46:21.13 ]
ナッパむかつくわ

628 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:11:59.64 ]
ラッパズボン

629 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 21:47:37.67 ]
ガッペむかつく



630 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:03:37.47 ]
charの配列に2バイト文字列が入ってるものをifとかで場合分けしたいんですが、どーしたらいいんでしょう?
別の事情でstring型は使うことができないんです
初歩的な質問ですいませんがよろしくお願いします

631 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:14:05.73 ]
正確ではないと思うが、全角文字の1バイト目を探すというのはどうだろう。
0x80〜 とかその辺だった記憶

632 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:21:18.75 ]
>>631
回答有り難うございます
文字列で場合分けしたいので一文字じゃダメなんです……
でも参考になりました ありがとうございます
別で聞いた所strcmp?とかいうもので解決するそうです
もう少し頑張ってみます

633 名前:デフォルトの名無しさん mailto:sage [2012/06/09(土) 23:59:18.06 ]
いや、charの配列を頭から一文字ずつチェックして
その2バイト文字列の文字コードでマルチバイト文字の1バイト目であることを示す値が出てくるかどうかで判断するって話だろ

634 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:17:31.99 ]
なんでそうなるw

635 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 00:24:29.07 ]
3バイト文字列

636 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 05:57:32.60 ]
>>630
扱うコードは
SJIS?
UNICODE?

637 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 06:03:28.19 ]
UTF8以外は認めない

638 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 11:41:33.27 ]
UTF32でおk

639 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:11:18.15 ]
Bjarne Stroustrup
ってなんて読むの?

バカジャネ ストラップ

でいいの?



640 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:18:44.54 ]
Wikiみろ。しかし、一般にはハゲである。

641 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 12:22:38.71 ]
びよよん ストローストラップ

642 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 16:57:25.35 ]
初歩的な質問ですがよろしいでしょうか?

C++における関数や関数の呼び出しにおける変数の扱いについてです。
関数や関数内にて宣言している静的な変数は、関数を呼び出すたびに実行に必要なメモリ領域を確保しているのでしょうか?
関数、変数ともにstatic、inlineなどがついていない関数を前提とします。




643 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:06:46.76 ]
>>642
>関数や関数内にて宣言している静的な変数
>関数、変数ともにstatic、inlineなどがついていない
矛盾しとるがや。


644 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:34:56.98 ]
>>643
すみません
つまりこういうことです。

int func()
{
int var;


}
ここでのfuncやvarは実行されるたび確保されるのでしょうか?

645 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:38:33.59 ]
仕組みを知りたいなら"スタック 自動変数"でぐぐればわかるよ

646 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 17:51:53.23 ]
>>645
ありがとうございます。
早速調べさせていただきます。

647 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:04:43.04 ]
うるせぇ、許可なんか要らないから勝手に調べろよ。

648 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 18:36:02.03 ]
ハイハイワロスワロスwwww

649 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:02:24.84 ]
許可を求めてない件



650 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:17:56.41 ]
まぁアスペなんだろ
かかわらないほうが吉

651 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:40:35.31 ]
そもそも確保しなきゃ使えんだろ

652 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 19:51:54.42 ]
最初に確保して使いまわしているとかそんなのも考えていたんじゃないか?
そうなると再起関数の部分とかで矛盾が発生するとか考えればわかるけど

653 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:03:12.96 ]
静的な変数≠static と思っているあたりもっと根本的なところが

654 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 20:09:06.45 ]
Qが最近あちこちのスレでコテ消して暴れているような気がする

655 名前:デフォルトの名無しさん [2012/06/10(日) 21:02:46.39 ]
>>653
悪い質問者じゃないんだけどさ・・・
関数内での変数ってstatic明示的に書かない限りAuto変数だと思っていた
kwsk教えてエロい人

656 名前:デフォルトの名無しさん mailto:sage [2012/06/10(日) 21:05:14.17 ]
つまり>>643だよ

657 名前:デフォルトの名無しさん [2012/06/10(日) 21:12:59.86 ]
そういえば、確かに静的変数なのにstaticがついていないのは矛盾している・・・。
ごめんなさい、なにか勘違いしていました。

658 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 01:56:38.09 ]
>>654
Qは指パッチンで何でもできるからな。

659 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 03:32:25.29 ]
>>654
気のせいだろ?このスレにしてもQにしてはレベルが低い、というかQならとうに知ってるはず。



660 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 03:35:58.64 ]
いやQの正体はこんなもんじゃないのかな

661 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 04:59:12.55 ]
むしまるQ

662 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 10:25:25.11 ]
DQN

663 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:13:36.00 ]
C++のコンパイラ、IDEは何を使えばいいでしょうか(各コンパイラは主として何が違うのでしょうか)
今のところ、Borland C++ Compiler、BCC Developerを使おうと思っています

664 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:30:43.85 ]
IDEが決まってから環境(OSとか)を合わせるの?

665 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:40:13.46 ]
OSはWindowsXPとWin Vistaです
他にも(使用環境について)何か必要でしょうか?

666 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 15:55:48.00 ]
Visual C++ 2010 Express でいいんじゃね

667 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 16:33:13.06 ]
フリーのやつ全部試せ
無駄にはならん

668 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 16:46:17.50 ]
LSI C 3.30試食版

669 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 17:03:17.01 ]
Borland C++ Compilerはクソ古い上に公式が消滅してるし
Linuxメインでない限りmingw,cygwin使うのはアホだし
VC++除けば Digital Mars C/C++ Compilerくらいか?



670 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 18:56:50.56 ]
用途というか、目的によって違うと思う。

簡単なWindowsアプリをお手軽に作ってみたいというならVC++で良いと思う。
C言語を純粋に勉強したいというなら、gcc(Mingw,cygwin)+eclipse(CDT)の方が良いと思う。

VC++のなんとなく嫌な所はC言語としては、Microsoftの方言があると思える所。
GCCの嫌な所は、Windowsアプリを作るのが面倒くさい(という印象)がある所。

「Windowsのアプリを作り易い」ということは、「WindowsのAPIを簡単に使える」という話だから、
C言語の本体とは直接関係ないけどね。

671 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 19:53:51.53 ]
C++だって言ってるだろ

672 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 20:01:11.29 ]
じゃあ、C言語をC++言語に、そして、gccをg++に、読み替えてください。

673 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:01:39.16 ]
VC++のCに方言(っていうか、独自拡張?)なんてあったっけ?
C++は規格合致してない方言まみれだけど
Cは89のままで止まってて、かなり素直だと思うんだけど^^;

むしろ99の機能を一部取り入れてるgccの方が独自拡張多くない?

674 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:26:55.49 ]
追加仕様はGCCが未対応はVCが多いイメージ

675 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:30:58.92 ]
>>673
msdn.microsoft.com/ja-jp/library/34h23df8.aspx

676 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:34:19.97 ]
__declspec(selectany) 便利だよね

677 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 21:54:35.82 ]
gccもVC++も色々拡張があるんだね、知らなかった
www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/gccextend.html

678 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 22:15:19.79 ]
>>677
ふーん、古いページだけれどもその当時の時点でいろいろあったんだ。
>配列変数をコピーする。
は標準じゃなかったっけ。

679 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 22:41:43.30 ]
お前構造体と勘違いしてんじゃね



680 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:00:20.26 ]
配列コピーはGCC拡張だったけど今やるとエラーになる
今の一覧はこれ
gcc.gnu.org/onlinedocs/gcc/C-Extensions.html
gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Extensions.html

681 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:15:12.86 ]
>>679
そだった。なるほど。

682 名前:デフォルトの名無しさん mailto:sage [2012/06/11(月) 23:20:40.95 ]
配列なんてここ数年使ったときねーな

683 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 03:10:00.73 ]
std::arrayが使えるようになってまた使い出した

684 名前:デフォルトの名無しさん mailto:sage [2012/06/12(火) 07:10:39.82 ]
独自のものには__が付いてるから許容範囲

685 名前:663 mailto:sage [2012/06/13(水) 14:20:05.80 ]
レスしてくれた方々ありがとうございます。返信遅れてすみません
まずはVisual C++ 2010 Express使ってみて
不満があるようならg++など順番に変えていこうと思います
(cygwinのインストールはしているのですが、使い方があまり分かっていないので勉強する必要が・・・)

686 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 12:47:46.33 ]
std::ostreamってWindows CEでも使える?

687 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 15:15:04.81 ]
試したら?

688 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 19:47:41.13 ]
C++で、外部の.exeファイルを実行するにはどうすればいいですか?
使っているソフトはVS2010です

689 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 20:00:18.12 ]
ExecuteExternExeFile



690 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 20:01:49.08 ]
>>688
普通の起動
CreateProcess

エクスプローラーと同じようにファイルを開く場合
ShellExecute

コマンド実行(起動したプロセスが終わるまで待機)
system
msdn.microsoft.com/ja-jp/library/277bwbdz(v=vs.71).aspx

691 名前:デフォルトの名無しさん mailto:age [2012/06/14(木) 23:11:18.71 ]
#include <iostream>
#include <string>

using namespace std;

int main()
{
string str;

while(1)
{
cin >> str;

if(str=="end") break;

cout << str.size;
}

return 0;
}

これエラーが出るんですがstrの要素数を出力する場合どう書けばいいんですか?
VC++2008です。

692 名前:デフォルトの名無しさん mailto:sage [2012/06/14(木) 23:46:53.91 ]
size → size()
ideone.com/YBuvr

693 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 06:19:36.46 ]
韓国の国内総生産(GDP)を考慮した個人負債規模が財政危機に陥っているスペイン並みに深刻な水準となった。

個人負債の増加速度は経済協力開発機構(OECD)加盟国で3位と平均を大きく上回った。 

大韓商工会議所が14日に発表した「個人負債現況と政策課題」報告書によると、
2010年の韓国のGDPに対する個人負債の比率は81%でOECD平均の73%より高かった。 

これは財政危機を陥っているスペインの85%に迫る水準だ。ギリシャの61%より20ポイント高い数値だ。

個人負債増加幅も急速に拡大していうる。2006年以後鈍化した個人負債増加率は2010年に前年比2.4ポイント上昇の9.8%を記録した。

【今日の感想】この記事を読んで・・・
面白い (40件)
悲しい (2件)
すっきり (1件)
腹立つ (0件)
役に立つ (6件)

japanese.joins.com/article/707/153707.html?servcode=300§code=300

694 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 07:00:42.74 ]
面白い
役に立つ

695 名前:デフォルトの名無しさん mailto:sage [2012/06/15(金) 19:56:02.03 ]
.うん 日本人も他人の事言えないね。

【今日の感想】この記事を読んで・・・
面白い (349件)
悲しい (19件)
すっきり (44件)
腹立つ (4件)
役に立つ (36件)..

696 名前:デフォルトの名無しさん mailto:sage [2012/06/16(土) 06:09:17.53 ]
朝鮮人の嫌がらせにも
マニフェストをなにも守れない民主党の嫌がらせにも
耐え忍ぶ民族

697 名前:デフォルトの名無しさん [2012/06/17(日) 06:24:34.95 ]
class tree {
public:
tree* right;

template <tree* tree::*right>
void func1(tree* t) {
tree *p = t->*right;
}
};

こんなクラスを作ってコンパイルすると以下のようなエラーになります。
test.cpp: In member function ‘void tree::func1(tree*)’:
test.cpp:7: error: ‘((tree*)this)->tree::right’ cannot be used as a member pointer, since it is of type‘tree*’
func1をfriend関数にするとコンパイルが通るのですが、メンバー関数にすると通りません。
どこがまちがってるでしょうか?


698 名前:デフォルトの名無しさん mailto:sage [2012/06/17(日) 11:01:04.58 ]
func1の中のrightがテンプレート引数でなくtreeのメンバのrightとみなされてる

699 名前:デフォルトの名無しさん [2012/06/17(日) 19:06:53.96 ]
なるほど、テンプレート引数名とメンバ名がかぶってたと。
テンプレート引数を変更したらコンパイル通りました。
ありがとうございました。




700 名前:デフォルトの名無しさん mailto:age [2012/06/19(火) 05:42:11.94 ]
C++にはrubyのsuperみたいな予約語はないのでしょうか?



701 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 05:46:13.06 ]
基底クラスのメンバ呼びたいとかなら
規定クラス名::func()
で呼べるよ

702 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 06:38:25.59 ]
__super

703 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 07:08:52.15 ]
>>700
ないのでは。C++では派生クラスのコンストラクタから基底クラスのコンストラクタへの綱渡りは基本できなかったと思う。


704 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 07:10:00.84 ]
ああ、いいかたがわるかった。綱渡りのための宣言はあったね。ただ super はない。

705 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 10:49:09.38 ]
たじる継承の時、superではどっち呼びたいのかわからんからなー。
あ、もともとメンバ名の衝突がある時点でだめか。

706 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 13:35:14.84 ]
たじる継承するにはどうしたらいいですか?

707 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 14:37:25.62 ]
まず服をたじます

708 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 15:35:42.57 ]
タジン鍋つかうあれか

709 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 16:27:25.98 ]
たじってしまいました。
どうしますか?



710 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 16:35:01.47 ]
味噌と醤油どちらをメインにするか決めずに他汁継承すると大変な鍋になります

711 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:32:54.82 ]
更にそこに塩の配列を確保します。

712 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:35:05.28 ]
塩基配列か!

713 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:38:03.73 ]
するとあら不思議!!

714 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:39:34.30 ]
多汁した汁が鍋から漏れ出し(リーク)します。


715 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:41:38.83 ]
ぶたじる継承・完

716 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:42:50.23 ]
BADENDじゃねぇか!!!

717 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:52:09.79 ]
ぶたじる継承・第二章

親父の豚汁店を継ぐことを固く決意した主人公。
奇跡とも言われた味を守り抜くことはできるのか。

718 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 17:54:05.22 ]
魔王がカレールーを持って現れた!!
どうする豚汁!?

719 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 19:04:58.99 ]
>>489-490
ほじくりかえして申し訳ないんだけど、callocってなんかまずいの?



720 名前: ◆QZaw55cn4c mailto:sage [2012/06/19(火) 19:07:12.07 ]
>>719
別に問題ないでしょう。わざわざ0クリアをした領域の上に、なにか別の内容をあらためて代入する、という無駄な動きにめをつぶるのであれば。

721 名前:デフォルトの名無しさん mailto:sage [2012/06/19(火) 19:12:58.27 ]
うお、即レスども。
その特定の状況のみを考えて>>490を書いたってことね。どもです。

722 名前:デフォルトの名無しさん mailto:age [2012/06/20(水) 00:05:49.51 ]
class Base
{
};

class Suba : public Base
{
};

class Subb : public Base
{
};


Suba g_scene

このあとg_sceneの型をSubbに変更するといったことはできるのでしょうか?
できるなら書き方の例もお願いします


723 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:25:14.27 ]
ごり押しならな・・・・
Subb b = (*reinterpret_cast<Subb*>(reinterpret_cast<void*>(&g_scene)));
ただこんなことするプログラマーとはあまり関わり合いたくないレベル


724 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:29:02.27 ]
せめてvoid*を介した変換にはstatic_cast使ってくれ

725 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 00:32:04.21 ]
そんなのどっちでもいいだろ('A`)
普段もこれからもこんなの書かねぇんだから

そもそもLPVOIDは特殊だがポインタのキャストなんだからreinterpret_castでも問題ないんじゃねぇの?



726 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:04:27.18 ]
それ以前にこんなウンコードだれが使うんだよwwww

727 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:18:06.44 ]
そもそもreinterpret_cast使うんだったらvoid*使う必要ない

728 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 01:54:06.08 ]
キャストの使い分けよくわかってないやつ多いからなあ

729 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 03:30:37.91 ]
というかC++のキャスト周りで使っているやつみねぇえw
Cキャスト使っている奴ばっかだわw



730 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 04:20:06.18 ]
それってお前が居る環境が糞ってだけじゃねーか

731 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 06:31:49.68 ]
すんません(´・ω・`)

732 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 06:33:40.41 ]
>>722
>Suba g_scene;
こう書かずに
Base *scene;
こう宣言すれば?Baseが必要なメンバーを網羅した抽象化クラスなら問題ない。
Base *scene;
Suba a;
Subb b;
scene = &a;
scene = &b;
基本的にはこんな感じで差し替えてやればいい。もし、Suba、Subb固有の操作が
したいなら、そこだけsceneを使わずaとbを直接参照して操作する。
間違ってもダウンキャストしちゃだめよ。


733 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:23:49.61 ]
class ABC{};
std::vector<ABC*> xyz;


void erase(void)
{
 while(xyz.empty()){
  delete *(xyz.begin());
  xyz.erase(xyz.begin());
 }
}

vectorの要素を解放するコードは、これ以上短くなりますか?
または、もっと簡潔に記述出来ますでしょうか?

734 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:25:47.55 ]
>>733
> while(xyz.empty()){
じゃなく、
> while(!xyz.empty()){
でした、済みません。


735 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 09:46:26.78 ]
std::for_each(xyz.begin(), xyz.end(), [](ABC* p) { delete p; });
xyz.clear();

736 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 10:35:51.68 ]
C++11だったら std::vector<std::unique_ptr<ABC>> だろJK

737 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 10:47:50.02 ]
>>735
ありがとうございます、勉強になりました。
>>736
じゃないのです。

738 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:22:00.38 ]
どうしてboost::ptr_vectorを使わないのか

739 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:28:09.53 ]
依存をstd::に留めたい人も割りと居る



740 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 12:42:32.69 ]
どの場面でもboostが許されている訳ではない。

741 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 13:55:11.46 ]
処で、>735はC++11?
だとしたら>733はC++05(だっけ?)の範囲では妥当解?

742 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:42:02.22 ]
全部消すなら一々eraseするより
後でclearのほうが効率が良いと思う一応

743 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:43:53.32 ]
コードの短かさだけで言えばそうかもしれんが
先頭から一つずつeraseとか無いわ
普通にforでdeleteしてclearか、せめて最後の要素からでないと

744 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 14:45:00.27 ]
>>743>>741

745 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 16:08:17.04 ]
それ以前
無条件にdelete出来るポインタをvectorに格納する意味が判らん

746 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 16:30:53.64 ]
>>733 >>741
backとpop_backでもっと短く,速くなる

ideone.com/zQdD0
4.1秒
while(!xyz.empty()){
  delete *xyz.begin();
  xyz.erase(xyz.begin());
}

ideone.com/R92Ik
0.02秒
while(!xyz.empty()){
  delete xyz.back();
  xyz.pop_back();
}

747 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 17:22:39.84 ]
>>745
わからないならクチを挟むな

748 名前:741(≠733) mailto:sage [2012/06/20(水) 17:28:45.94 ]
>742-746
なるほどね。勉強になったよ。THX!

749 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 17:46:17.97 ]
>>748
もしデストラクタでの処分方法を考えていたのなら、eraseなりclearなりは要らないと思う



750 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 18:00:47.01 ]
for_eachやfor(...;++it)ならな

751 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 18:01:48.71 ]
ああ、そうそう、そこが抜けてたごめん。

752 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:22:51.40 ]
クラス→(継承)→サブクラス→(継承)サブサブクラス
とした場合サブサブクラスやサブクラスやクラスの引数なしのコンストラクタって全部動きますか?

753 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:26:11.48 ]
当たり前だ

754 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:27:30.65 ]
>>753
ありがあとう

755 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:32:31.05 ]
デストラクタにvirtualついてなくて乙ることはあるが
コンストラクタですっとばしは考えらん

756 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 19:36:30.29 ]
らんらんるー♪

757 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:18:42.52 ]
基底クラスにキャストしたサブクラスの仮想関数を呼び出すと
基底クラスのメソッドとサブクラスのメソッドのどちらが呼び出されますか?

サブクラスのメソッドが呼び出されるとした場合、
サブクラスのフィールドを仮想関数で弄ることはできますか?


アップキャストして基底クラスの状態でまとめたもの(配列)を、
ループで一気に仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたいです。

758 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:25:00.65 ]
何の為の仮想関数なのかわかってないな

759 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:29:36.12 ]
仮想関数なんだからどっちが呼ばれるなんて一目瞭然



760 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:32:12.85 ]
>>758
すいません、解説サイトがよくわからなくて・・

>>759
つまり・・・!?

761 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:35:33.10 ]
>>760
ttp://www5c.biglobe.ne.jp/~ecb/cpp/06_07.html
これ見ればどっちが呼ばれるかわかるだろ

762 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:49:52.24 ]
>>757
> 仮想関数を呼ぶことで多種類のサブクラスそれぞれに異なる処理をさせたい
それこそが多態性

763 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:53:24.55 ]
仮想関数と言いながら、メソッドとも呼ぶ・・・
メッセージ機能ないんだから関数で通せよ

764 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:54:44.78 ]
メゾットなんていわねーよ
メンバ関数だろ

765 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:54:53.86 ]
>>761
おお、サブクラスのメソッドが呼ばれるってことですね
ありがとうございます!


766 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 20:58:44.34 ]
>>763
すいません

767 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:06:54.73 ]
メゾットって誰?

768 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:07:38.92 ]
リゾット

769 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:13:40.50 ]
Metzod : (独) メゾッド
特に強くを意味する言葉。
日本ではメッゾフォルテなどが有名。



770 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:14:52.08 ]
Matzとではどっちが強いですか?

771 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:15:22.00 ]
Matzは全角英数字で殴り続けると死ぬ

772 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:16:08.10 ]
その綴りなら読みは メツォット だろ?

773 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:17:18.74 ]
いやメトゾッドだ

774 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:19:17.74 ]
zeit ツァイト

775 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:19:56.51 ]
tはノイズだ
正しくはMezod

776 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:21:09.47 ]
それならやっぱりメツォット

777 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:39:45.20 ]
↑おまえの負けー

778 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:44:41.05 ]
↑↑↓↓←→←→BA

779 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:47:07.13 ]
ティリティリティ〜♪



780 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 21:51:50.84 ]
ドイツ語でメゾッドと読ませたいならmesodだ

781 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:01:20.13 ]
メソッドもサブクラスもフィールドもC++の標準用語じゃないでしょでしょ
多分C#辺りから渡ってきた人。

782 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:06:59.27 ]
英語でどう呼ぶか、だな

783 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:32:59.33 ]
Member Functionは、流用元となったSimulaのMember Procedureに準じた言葉。
Methodは、SimulaのMember Procedureに対し、MessageとMethodが分離されていて
別物であることを強調したSmalltalkとObjective-Cの用語。
近頃の言語は、そういう背景を踏まえずにMember Procedureと変わらんものを
Method, Methodと連呼する。ちゃんとMessageを実装している言語に失礼だよね。

784 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:53:38.10 ]
勉強になります

785 名前:デフォルトの名無しさん mailto:sage [2012/06/20(水) 22:58:42.38 ]
言語の背景でプログラム書くわけじゃない

786 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 00:25:00.59 ]
プロセジャーとか言い出す講師にあたったときはひどかった

787 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 05:51:46.07 ]
「プロセージャですよね?」と聞き返すべき

788 名前:デフォルトの名無しさん [2012/06/21(木) 08:19:27.01 ]
AVL木と、何にもしてないただの木をC++で実装して、大量のランダムデータをinsertしてremoveする、というのの速度を比較したんですが、
データが500万件を越えたあたりでAVLの方が速く終わるようになりました。
insertくらいは普通の木が常に速いと思ったのに。これって正しいですか?


789 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 08:36:09.84 ]
>>786
プログラムをプラム、プロシージャをプロセ、アセンブラをアセムって呼ぶ
ICEベンダーの技術者よりはましだと思う。



790 名前:デフォルトの名無しさん mailto:sage [2012/06/21(木) 10:01:50.95 ]
あらゆる主要板にスレッド立てられてますなあ
こりゃアフィにも広まるし
完全に日テレはネットに嫌われるね

■モ娘(狼)
日テレ韓国マンセーで遂にGP帯オール一桁wwwwwwwwww
hayabusa3.2ch.net/test/read.cgi/morningcoffee/1335226115/

■ニュー速(嫌儲)
最近フジより韓流ゴリ押しの酷い日テレ GP帯(19〜23時)視聴率オール一桁達成
engawa.2ch.net/test/read.cgi/poverty/1335228771/

【フジ・日テレ死亡】テレビ朝日視聴率3冠おめでとうございます
engawa.2ch.net/test/read.cgi/poverty/1340233396/

■ニュース速報
【第二のフジテレビ】日テレ、韓流ゴリ押しで大爆死
engawa.2ch.net/test/read.cgi/news/1335230981/

■なんでも実況J
【朗報】韓流ゴリ押しの日テレが低視聴率
hayabusa.2ch.net/test/read.cgi/livejupiter/1335229538/

791 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 00:36:20.43 ]
State/Strategyパターンや関数ポインタテーブルを使い、動的に呼び出し先を変えるとする。

どうしてもその呼び出し先ごとに異なる変数を与えたい場合、
適当な変数を用意して代入し、呼び出し先で解釈してもらうという手法はアリ?

例えば変数hogeを用意しておいて、Foo(int hoge) と Bar(int hoge) とでは、hogeの意味(使用目的)が異なるとか。

792 名前: ◆QZaw55cn4c mailto:sage [2012/06/22(金) 01:57:49.23 ]
>>791
関数ポインタテーブルでごにょごにょ、ならばやったことありますが、十分にありだと思います。
テーブルに載せてる関数のなかで一番たくさん引数をもつものにプロトタイプをあわせていました、泥臭いけど。

宿題スレでやってcodepad にもあげたけれどもみつけられかったごめんなさい。

793 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 02:00:40.61 ]
>>791
ナシ
呼び出し先によって意味が変わるんじゃ呼び出し側で意味を持たせた引数を指定できない

int f1(int i, int j)
{
 static int v[5] = { 1, 2, 4, 8, 16 };
 return v[i] + v[j];
}

int f2(int i, int j)
{
 return i / j;
}

int main()
{
 int (*pf)(int, int) = 0;
 // pf(1, 0); // f2が呼ばれるならアウト
 // pf(9, 3); // f1が呼ばれるならアウト
}

794 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 02:04:08.51 ]
状態遷移がわかっていて、引数変える分には、ハマることはないような

795 名前:791 mailto:sage [2012/06/22(金) 02:58:37.43 ]
>>792-794
ありがとう。意見は割れるかあ。
便利だけど、危険性が伴うからホントどうしようかなと悩んでた。

そりゃ0除算や配列の外側へのアクセスなんかは、数値の範囲チェックをすれば良いだろうけど、
それでも心理的要因などが原因ではまる可能性はあるからなあ。
ぶっちゃけ使ってて気持ち悪いというのが大きいがw

関数ポインタじゃなくてクラスを利用しているなら、キャストを使うことも出来るだろうけど、
それをテーブル等に収めようとすると結局同じ問題が発生するんだよね。

うーん、mapで持たせたほうがスマートかなあ?

796 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 03:21:50.32 ]
書いてみて試行錯誤するしか
わかってるなら、矛盾した箇所とか出てくるだろうから、そこをどうするかでしょ

797 名前:デフォルトの名無しさん mailto:sage [2012/06/22(金) 06:55:44.09 ]
>>791
オブジェクトで実装するのであれば無し。
そもそも、ステートオブジェクトに外から関数の引数で値を渡すんじゃなく、
関数が呼ばれたタイミングでステートオブジェクトに情報を取得させればいい。
情報の取得元は、ステート開始以前にコンストラクターとかであらかじめ指定してやる。

StateA state1( &source1 );
StateB state2( &source1 );
StateC state3( &source2 );

state1.ChangeNextState( &state2 );
state2.ChangeNextState( &state3 );
state3.ChangeNextState( &state1 );

next_state = &state1;
while( next_state ) next_state = next_state->Execute();






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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