■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part55
501 名前:デフォルトの名無しさん :2007/01/01(月) 16:09:20
外部関数じゃ何か不満?

502 名前:487 :2007/01/01(月) 16:31:54
>>501
関数だと
=func1(func2(func1(func1(str1))+func1(str2)));
こんな使い方をされる物を想定しているわけですよ
これを単純に左から右へ処理される順番に並べて読みやすくできないかという思惑です

503 名前:デフォルトの名無しさん :2007/01/01(月) 19:03:23
>>502
もっと具体的な最終目的をちゃんと書いてくれると
それが最適なやり方かどうかも含めて議論できるんだが

504 名前:デフォルトの名無しさん :2007/01/01(月) 19:14:50
Win32APIのプログラムを練習していますCで書かれたプログラムで_stprintfというのが
あるのですが、C++でコンパイルすると未定義の関数と表示されてしまいます(CならOK)
C++で_stprintfに対応する関数は何になるのでしょうか教えてください。
コンパイラはbcc32です。

505 名前:487 :2007/01/01(月) 20:06:50
>>503
ファイルのパスを管理したい。

フルパスからファイルの親の親ディレクトリ部分のみを取り出したり
パスなしのファイル名から拡張子部分のみを取り替えたりとかしたい

下手にパスを分解してクラスのメンバに入れたりとかするより、
stringそのままを切り貼りした方が扱いやすいんじゃないか

切り貼りの貼りは+でいいとして
切りの部分はstringにメソッドを追加したいなー

せめてメソッドっぽく見えればなー


こんな感じです

506 名前:デフォルトの名無しさん :2007/01/01(月) 20:31:59
boost::filesystem

507 名前:デフォルトの名無しさん :2007/01/01(月) 20:47:47
>>504
_stprintfはsprintfのtchar版
これでわからないなら最初にsprintfについて調べて動作を理解してから自分のコード読み直してみるといい。


508 名前:!dama !omikuji 株価【35】 :2007/01/02(火) 10:15:15
>>500
->*演算子は関数呼出の()演算子よりも優先順位が低いからどうしようもない。

>>501
そういうことなら、Oven Range Libraryなんてどうだろう。
ttp://p-stade.sourceforge.net/oven/
こいつは|演算子でパイプ処理のように書くことができるライブラリ。そしてstd::stringに限らず幅広いオブジェクトを対象にしている。
これを使わないとしても、|演算子で並べていくというアイデアは参考になると思う。
と、思ったんだけど、505なら506の言うとおりBoost.Filesystemを推すなあ。

>>504
<tchar.h>をインクルードしているか。

509 名前:デフォルトの名無しさん :2007/01/02(火) 19:17:39
>>489
>std::stringを継承するのは大変そうなのでやりたくない

http://tricklib.com/cxx/dagger/xstring.h

こいつでもベースに使えば楽だよ。

510 名前:デフォルトの名無しさん :2007/01/04(木) 11:03:36
>>487
ライブラリとして使うつもりなら、
メンバ関数でなければいけない特別な理由がない限り、
メンバ関数にするのはやめたほうがいい。
(C++ Coding Standards 項目44)

名前が長いなら、参照を使えばいいわけで、メンバにする理由もないし。

template< typename StrT > inline StrT & remove_filespec( StrT & in ) {
 in.substr( ... ).swap(in);
 return in;
}
string & ref = remove_filespec( my_application_filepath );


511 名前:デフォルトの名無しさん :2007/01/04(木) 11:14:59
>>510 >>502

512 名前:デフォルトの名無しさん :2007/01/04(木) 11:44:46
>>511
行分けちゃアカンの?

513 名前:デフォルトの名無しさん :2007/01/04(木) 16:12:38
C++のコードでstdio.hを使うと何か問題発生する?

514 名前:デフォルトの名無しさん :2007/01/04(木) 16:42:44
NULLの代わりに0を使わないと、代入でエラーが出る事が
あるんじゃなかったっけ。

515 名前:487 :2007/01/04(木) 23:51:25
>>510
まぁ、邪道なのは百も承知しているのですが、

それでも
「本当のスパゲティコードを書いたことがなければ構造化のありがたみは解らない」
という自説の延長線上で
「意外に便利なものが見つかったらめっけもの」
という勢いですので、生暖かい目で見守ってやってください。

516 名前:デフォルトの名無しさん :2007/01/05(金) 00:09:45
>>514
そうならないようC++のNULLは0と定義されている。

517 名前:デフォルトの名無しさん :2007/01/05(金) 12:05:47
ぬるぽ

518 名前:デフォルトの名無しさん :2007/01/05(金) 15:25:19
ガッ

519 名前:デフォルトの名無しさん :2007/01/05(金) 15:38:50
throw;

520 名前:デフォルトの名無しさん :2007/01/09(火) 18:10:41
でもNULLの代わりに0使っちゃダメだぜーフハハハ。

521 名前:デフォルトの名無しさん :2007/01/09(火) 22:47:29
ADLには弊害があるそうなんですが、
どういう時によろしくない挙動を示すんでしょうか


522 名前:デフォルトの名無しさん :2007/01/10(水) 00:34:13
ISDNと干渉する

523 名前:デフォルトの名無しさん :2007/01/10(水) 21:03:13
ADSLかよwwww

524 名前:デフォルトの名無しさん :2007/01/10(水) 22:02:34
Yahoo!BBはピンポン方式を一切考慮してなかったからISDNの干渉がひどかった。

525 名前:デフォルトの名無しさん :2007/01/10(水) 22:47:36
>521
これなんてどうだろう?
http://en.wikipedia.org/wiki/Argument_dependent_name_lookup#Criticism

526 名前:デフォルトの名無しさん :2007/01/10(水) 23:19:22
C++は奥が深いな

527 名前:デフォルトの名無しさん :2007/01/10(水) 23:20:31
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□派遣先の社員の意見にはたとえ間違っていても反対しない
□派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ派遣先に常駐したい


528 名前:デフォルトの名無しさん :2007/01/11(木) 21:17:37
C++用のライブラリで、perlにおけるbioPerlのような分子生物学用ライブラリは
ないでしょうか?コドンからアミノ酸変換、疎水性インデックスのような簡単な
ものでいいのですが。

529 名前:デフォルトの名無しさん :2007/01/11(木) 21:47:16
開発環境が整わない。
もうマジうぜー、javaの100倍うぜえわ
コンパイルの仕方がわからん。リンクくらい貼っとけ

530 名前:デフォルトの名無しさん :2007/01/11(木) 21:50:44
低脳

531 名前:デフォルトの名無しさん :2007/01/11(木) 23:16:09
>>529
開発環境とかはスレ違いだから

532 名前:デフォルトの名無しさん :2007/01/12(金) 05:02:42
>>453
遅レスだが.

> rdbuf()を使ってstd::stringstreamに読み込もうとしたら、fstreamとは
> 違ってコンストラクタがないんですね。

ふつーに
std::stringstream ss;
ss << std::cin.rdbuf();
とかできんか?

533 名前:デフォルトの名無しさん :2007/01/12(金) 15:12:11
>>528
boost ML にbio infomatics のやつは投稿されてたけど

534 名前:デフォルトの名無しさん :2007/01/12(金) 17:15:40
>>532
std::istringstreamではなくてstd::stringstreamを使って
入出力両用にすればそれはできますね。

535 名前:デフォルトの名無しさん :2007/01/13(土) 10:46:50
g++ 4.0.1 で↓がスルっと動くのは、仕様どおりで安全ってことですか?

std::string s("abc");
s = s.substr(3);
assert(s == "");

536 名前:デフォルトの名無しさん :2007/01/13(土) 13:24:24
substr(size_type pos = 0, size_type n = npos) const;
は、もしpos > size()ならout_of_rangeを投げるはず・・・。

537 名前:デフォルトの名無しさん :2007/01/13(土) 13:25:32
endからendまでをコピーできるからいいんじゃないの

538 名前:デフォルトの名無しさん :2007/01/13(土) 15:27:48
>もしpos > size()ならout_of_rangeを投げるはず・・・。
pos == sizeだから問題ないね。

539 名前:デフォルトの名無しさん :2007/01/13(土) 15:36:56
お pos >= size()のときじゃないのか... > out_of_range

540 名前:デフォルトの名無しさん :2007/01/13(土) 16:04:58
21.3.6.7
2 Throws: out_of_range if pos > size().

って書いてあるな。

541 名前:535 :2007/01/13(土) 16:19:14
>>536-540
ありがとうございます。安心して使えます。

542 名前:デフォルトの名無しさん :2007/01/14(日) 02:06:46
http://www.open-std.org/jtc1/sc22/wg21/
News 2007-01-13: The C++ Standard Library Issues List (Revision 46) is available

543 名前:デフォルトの名無しさん :2007/01/14(日) 22:33:24
クラスの、privateな変数でも、外から読み書きができちゃうことはあるんですか?
例えばこんな感じで

class Hoge {
private:
  int num;
} hoge;

main() {
  int *i = reinterpret_cast<int *>(&hoge);
  *i = 123;
}

544 名前:デフォルトの名無しさん :2007/01/14(日) 22:37:48
そりゃー無理やりやれば、書き換えられるだろ。

545 名前:デフォルトの名無しさん :2007/01/14(日) 22:40:00
鼻から悪魔が出てくる〜

546 名前:デフォルトの名無しさん :2007/01/14(日) 23:35:45
#define private public

547 名前:デフォルトの名無しさん :2007/01/14(日) 23:42:51
>543
そこまでして自分の足を撃たなくても……
reinterpret_castは実装依存だよ。

548 名前:デフォルトの名無しさん :2007/01/15(月) 00:34:26
#define class struct

549 名前:デフォルトの名無しさん :2007/01/15(月) 00:36:42
>>548
こうすれば確かにいちいち
#define private public
とかしなくてもOKだよな。目からウロコだぜ

550 名前:デフォルトの名無しさん :2007/01/15(月) 00:41:05
デフォルトのアクセス指定が変わるだけで、>>543には無意味。
もっとも、キーワードを置き換えてる時点で鼻からスパゲッティだが

551 名前:デフォルトの名無しさん :2007/01/15(月) 10:33:15
VC上で、他のプロジェクトでも使いまわせるような
API的関数(それぞれが無関係な関数)を何個か作ってるんですけど、
こういうのって、やはり「API的関数群」のような名前のクラスを作って、
すべてをstaticなメンバ関数にするべきなのでしょうか?
それとも、Cのようなグローバル関数群にしてしまうべきなのでしょうか?

552 名前:デフォルトの名無しさん :2007/01/15(月) 10:39:40
>>551
namespace使うとか


553 名前:デフォルトの名無しさん :2007/01/15(月) 10:51:19
>>551
まずAPIの意味調べような?
漏れは便利系メソッドは全部namespace utilityに突っ込んでる。
しかしほとんどの便利系メソッドはよく探せばWin32APIとか
使えるならboostとかにほとんど揃ってるんで
utility名前空間が膨れ上がる事はまずない。

554 名前:デフォルトの名無しさん :2007/01/15(月) 11:07:33
>>552-553
即レスありがとうございます。
namespaceを使うということは、基本的には
「staticメンバ関数クラス」ではなく「グローバル関数群」のほうになるのですよね。

555 名前:デフォルトの名無しさん :2007/01/15(月) 11:20:04
GNUリンカが「Undefined Symbols」になっているもので
__Z11とか__M11とかが頭にあるものが出てくるのですが、
これはどんな種類のシンボルなのですか。

556 名前:デフォルトの名無しさん :2007/01/15(月) 11:23:01
デバッグのやり方教えてクレー
ソースを一行ずつ動くようなやつ
visual c++ とかボーランドで出来る?

557 名前:デフォルトの名無しさん :2007/01/15(月) 11:35:48
>>556
普通にできるから。

558 名前:デフォルトの名無しさん :2007/01/15(月) 11:46:08
>>557
教えてクレー

559 名前:デフォルトの名無しさん :2007/01/15(月) 12:12:31
スレ違い

560 名前:デフォルトの名無しさん :2007/01/15(月) 14:43:14
>>555
つ[c++filt]

561 名前:デフォルトの名無しさん :2007/01/15(月) 16:46:24
>>555
っデマングル
っextern "C"

562 名前:デフォルトの名無しさん :2007/01/15(月) 21:14:34
よく鼻からうんことか言ってる人がいますが、
なんか意味があるのでしょうか?

563 名前:デフォルトの名無しさん :2007/01/15(月) 21:23:21
ウンコの力

564 名前:デフォルトの名無しさん :2007/01/15(月) 21:39:48
>>554
まず名前空間の意味調べような?
>基本的には「staticメンバ関数クラス」ではなく「グローバル関数群」のほう
意味わからん。基本的って何や。基本でない場合どうなるんや。
しいて言うなら「utility関数群」。グローバル名前空間は汚染されない。



565 名前:デフォルトの名無しさん :2007/01/15(月) 21:40:10
>554
・classは閉じていてnamespaceは開いている
・classはアクセス制御できる
という違いがあるから、そこを良く考えて選ぶと良いよ。

566 名前:デフォルトの名無しさん :2007/01/16(火) 18:55:44
ちょっと教えてほしいのですが、数値計算の結果をfor構文の中でファイルに記述するようにしているのですが
なんとなく実行速度が遅いような気がして、小耳に挟んだ話だと逐一HDDにアクセスしていることが起因しているそうなのですが、
計算結果を貯めておいて、最後に一度に書き出すにはどうすればいいのでしょうか?
C++暦は1ヶ月程度ですが、参考サイト等教えていただければ幸いです。
どうかよろしくお願いいたします。

567 名前:デフォルトの名無しさん :2007/01/16(火) 18:57:51
>>566
とりあえずファイルにどう出力しているか書いて。

568 名前:デフォルトの名無しさん :2007/01/16(火) 19:39:41
最近はOSのライトバックキャッシュに埋まるんでないの?

569 名前:デフォルトの名無しさん :2007/01/16(火) 20:00:02
>>566
std::ostreamやらstdioやらを使ってるんならライブラリでバッファリングされるし
それでなくとも今時のOSならOSレベルでバッファリングされる
実際に逐一ディスクI/Oが発生することは無いはずよ

570 名前:デフォルトの名無しさん :2007/01/16(火) 20:08:40
>567
int _tmain(){
ofstream fout("data1.txt");
for(int c=0 ; c<100 ; c++){
fout<<c<<"回目です。"<<endl;}
fout.close();}

のような感じです。見やすさを考慮して実際の数値計算式は省いています。

>568
OSはXPProです。申し訳ありません、私にはわかりません。

>569
なるほど。だとすると私程度のレベルでは特に意識する必要はなさそうですね。

レスありがとうございます。


571 名前:デフォルトの名無しさん :2007/01/16(火) 20:09:36
#include "stdafx.h"
#include <math.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <complex>
#using <mscorlib.dll>
using namespace System;
using namespace std;

書き忘れました。すいません。

572 名前:デフォルトの名無しさん :2007/01/16(火) 20:15:31
endlは'\n'とかにすると多少変わるかもね


573 名前:デフォルトの名無しさん :2007/01/16(火) 20:15:42
>>570
必要がなければcloseなんて自分で呼ぶ必要はないぞ。
デストラクタで勝手にcloseされる。

574 名前:デフォルトの名無しさん :2007/01/16(火) 20:40:46
>572
早速試してみます。

>573
それは初耳でした。以降そのように記述します。

アドバイスありがとう。

575 名前:デフォルトの名無しさん :2007/01/16(火) 20:44:19
endlってファイルストリームでもフラッシュするんだっけか
だとしたら'\n'に変えて動作速くなる可能性は高そう

576 名前:デフォルトの名無しさん :2007/01/16(火) 21:02:29
>>571
どーでもいいがなんだってmscorlib.dllなんて使ってるんだ
managed C++か?

そのコードなら別に.NET非依存で完全にnativeだから、そんなものは要らないぞ


577 名前:デフォルトの名無しさん :2007/01/16(火) 21:15:54
endlを'\n'に変更してみましたが私の環境において短時間の計算では優位な差は確認できませんでした。
次は長時間の計算で比較してみたいと思います。

>576
C++の基本事項を参考にしたサイトが使用していたため、そのままコピペで使っていました。
省略しても問題なく動き、コンパイル時間が短縮できました。ありがとうございます。

578 名前:デフォルトの名無しさん :2007/01/16(火) 21:23:45
逐次出力の処理速度とか細かいことはあまり気にしないほうがええで。
始めたばかりならC++の言語仕様やその他にも学ぶべき有意義なことが沢山あるはず。

579 名前:デフォルトの名無しさん :2007/01/16(火) 21:35:04
>>566
そもそもファイルに書き込まないと速くなるのかね?
君のへちょい数値計算が遅い可能性は皆無?

580 名前:デフォルトの名無しさん :2007/01/16(火) 21:49:56
>578
そうですね。仰るとおりです。一通り扱えるよう勉強します。

>579
すいませんが、わかりません。
もちろん私の書いたものが遅い可能性もあります。

みなさんありがとうございました。これほど親身になってアドバイスいただけるとは思っても見ませんでした。
私の知識不足もあり、質問には答えられないところもありましたがどうか容赦下さい。
当面は幅広くC++を学んでいきたいと思います。また機会がありましたらよろしくお願いいたします。


581 名前:デフォルトの名無しさん :2007/01/16(火) 21:57:33
そもそもiostreamが重いという話がある。

582 名前:デフォルトの名無しさん :2007/01/16(火) 21:59:31
まぁ、性能を云々するんなら、脳内だけで想像せずに
プロファイルを取るべきだな

583 名前:デフォルトの名無しさん :2007/01/16(火) 22:26:27
初めて1ヶ月ぐらいならば、
まだ他に学ぶべきことがいっぱいあるだろうから気にすることも無いと思うけどね。

584 名前:デフォルトの名無しさん :2007/01/16(火) 22:50:42
なにこのループするバッファ

585 名前:デフォルトの名無しさん :2007/01/16(火) 23:25:16
>>580
>すいませんが、わかりません。
えええ… ファイルの書き込みしてる部分コメントアウトすればいいじゃない…

586 名前:デフォルトの名無しさん :2007/01/16(火) 23:30:53
std::stringstream ss にまとめて出力しておき、最後に
fout << ss.rdbuf(); すると少しは速くなるかもしれない。
実験してないけど。

587 名前:デフォルトの名無しさん :2007/01/16(火) 23:31:28
あ、foutはバイナリで開いておいてね。

588 名前:デフォルトの名無しさん :2007/01/16(火) 23:33:51
>>586
>>582

589 名前:デフォルトの名無しさん :2007/01/17(水) 00:02:08
>585
あぁそういう意味でしたか。よくわかっていませんでした。確かにそれで差を見るのが一番根本的だなと
気がつきました。夜は電力来ないのでまた明日詳しく試してみます。ありがとう。

ファイルに記述するにしてもいろいろな方法があるのだなとただただ驚くばかりです。
ただ、折角英知を頂いても私があまり理解できないのが残念です。
頂いたコメントは全て保存しておき後日理解が深まってから再度確認させていただきます。
皆様ありがとうございました。

590 名前:デフォルトの名無しさん :2007/01/17(水) 01:21:10
>>588
やってみな。
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>

int main()
{
std::stringstream ss;
const int N = 100000;
DWORD d;

std::ofstream ofs("1.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ofs << i << "回目です。" << std::endl;
std::cout << (timeGetTime() - d) << "ms." << std::endl;
ofs.close();

ofs.open("2.txt", std::ios::out | std::ios::binary);
d = timeGetTime();
for (int i = 0; i < N; i++)
ss << i << "回目です。" << std::endl;
ofs << ss.rdbuf();
std::cout << (timeGetTime() - d) << "ms." << std::endl;
}

591 名前:デフォルトの名無しさん :2007/01/17(水) 01:23:27
>>588
おっとっと。バイナリモードで開くと、0x0d0aにならずに0x0aにしか
ならないのでテキストモードで開く必要があるな。
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>

int main()
{
std::stringstream ss;
const int N = 100000;
DWORD d;

std::ofstream ofs("1.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ofs << i << "回目です。" << std::endl;
std::cout << (timeGetTime() - d) << "ms." << std::endl;
ofs.close();

ofs.open("2.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ss << i << "回目です。" << std::endl;
ofs << ss.rdbuf();
std::cout << (timeGetTime() - d) << "ms." << std::endl;
}

592 名前:デフォルトの名無しさん :2007/01/18(木) 07:02:21
http://www.open-std.org/jtc1/sc22/wg21/
News 2007-01-16: C++ Standard Core Language Issues List (Revision 45) is available

593 名前:デフォルトの名無しさん :2007/01/18(木) 14:24:08
namespace impl
namespace detail
ってどう使い分けるのが普通なのでしょうか?


594 名前:デフォルトの名無しさん :2007/01/18(木) 14:30:58
Koenig Lookupに気を付ければどのように使ってもよい。

595 名前:デフォルトの名無しさん :2007/01/18(木) 22:23:59
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
どうなんでしょうか

596 名前:デフォルトの名無しさん :2007/01/18(木) 22:48:35
有名な joke だね。本人もいたくお気に入りらしいぜ。

597 名前:デフォルトの名無しさん :2007/01/19(金) 19:10:17
それのK&R版もあったはず。こいつの下の方か。
http://www.genpaku.org/realprogrammerj.html

598 名前:デフォルトの名無しさん :2007/01/19(金) 21:20:57
>>597
これを読んでビールが飲みたくなった。

599 名前:デフォルトの名無しさん :2007/01/19(金) 23:53:03
ほげ
 ふが
  もげ
 ぱも
  むも
   ぴよよ
こんな感じでインデントされたテキストを
インデントごとに構造体に読み込みたいんですが
さっぱりわかりません
struct text{
 char* str;//行のデータ
 text* childs;//自分よりも一つだけインデントされているデータ
};
読み込みは
while(ifs.getline(buf,_MAX_PATH)){}
みたいなループなのに、データ構造は再帰的なので
もしかしてスタックとか使わないといけないんでしょうか
何か方針でもいいので教えていただけませんか
お願いします

600 名前:デフォルトの名無しさん :2007/01/19(金) 23:59:43
>>599
そう思うんならスタック使って書けよ。

601 名前:デフォルトの名無しさん :2007/01/20(土) 00:23:03
自分と同じ深さのやつは?

602 名前:デフォルトの名無しさん :2007/01/20(土) 00:54:06
>>599
どう見てもツリーになるんだから、その構造ではダメだろ、考え直せ

603 名前:デフォルトの名無しさん :2007/01/20(土) 01:49:20
.注.:.私.の.有.意.義.な.発.言.に.対.し.、.自.分.の.理.解.不.足.を.棚.に.上.げ.煽.り.、.1.行.レ.ス
.で.返.す.方.が.多.い.よ.う.で.す.が.、.そ.の.よ.う.な.方.は.ス.レ.の.皆.様.を.混.乱.さ.せ.る.だ.け.で.な.く
.ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い.の.で.お.黙.り.下.さ.い.。
.ま.た.質.問.者.は.回.答.者.に.知.識.を.披.露.す.る.場.を.与.え.る.貴.重.な.存.在.な.の.で.、
.質.問.者.を.見.下.し.た.回.答.、.あ.ま.り.に.も.儀.礼.を.欠.い.た.回.答.も.厳.重.に.禁.止.い.た.し.ま.す.。
.忙.し.い.中.、.少.な.い.時.間.の.合.間.を.縫.っ.て.質.問.し.に.来.て.る.わ.け.で.す.の.で.、
.そ.の.辺.ご.承.知.下.さ.い.。.な.お.、.当.方.が.質.問.に.対.し.て.有.意.義.な.答.え.で.あ.る.と
.判.断.し.た.方.に.は.評.価.い.た.し.ま.す.の.で.各.自.よ.く.調.べ.、.よ.く.考.え.正.確.な.回.答.を.す.る.よ.う.に.。

604 名前:デフォルトの名無しさん :2007/01/20(土) 01:52:32
>ス.レ.の.皆.様.を.混.乱.さ.せ.る.だ.け.で.な.く
>.ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い

>>603
まさにお前のことだなw

605 名前:デフォルトの名無しさん :2007/01/20(土) 02:05:32
どう見てもツリ

606 名前:デフォルトの名無しさん :2007/01/21(日) 16:28:10
どうみてもツリー

607 名前:デフォルトの名無しさん :2007/01/21(日) 16:35:59
>>11
>>16
>>31
>>33
>>357
>>361
>>603

608 名前:デフォルトの名無しさん :2007/01/21(日) 16:38:43
603 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

609 名前:デフォルトの名無しさん :2007/01/21(日) 22:19:58
C++ 5.5.1なんですが
ファイルの途中の行を編集する関数ってありますか?
例えば10行あるうちの3行目だけを置換できるもの

やっぱり入力ファイルを読みながら出力ファイルに書き込むしか
方法はないんですか?
教えて下さい


610 名前:デフォルトの名無しさん :2007/01/21(日) 22:29:48
>>609
C++ 5.5.1 ってなんだ?
とりあえず答えは、全部書くしかない。10行のテキストぐらいならまったく問題ないだろう。

611 名前:デフォルトの名無しさん :2007/01/21(日) 22:47:24
>>609
1行ずつリストに突っ込んで3行目のを消して別の突っ込めば

612 名前:デフォルトの名無しさん :2007/01/21(日) 23:04:12
>>609です
レスどうもです
残念ですが頭からやります


613 名前:デフォルトの名無しさん :2007/01/21(日) 23:43:48
環境依存だけどメモリマップトファイル使えば出来るんじゃないかな。

614 名前:デフォルトの名無しさん :2007/01/22(月) 02:12:51
>>613
サイズが変わらないならね

615 名前:デフォルトの名無しさん :2007/01/22(月) 03:12:06
グローバルなinline関数を作りました。
(.hに定義して、.cppで処理を書いてます).
この関数が定義された、同じソースファイル内では使えますが、
他のファイルで使うと、コンパイルは成功しますが、リンクに失敗します(外部参照が未解決
inlineを使わないと成功します。
inlineを使った場合、同じソース内のみで使用可能ということですか?
それとも、定義等の仕方が悪いのでしょうか。

616 名前:デフォルトの名無しさん :2007/01/22(月) 03:15:56
.h de teigi

617 名前:デフォルトの名無しさん :2007/01/22(月) 04:41:14
>>615
ヘッダに関数の処理がないとだめですお。

618 名前:デフォルトの名無しさん :2007/01/22(月) 08:39:45
ヘッダに関数定義するのってなんか嫌くね?

619 名前:デフォルトの名無しさん :2007/01/22(月) 08:50:05
>>618
そう思うんなら inline にしなければいい。

620 名前:デフォルトの名無しさん :2007/01/22(月) 08:50:13
別に

621 名前:デフォルトの名無しさん :2007/01/22(月) 09:03:42
>>615
ファイル間最適化能力のあるコンパイラを使え。
#詳細は該当スレにて。

622 名前:デフォルトの名無しさん :2007/01/23(火) 23:16:39
例外処理のコーディングしてるんだけど、
C++だと例外クラスとか作ったりするのが一般的なのかな?


623 名前:デフォルトの名無しさん :2007/01/24(水) 03:30:11
>>622
はい。 std::exception を継承して作ってください。
よくある例外は標準ヘッダ stdexcept で定義されていますので、
そちらを使われるのがよいかもしれません。

624 名前:デフォルトの名無しさん :2007/01/24(水) 20:52:47
stlのを継承するってのは、
stlからの例外も一緒に取得で便利ってことですか?

625 名前:デフォルトの名無しさん :2007/01/24(水) 21:07:44
>>624
大本のところで全ての例外をcatchしたようなとき、
どんな例外が投げられるかわかっていないと、
例外が投げられたかとしか情報が得られないけど、
std::exceptionから派生していれば何がしかのメッセージは得られるから。

つまり、>>622の作ったライブラリを使う人にとって都合がいいから。

626 名前:デフォルトの名無しさん :2007/01/24(水) 21:15:09
ふぅん。ありがトン!

627 名前:デフォルトの名無しさん :2007/01/24(水) 21:40:17
std::exceptionの派生にすると、what()の実装に困るのがよくあるパターン。

628 名前:デフォルトの名無しさん :2007/01/24(水) 21:44:14
せめてwchar_t*を返したくなる

629 名前:デフォルトの名無しさん :2007/01/24(水) 21:59:18
std::exceptionを継承して、引数付きコンストラクタを作るのはOKですか?


630 名前:デフォルトの名無しさん :2007/01/24(水) 22:30:13
可能ならstd::runtime_errorかstd::logic_errorから継承したほうが
柔軟性が増して良いと思う。

>>629
例外発生時に別の例外を発生させ得ない操作だけを行うなら問題ない。

631 名前:デフォルトの名無しさん :2007/01/24(水) 23:10:51
すごく勉強になりましたありがとうーー

632 名前:デフォルトの名無しさん :2007/01/24(水) 23:19:41
マルチスレッドプログラムで、
どっかのスレッドで起きた例外を
別のスレッドで取得することってできるの?
例外が発生したスレッドを殺したいのだが。。。


633 名前:デフォルトの名無しさん :2007/01/24(水) 23:22:16
>>632
できない。
スレッド関数の根っこで catch(...) して終了させとけばいいだけじゃないの?

634 名前:デフォルトの名無しさん :2007/01/24(水) 23:27:44
>>633
やっぱりできないですか。
既にあるシステムで、スレッド関数たくさんあるから
そいつら全部に例外処理いれんの面倒だなーーーーとか
思ってたんで的外れとは思いましたけど質問させていただきました。


635 名前:デフォルトの名無しさん :2007/01/24(水) 23:29:24
>>634
スレッドの起動に使ってる関数を、最悪マクロで置き換えて、
実際に起動する関数は引数で渡された関数をラップするようにすれば
いいんじゃないか?

636 名前:デフォルトの名無しさん :2007/01/24(水) 23:40:02
>>632
なんか今、えらい人たちがそれについて
いろいろ考えてるみたいだ。俺には分からんがな

637 名前:デフォルトの名無しさん :2007/01/24(水) 23:43:39
>>635
それは頭良いですね。
ちょっとトリッキーだけど。。検討してみます

638 名前:デフォルトの名無しさん :2007/01/24(水) 23:45:23
マクロって……やめとけよ
王道はスレッドをラップするクラスを作ることだろ
ThreadとかRunnableとかさ

639 名前:デフォルトの名無しさん :2007/01/24(水) 23:48:23
>>638
Windowsだと
thisポインタが問題にならない?
_beginthreadでクラスのメンバ関数呼べるんだっけ?
ってスレ違いかな

640 名前:デフォルトの名無しさん :2007/01/24(水) 23:49:33
>>639
staticメンバ関数も知らないのか
C++を一から勉強しなおせよ

641 名前:デフォルトの名無しさん :2007/01/24(水) 23:52:37
>>640
いや、staticメンバ関数は知ってるけど。

>>638のいうThreadクラスを継承すんのかなと思ったから
Javaみたいに。

642 名前:デフォルトの名無しさん :2007/01/24(水) 23:55:19
static thunk(void*ptr){
static_cast<Thread*>(ptr)->run();
}
_beginthreadex( ...,thunk, static_cast<void*>(this),... );

定石だぜ?

643 名前:デフォルトの名無しさん :2007/01/24(水) 23:57:38
>>642
おおーーーすげーーーー
定石なのかー
何の本に載ってんの?
恥ずかしながら初めて見ました


644 名前:デフォルトの名無しさん :2007/01/25(木) 00:00:36
今時スレッドラップしてるC++のライブラリなんて腐るほどあるんだから
コード嫁よ

645 名前:デフォルトの名無しさん :2007/01/25(木) 00:00:44
スレッドに限らずウィンドウプロシージャをラップするときにも使ったりするね

646 名前:デフォルトの名無しさん :2007/01/25(木) 00:05:54
すげーー勉強になるなー
ライブラリはあんま読んだことないけど
自分よりスキルある人が作ってんだから勉強になるだろうな
今度読んでみます

647 名前:デフォルトの名無しさん :2007/01/25(木) 00:07:20
何のライブラリが参考になるかお母さんみたいに教えてくれ

648 名前:デフォルトの名無しさん :2007/01/25(木) 00:12:38
それって、run()の中からメンバ変数にもアクセスできるのですか?
ちょー便利そうなんだけど

649 名前:デフォルトの名無しさん :2007/01/25(木) 00:38:35
不確かな知識でスレッド使ってどつぼにはまれ

650 名前:デフォルトの名無しさん :2007/01/25(木) 00:42:39
>>648
C++ でスレッドやるときは大抵皆そういうことしてると思うんだけど。
Windows だったら各種のコールバック(lpParamとかとる奴)でも同じ
技法を使うことが多いと思う。

651 名前:デフォルトの名無しさん :2007/01/25(木) 01:28:12
なるほど目から鱗です

652 名前:デフォルトの名無しさん :2007/01/25(木) 06:06:59
僕は鱗がはがれました

653 名前:デフォルトの名無しさん :2007/01/25(木) 08:20:52
必然的に思いつくようなパターンだと思うが

654 名前:デフォルトの名無しさん :2007/01/25(木) 13:01:36
>>652
ドライアイですか?

655 名前:デフォルトの名無しさん :2007/01/25(木) 14:22:03
いいえ、ドライスキンです

656 名前:デフォルトの名無しさん :2007/01/25(木) 19:31:33
わたしは鮫肌です

657 名前:デフォルトの名無しさん :2007/01/25(木) 21:27:33
クラス内のスタティック関数を
ポリモルフィズムしたいのですが
どうすればいいですか?

658 名前:デフォルトの名無しさん :2007/01/25(木) 21:34:23
static のかわりに virtual つけれ。

659 名前:デフォルトの名無しさん :2007/01/25(木) 21:40:51
いえ、スタティック関数がいいのです

660 名前:デフォルトの名無しさん :2007/01/25(木) 21:42:42

ポリモルするクラスAを作って、仮想関数内でstatic関数を呼ぶ

661 名前:デフォルトの名無しさん :2007/01/25(木) 21:59:53
ええーー

662 名前:デフォルトの名無しさん :2007/01/25(木) 22:14:42
CRTPとかシングルトンパターンの応用とかどうだろう。

663 名前:デフォルトの名無しさん :2007/01/25(木) 22:44:14
自分のクラスのスタティックメソッドへのポインタを返す仮想関数を作るとか?

664 名前:デフォルトの名無しさん :2007/01/25(木) 23:32:34
>>660
ありがとうございました。解決しました

665 名前:デフォルトの名無しさん :2007/01/25(木) 23:36:10
ポリモルって何かかわいい

666 名前:デフォルトの名無しさん :2007/01/25(木) 23:39:54
魔法少女ポリモル

667 名前:デフォルトの名無しさん :2007/01/26(金) 01:51:17
ポリモルフィズム  ポ  ピ  パ

668 名前:デフォルトの名無しさん :2007/01/26(金) 03:12:14
マジカルクラス インヘリット!

669 名前:デフォルトの名無しさん :2007/01/26(金) 05:28:23
使い魔「スタチック=キャスト」

670 名前:デフォルトの名無しさん :2007/01/26(金) 10:19:44
猫でもわかるCを読み終わり、
C++についてや、中級者向けの踏み込んだ知識が欲しいと思ってます。
レビューなどを調べまわった結果、EffectiveC++がいいかなと思っているのですが
よろしければ助言を頂けないでしょうか

671 名前:デフォルトの名無しさん :2007/01/26(金) 10:50:43
>>670
とりあえず「憂鬱なプログラマのためのオブジェクト指向開発講座」でも読んどけ。
つか、Effective C++はある程度C++知ってる人間が読まんと意味ない本だぞ。

672 名前:デフォルトの名無しさん :2007/01/26(金) 12:52:52
>>671
遅レスすみません
先にオブジェクト指向勉強しないと駄目なんですね
それを読んだ後に独習C++を読んでみることにします
ありがとうございます<(_ _)>

673 名前:デフォルトの名無しさん :2007/01/26(金) 13:01:17
あと書けよ。ひたすら書け。絵と同じだ。
デッサンした数が実力にモロに影響する。

674 名前:デフォルトの名無しさん :2007/01/26(金) 13:04:38
ありがとうございます。
ではさっそく裸体をデッサンしてみます。

675 名前:デフォルトの名無しさん :2007/01/26(金) 13:21:08
うはwテラマングりんぐww 


ごめん言ってみたかっただけ

676 名前:デフォルトの名無しさん :2007/01/26(金) 14:27:45
魔法少女C++
ポリモル   横山智佐
インヘリット 丹下桜
コンスト    折笠愛
ハゲ      若本規夫



677 名前:デフォルトの名無しさん :2007/01/26(金) 16:00:10
声優の選び方が渋いってか、一世代古いな。

双子キャラのバインド・ファースト、バインド・セカンドは田中理恵で。

678 名前:デフォルトの名無しさん :2007/01/26(金) 16:30:26
キャラクター紹介

ポリモル

OOの国から偽装派遣されてきた魔法少女。
OO厨を増やそうと悪事に励むが失敗ばかり。

インヘリット

真のOOの継承者。
OOの国とは敵対関係にありながら
ポリモルを改心させようとOOの真実を説く。

コンスト

OOの国の創造主。
崩壊の進むOOの国を救うため
指揮命令系統を無視してOO厨の獲得をポリモルに命じる。

679 名前:デフォルトの名無しさん :2007/01/26(金) 16:45:47
お騒がせロリキャラのミュータブル(愛称は"みゅー")もな

680 名前:デフォルトの名無しさん :2007/01/26(金) 17:04:04
この番組は
株式会社すとらうすとらっぷ
の提供でお送りします。

681 名前:デフォルトの名無しさん :2007/01/26(金) 17:05:10
第1話 ポリモル大地に立つ


682 名前:デフォルトの名無しさん :2007/01/26(金) 17:26:37
おまえら二次裏あたりでやれ。


683 名前:デフォルトの名無しさん :2007/01/26(金) 18:14:52
同意。

684 名前:デフォルトの名無しさん :2007/01/26(金) 19:09:47
使い魔

スタチック=キャスト
厳格でお節介な禿キャラ

リ・インタープリット=キャスト
乱暴者でトラブルメイカーな禿キャラ

コンスト=キャスト
殺意の波動に目覚めた禿キャラ

ダイナミック=キャスト
物知りな禿キャラ

685 名前:デフォルトの名無しさん :2007/01/26(金) 20:33:44
>>684
ワロタ

686 名前:デフォルトの名無しさん :2007/01/26(金) 20:38:23
ポリモルするポインタをvectorに格納すると不具合が起きますか?
shared_ptrを使うか迷っているのですが。

687 名前:デフォルトの名無しさん :2007/01/26(金) 20:45:24
お前が心配しているようなことはデストラクタが仮想関数になっていれば問題ない。
でも、例外安全を考えるとstd::vector<boost::shared_ptr<> >か、boost::ptr_vector<>がお勧め。

688 名前:デフォルトの名無しさん :2007/01/26(金) 20:52:09
魔法少女ポリモル
http://pc10.2ch.net/test/read.cgi/prog/1169812216/


689 名前:デフォルトの名無しさん :2007/01/26(金) 21:11:57
>>687
C++ Coding Standardsという本にshared_ptrが良いと書いてあったものでお聞きしました。
何の不具合がおきるかは書いていなかったのですが。
boostにしてみます

690 名前:デフォルトの名無しさん :2007/01/26(金) 22:30:45
protected 非仮想ってどういうこと?
継承したクラスから呼べないんじゃリークするじゃん??
ポリモルタン教えて?

691 名前:デフォルトの名無しさん :2007/01/26(金) 22:31:34
すみません。基本クラスのデストラクタの話です。

692 名前:デフォルトの名無しさん :2007/01/26(金) 22:39:32
継承したクラスから呼べないってのは、どういうことだ?

693 名前:デフォルトの名無しさん :2007/01/26(金) 22:42:00
アップキャストして使うな、ってことだろ。

694 名前:デフォルトの名無しさん :2007/01/26(金) 22:45:30
デストラクタを仮想関数にする理由は、主に派生クラスのオブジェクトを基底クラスのポインタを通じてdeleteされる場合のため。
protected/private継承にしておけば、基底クラスへの変換は封じられるので問題ない。

695 名前:デフォルトの名無しさん :2007/01/26(金) 22:46:13
デストラクタをprivate仮想にするのは分かりますが、
どんなときにprotected非仮想にするのか分かりません。
使い方も分からない。

696 名前:デフォルトの名無しさん :2007/01/26(金) 22:47:36
たとえば、unary_functionそのものとか?

697 名前:デフォルトの名無しさん :2007/01/26(金) 23:10:37
忘れてください

698 名前:デフォルトの名無しさん :2007/01/26(金) 23:39:39
>695
protected: 継承することが前提
非仮想: 多態して使わない。仮想テーブルを使用しない。

と言う事で、protected非仮想destructorは
 そのクラスから派生して使用する(基本クラスにする)けれども、
 そのクラスのポインタとしては(多態的には)deleteしない
つうことですな。

さらに言うと、仮想関数を使用しない場合は仮想関数テーブルをまったく使用しないため
インスタンスのサイズがコンパクト&メソッドが高速というメリットもありんす

699 名前:デフォルトの名無しさん :2007/01/26(金) 23:50:10
別に言語仕様上そんなこともできるとだけ思っておいてもいいと思うよ。
俺もprotected非仮想なデストラクタを持つクラスなんて、
作ったこともないし見たこともない(と思っているだけで気付いていないだけかもしれないが)。

700 名前:デフォルトの名無しさん :2007/01/27(土) 00:10:09
>699
確かにポリシー的な使い方がほとんどですな。
使う時はprotected非仮想コンストラクタとセットかな。


701 名前:デフォルトの名無しさん :2007/01/27(土) 00:56:10
スマートポインタとペアで使えばいいんじゃないの?
protected非仮想デストラクタなインスタンス。


702 名前:デフォルトの名無しさん :2007/01/27(土) 01:22:31
>>698
基本クラスから継承させるけど、
Base* b=new Derived();
じゃなくて、
Derived* d=new Derived();
って使えということですか。なるほど。ややこしいですね

>>701
意味がよく分かりません....


703 名前:デフォルトの名無しさん :2007/01/27(土) 01:39:19
>702
いや、それはOK……というよりもそうしなきゃ基本クラス使う意味無いじゃない。

Base* b=new Derived();
delete b;
がNGなだけ。

704 名前:デフォルトの名無しさん :2007/01/27(土) 02:16:58
>>703
レスありがとうございます
となると、bはどうやって解放したらよいのですか?

705 名前:デフォルトの名無しさん :2007/01/27(土) 02:28:26
単純にいけるのかなーと思ってstatic_cast<Derived*>してみたけど規格としてもOK?
まあ俺はそういうクラスに触る機会ないからわかんないけど

706 名前:デフォルトの名無しさん :2007/01/27(土) 02:35:54
>>702
ttp://cppemb.blog17.fc2.com/blog-entry-23.html
ここの後半あたり読むといいかも

707 名前:デフォルトの名無しさん :2007/01/27(土) 02:41:15
>>702
ttp://www.zeroscape.org/cgi-bin/wiki/wiki.cgi?page=shared_ptr+minor+features
あとこことか
まさに>>703の状態をsmartポインタで回避できるのはなぜかがかかれてる.



708 名前:デフォルトの名無しさん :2007/01/27(土) 03:02:07
>>706=707さん
ありがとうございました。よく分かりました。
shared_ptr deleterのテンプレートの使い方にびびりました
すごい

709 名前:デフォルトの名無しさん :2007/01/27(土) 05:34:56
int **a[100][100];
この宣言があってるのか、疑問なんですが、
4次元配列を動的に確保したのですが、どうしたらいいのかわかりません。
どうしたらいいのでしょうか?

言語はC++です。


710 名前:デフォルトの名無しさん :2007/01/27(土) 05:44:57
(int**)つまりint型のポインタのポインタが10000個。

・a[num]もしくはa[num][num]が指すのは(int**)型。
・*a[num]が指すのは(int*)型。
・**a[num]はint型。

711 名前:デフォルトの名無しさん :2007/01/27(土) 05:55:31
偉そうな事書いてみたけど実はそんなに詳しくなかったり。

int ****a,i;
const static int
_0=20,
_1=50,
_2=90,
_3=12;

a=new int***[_0];
for(i=0;i<_0;++i){
*a=new int**[_1];
}
for(i=0;i<_1;++i){
**a=new int*[_2];
}
for(i=0;i<_2;++i){
***a=new int[_3];
}

712 名前:デフォルトの名無しさん :2007/01/27(土) 07:38:41
>>710 >> 711
ありがとうございます!わかりました〜


713 名前:デフォルトの名無しさん :2007/01/27(土) 08:59:06
もはやCじゃん

714 名前:デフォルトの名無しさん :2007/01/27(土) 09:46:26


715 名前:デフォルトの名無しさん :2007/01/27(土) 10:16:32
もはやCoremadekaじゃん

716 名前:デフォルトの名無しさん :2007/01/27(土) 11:27:15
そして712はメモリリークに悩まされるのであった...

717 名前:デフォルトの名無しさん :2007/01/27(土) 11:38:10
>>711
むちゃくちゃやな、これ。

718 名前:デフォルトの名無しさん :2007/01/27(土) 13:00:06
普通にvector使えばいいんじゃない? >709
vector<vector<vector<vector<int> > > >

サイズはresizeで確保するのが簡単ですな。

719 名前:デフォルトの名無しさん :2007/01/27(土) 13:05:03
>>711
これはひどい

720 名前:デフォルトの名無しさん :2007/01/27(土) 13:15:01
>>711
IOCCCでやれ

721 名前:デフォルトの名無しさん :2007/01/27(土) 14:33:44
Cをちゃんとやれと勧めるべきか、
Cは忘れてC++やれと勧めるべきか…。

722 名前:デフォルトの名無しさん :2007/01/27(土) 15:03:28
こんな感じ?
再帰を使えばもっときれいになるのか?

#include <iostream>
using namespace std;

int main()
{
    int n1=5,n2=10,n3=15,n4=20;  
    int v=0;
    int**** a;
    a=new int***[n1];
    for(int i=0;i<n1;i++){
        a[i]=new int**[n2];
        for(int j=0;j<n2;j++){
            a[i][j]=new int*[n3];
            for(int k=0;k<n3;k++){
                a[i][j][k]=new int[n4];
                for(int l=0;l<n4;l++){
                    a[i][j][k][l]=v++;
                }
            }
        }
    }
    return 0;
}

723 名前:デフォルトの名無しさん :2007/01/27(土) 15:12:00
PHPの超便利配列(?)をするにはどうしたらよいですか?
こんなの
a['takahashi'][id]=n
a['takahashi'][age]=50


724 名前:デフォルトの名無しさん :2007/01/27(土) 15:12:55
>>723
PHPを使えばおk

725 名前:デフォルトの名無しさん :2007/01/27(土) 15:19:12
>>723
std::map

726 名前:デフォルトの名無しさん :2007/01/27(土) 15:21:17
C++からphp.exeを呼ぶことにしました

727 名前:デフォルトの名無しさん :2007/01/27(土) 15:31:22
あ、ありえん

728 名前:wankuma :2007/01/27(土) 15:35:58
http://blogs.wankuma.com/

729 名前:ららら :2007/01/27(土) 17:28:50
メンバ関数ポインタのオーバーロードを解決するには、
どうしたらいいでしょうねぇ。

SomeClass some;
MethodCaller<SomeClass>::Class(some, &SomeClass::Func);

SomeClass::Func がオーバーロードされている場合、
コンパイルエラーになってしまうんです。

730 名前:ららら :2007/01/27(土) 17:30:19
>>729
ごめんなさい。関数名が分かりにくいので訂正。

× MethodCaller<SomeClass>::Class(some, &SomeClass::Func);
○ MethodCaller<SomeClass>::Call(some, &SomeClass::Func);


731 名前:デフォルトの名無しさん :2007/01/27(土) 18:03:31
これって何するものですか?

732 名前:デフォルトの名無しさん :2007/01/27(土) 18:09:15
明示的にキャストするとか

733 名前:ららら :2007/01/27(土) 18:11:07
>>731
た・と・え・ば、の話。
役に立つコードかどうかは別の話ということで。

734 名前:デフォルトの名無しさん :2007/01/27(土) 18:12:56
オーバーライドした子クラスの関数から、同名の親クラスの関数を呼ぶには、
void ChildClass::Method() {
  this->ParentClass::Method();
}
ですか?

735 名前:デフォルトの名無しさん :2007/01/27(土) 18:16:06
>>734
ParentClass::Method()
inherited::Method()とか書けたら良かったのに

736 名前:デフォルトの名無しさん :2007/01/27(土) 18:24:44
>>734
そうだよ

737 名前:ららら、むじんくん♪ :2007/01/27(土) 18:25:57
 

738 名前:デフォルトの名無しさん :2007/01/27(土) 18:27:18
偉そうな奴だな

739 名前:デフォルトの名無しさん :2007/01/27(土) 19:07:33
会話が飛んでる? とおもったらコテかよ


740 名前:デフォルトの名無しさん :2007/01/27(土) 20:22:32
コーディングの暗黙の了解的な事に関して質問です。

単なるデータ構造を定義する場合は構造体を用いると思いますが、
構造体内に簡単なデータチェックやユーティリティー関数を定義する場合、クラスとするべきなのでしょうか?

例えば、

struct Date {
int nMonth;
SetMonth( int nParamMonth ) {
if ( nParamMonth < 0 || nParamMonth > 12 ) {
nMonth = DEFAULT_MONTH;
} else {
nMonth = nParamMonth;
}
};
int nDay; //以下略。。。
};

みたいな場合は、クラスと「すべき」なんでしょうか。

741 名前:デフォルトの名無しさん :2007/01/27(土) 20:33:24
会社なりプロジェクトなりでコーディングスタンダードがあれば別だが、
基本的には好きにしろボケの一言。

メンバ変数が0でoperator()しかないファンクタの類をstructにするとか普通だし。

742 名前:デフォルトの名無しさん :2007/01/27(土) 20:33:29
あくまでもデータ構造に主眼がおかれているのであれば
構造体で良いのではないだろうか。

743 名前:デフォルトの名無しさん :2007/01/27(土) 20:34:31
>>741
それはいちいちpublic書きたく無いからじゃないかね>ファンクタ

744 名前:デフォルトの名無しさん :2007/01/27(土) 20:39:35
ありがとうございます。
好きにさせて頂きます。

745 名前:デフォルトの名無しさん :2007/01/27(土) 20:52:20
結論が出ちゃった後だが
俺もclass+publicとstructが同じって概念があれば構わないと思う。
だからインタフェースをstructで定義するもありだと思ってる。


746 名前:デフォルトの名無しさん :2007/01/27(土) 21:12:36
漏れは、内部を隠蔽するものをclassに、全部公開するものをstructにしている。

747 名前:デフォルトの名無しさん :2007/01/27(土) 21:20:39
template<class T, class U = typename remove_const<T>::type>
struct hoge
{ };

つまり one keyword, one functionalityということだ

まあ正直どうでもいいと思う

748 名前:デフォルトの名無しさん :2007/01/27(土) 21:56:40
新これならわかるC++挫折しないプログラミング入門というのを見ながら

#include <iostream>

int main()

{

std::cout << "Hello!" << std::endl;

}

ていうのを書いてあるとおりにしたらエラーなんですけど何が違うのでしょうか?
いきなり挫折しそうです(汗)

749 名前:デフォルトの名無しさん :2007/01/27(土) 22:05:31
エラーの中身を書かない人には(掲示板を使うのは)難しい

750 名前:デフォルトの名無しさん :2007/01/27(土) 22:21:23
エラー E2209 hello.cpp 1:インクルードファイル'iostream'をオープンできない
エラー E2290 hello.cpp 7:型限定子'std'がクラス名または名前空間ではない(関数
 main())
エラー E2379 hello.cpp 7:ステートメントにセミコロン(;)がない(関数 main())

これが中身なんですけど・・・


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.