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


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

C++相談室 part15
751 名前:748 :03/02/15 13:43
それなら
struct Hoge {};
class { Hoge hoge; int v; ...};

Hoge* one::set()
{
 //いろいろ
 return &hoge;
}
でいいのではないかな

752 名前:デフォルトの名無しさん :03/02/15 13:45
ていうかこの人、基礎知識の部分でヤバイ気がしますが

753 名前:746 :03/02/15 13:48
一週間前に初めてクラス使ったので、スマンね。


754 名前:746 :03/02/15 14:01
クラスの中に構造体を定義して今まで作ったコードを書き直すのが面倒くさいから
やりたくない。てっとりばやくコードを書き直して
base1には100をbase2には200入れたいというだけ。
static使ってるからだと分かってるけど、
使わないと構造体のポインタを返しても、構造体のインスタンスがなくなるから
しょうがなく使おうとしてるけど、別の方法が無いか聞いてるだけ。


755 名前:デフォルトの名無しさん :03/02/15 14:10
むしろきちんと書き直さないと余計はまりそうな
つーか、てっとりばやくってんなら、staticではなくローカル変数にして
アドレスではなく実体を返すのが問題少なくていいんじゃないすかね。

756 名前:746 :03/02/15 14:13
>>755
本に構造体はポインタで返すとか書いてたから
わざわざポインタでやってたんだけど、
変数でも返せる?

757 名前:748 :03/02/15 14:14
一番手っ取り早いと思うのだけどな。どう面倒くさくなるのだろう。
ポインタでなくても、構造体のサイズがそんなにデカくないなら
値返しでもいいと思うけど。


758 名前:デフォルトの名無しさん :03/02/15 14:16
>>754
OOPを学習・理解して書き直したほうが
貴方にとって長期的な利益につながると思われ

759 名前:746 :03/02/15 14:37
>>757
メンバを構造体に入れてメンバ変数を放っておくと
100万要素の配列3つが倍になって無理。
だから元のメンバ変数を削除しないといけないけど、
クラスの全部の変数に構造体のstruct.をつけるのは面倒でいやということ。

>>758
○○Pって何?
知っといた方がいいものなら、知っておきたいけど。


760 名前:デフォルトの名無しさん :03/02/15 14:39
>>746
君、もしかして new を知らないだけでは?

761 名前:デフォルトの名無しさん :03/02/15 14:39
>>759
どういう構造を表現しようとしてるのかよくわからんや。
ともかく
OOPってのはObject Oriented Programming, オブジェクト指向プログラミングってこと

762 名前:デフォルトの名無しさん :03/02/15 14:46
VisualC++.netのインストールに1時間40分もかかるとは思っていなかった。
それ以前にVisualC++.netにあんなに金がかかるとは思っていなかった。

763 名前:746 :03/02/15 14:51
>>760
newは他の部分では使いまくってるけど、
newを使ってクラスの中で配列を定義しようとしたら、
エラーになるから使えないと思ってた。
クラス定義の中でnew使える?

>>761
クラスの定義は次の通り。
class one_image
{
protected:
// メンバ変数
int HSize, VSize; // 画像の横サイズ、縦サイズ
u_char red[4000*2000];
u_char green[4000*2000];
u_char blue[4000*2000];
int base_x, base_y; // 基準点の座標
int corner_x[4], corner_y[4]; // 角の4点の座標
double edge_inclination[4], edge_interception[4]; // 縁の4辺の傾き、切片
int num_pixel; // 横サイズ×縦サイズ
public:
メンバ関数が5〜6個ある
};

764 名前:デフォルトの名無しさん :03/02/15 14:52
class A {}; // ←ほんとはもっと複雑。
A foo() {
  return A();
}
ってのがあるとき、

void var() {
  A a = foo();
}
ってやったら、クラスAのインスタンスを返すことができました。
クラスAのコピーコンストラクタが起動しなかったし、
また a の寿命がつきる時に foo()の返したオブジェクトも死にました。

なんかめちゃめちゃ不思議で便利な振る舞いだな、って思ったのですが、
これってVC++特有の振る舞いなのでしょうか?

765 名前:748 :03/02/15 14:55
void one::set(Hoge*) の形にするとか。

766 名前:デフォルトの名無しさん :03/02/15 14:56
>>763
JAVAとかやってました?
class A {
  char* buf2 = new char[10]; // エラー。
  char* buf2; // ポインタだけ宣言しといて
  A() { // コンストラクタで確保。
    buf2 = new char[10];
  }
};


767 名前:746 :03/02/15 15:14
>>765
最初はそのような形にしてたけど、それだと
構造体Hogeの初期化をしないとエラーが出るし、
かといって初期化するのは面倒だから、先のような形にしたというわけ。

>>766
言語はCしか知らないからJAVAは分からないけど、
コンストラクタで定義するという手があったわけね。
どうも。


768 名前:デフォルトの名無しさん :03/02/15 15:19
>>767
わかってるとは思うけど、Javaの場合は開放が不要だけど
C++ではデストラクタで開放も必要ね

769 名前:デフォルトの名無しさん :03/02/15 17:13
>>764
それはまっとうなC++コンパイラならどれもやってること。
A foo() {
return A();
}
という関数 foo() を呼び出すとき、コンパイラはスタックとかに
戻値用の領域を確保してそのアドレスを foo() に渡している。
foo() は return のときにそのアドレスにオブジェクトを構築する。

770 名前:デフォルトの名無しさん :03/02/15 17:20
んで、
A a = foo();
のような呼び出しの場合は、作ろうとしているオブジェクト a の
アドレスが直接 foo() に渡されるから、一時オブジェクトが作られる
こともない。非常に効率的。

771 名前:デフォルトの名無しさん :03/02/15 17:29
A foo() {
 A a;

 ...

 return a;
}

だとコピーになるかというと。

772 名前:764 :03/02/15 17:43
>>769-771
詳しい解説アリガト!

使いまくるょ!

773 名前:C++厨 :03/02/15 18:10
今日ナンバーズ諸々を1800円分買っちまった
17日はまだか?

774 名前:デフォルトの名無しさん :03/02/15 18:17
More Effective C++ 項目20:戻り値最適化の促進
あたりは参考になると思われますです。ハイ。

775 名前:デフォルトの名無しさん :03/02/15 18:34
クラスに関数 f() を追加する テンプレートを作りたいので以下のようなコードを書きました。
template < class T > class foo : public T {
 public:
  foo() : T() { }
  void f() { }
};
しかし、これだとTの引数なしコンストラクタしか呼び出せません。
基底クラスのpublicなコンストラクタ全てをpublicで継承させるにはどうしたらよいのでしょうか。

776 名前:デフォルトの名無しさん :03/02/15 18:51
f() を持ったクラスを作って、それを継承させたらあかんのん?

777 名前:デフォルトの名無しさん :03/02/15 19:43
>>763
const auto_ptrを勉強してくれ・・・
そのクラスは、余りにも酷すぎる。

778 名前:デフォルトの名無しさん :03/02/15 19:46
>>763
やっぱりC++から勉強すべきだったね。残念だ。

779 名前:デフォルトの名無しさん :03/02/15 19:49
>>763
「Accelerated C++」あたりの本を読んでみるのは如何。
http://www.amazon.co.jp/exec/obidos/ASIN/4894714221

780 名前:デフォルトの名無しさん :03/02/15 19:56
>>777
auto_ptrを勉強すると、763のコードはどうなるの?

ぼくは、 763 のクラスは、
class pixel {
u_char red, green, blue;
}
とか
class point {
int x,y;
}
とかってクラスをつくって、
one_image内部でそれを使用するようにして定義しなおすだけで、
別に見にくくもなくなるような気がする。

781 名前:デフォルトの名無しさん :03/02/15 19:58
>>780
で、std::vector<pixel>で保持、だよね。
num_pixelは不要(vectorのsize()で分かる)

782 名前:デフォルトの名無しさん :03/02/15 20:20
C挫折したのでC++を勉強します


783 名前:デフォルトの名無しさん :03/02/15 20:56
>>782
それは…

784 名前:デフォルトの名無しさん :03/02/15 21:31
てーか、漏れと同じじゃん。

785 名前:デフォルトの名無しさん :03/02/15 21:52
えっとぉ、JavaとC++は同じなんですよね?
Javaの質問にも答えてくれますか?

786 名前:デフォルトの名無しさん :03/02/15 21:53
>>785
違います

787 名前:デフォルトの名無しさん :03/02/15 22:04
try {
//....
}
catch ( ... ) {

}
catch (std::exception& e) {

}
catch (std::bad_cast) {

}

スウトラウスストラップが、上記のコードでは
2番目と3番目のcatchブロックは決して
実行されないって書いているんだけど本当?
(C++3版 p427)

exceptionの派生クラス bad_cast が投入された
ときには、3つともすべてのcatchブロックが実行
されるんじゃないの?

後者2つのcatchブロックで、それぞれ基底クラス
と派生クラス、双方の例外処理を行いたい場合は
どうしたら良いんですか?



788 名前:デフォルトの名無しさん :03/02/15 22:06
じじぃの言うことに嘘はない

789 名前:デフォルトの名無しさん :03/02/15 22:10

ま、嘘はないんだろうけど、^^;
派生クラス部分のメンバ変数の修復処理と、基底クラス部分のメンバ
変数の修復処理を別々のcatchブロックでやりたい場合は、一般的に
どうしてるのかなと思いまして。




790 名前:デフォルトの名無しさん :03/02/15 22:15
再throw

791 名前:デフォルトの名無しさん :03/02/15 22:24

再throwするには、try がネスト構造になってないと
ダメですよね。そう言う風に設計しるってことですか。



792 名前:デフォルトの名無しさん :03/02/15 22:55
質問です。

#include <iostream>
using namespace std;

class j {
public:
 int a;
 int & operator*() {
  cout << "[*()]";
  return a;
 }
 int * operator->() {
  cout << "[->()]";
  return &(operator*());
 }
};

void main() {
 j i;
 i.a = 100;
 cout << "@ i = " << *i << endl;
 j *p = new j();
 p->a = 101;
 cout << "@ p = " << **p << endl;
}

のとき operator->() を呼出すにはどうしたらよいでしょうか。


793 名前:デフォルトの名無しさん :03/02/15 22:58
(*p)->

794 名前:デフォルトの名無しさん :03/02/15 23:01
>>793
顔文字? B-)

795 名前:デフォルトの名無しさん :03/02/15 23:09
>>793
ありがとうございます。

cout << "@ (*p)-> = " << (*p)-> << endl;
を付け加えたところコンパイルで

g++ j.cc -o j
j.cc: In function `int main(...)':
j.cc:40: parse error before `<'
となってしまいます。

なにかまずいところがありますでしょうか。


796 名前:デフォルトの名無しさん :03/02/15 23:18
.

797 名前:792です。 ◆ZtXjKqCmiQ :03/02/15 23:20
792です。
#include <iostream>
using namespace std;

class j {
public:
 int a;
 int & operator*() { cout << "[*(j)]"; return a; }
 int * operator->() { cout << "[->(j)]"; return &(operator*()); }
};

class d {
public:
 j a;
 j & operator*() { cout << "[*(d)]"; return a; }
 j * operator->() { cout << "[->(d)]"; return &(operator*()); }
};

void main() {
 d *n = new d();
 n->a.a = 102;
 cout << "@ (*n)-> = " << (*n)->a << endl;
}

としたところ
@ (*n)-> = [->(d)][*(d)]102
となり class d の -> は呼ばれましたが class j の -> を呼ぶ方法はないのでしょうか。

798 名前:デフォルトの名無しさん :03/02/15 23:23
i.operator->();
p->operator->();

799 名前:デフォルトの名無しさん :03/02/15 23:24
>>797
-> の結果が構造体(クラス)へのポインタじゃない場合、表記しようがない気が

800 名前:799 :03/02/15 23:25
>>798
おっと、それでいけるね。

801 名前:792です。 ◆ZtXjKqCmiQ :03/02/15 23:27
>>798
すばらしい。ありがとうございました。
今夜は寝られそうです。

>>799
そうかもしれません。

802 名前:デフォルトの名無しさん :03/02/16 00:35

class File_ptr {
FILE* p;
public:
operator FILE*() { return p;}
};

(C++3版 p428)

このオペレータの意味がわかりません。
なんか戻り値ないのに、return p してるし。

これを呼び出すには、どうしたらいいのですうか?
あるいは、これが呼び出されるのは、どういう場合ですか?



803 名前:デフォルトの名無しさん :03/02/16 00:37
File_ptr fptr;
FILE* p = fptr; // <- ここ

804 名前:デフォルトの名無しさん :03/02/16 00:39
>>802
(FILE*) にキャスト汁!のときでは?

805 名前:デフォルトの名無しさん :03/02/16 01:14
>>803-804
ありがとうございます。
なるほど、キャストですか。

p328 に解説がありました。


806 名前:デフォルトの名無しさん :03/02/16 13:41
>>789
>>787のコードでは、
> 派生クラス部分のメンバ変数の修復処理と、基底クラス部分のメンバ
> 変数の修復処理を別々のcatchブロックでやりたい
ということが見えないんだけど。もうちょっとわかりやすい例を書いてよ。

807 名前:デフォルトの名無しさん :03/02/16 20:06
万策尽きました。何方かアドバイスお願いします。

以下のようなコードで無限ループになてしまって、しかもファイルの中味はちゃんとあるのにbufの内容がなにも表示されない場合どのような原因が考えられるでしょうか。(in は ifstream* in となってます)


char buf[256];

if (!in->is_open()) exit(1); // ここでは終了しないのでファイルは開けてる

while (!in->eof()) {
in->getline(buf, sizeof(buf));
cout << "[loop] " << buf << endl;
}


開発環境は以下の通りです。
$ gcc -v
/usr/lib/gcc-lib/i386-redhat-linux/3.2/specs から spec を読み込み中
コンフィグオプション: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib --enable-__cxa_atexit
スレッドモデル: posix
gcc バージョン 3.2 20020903 (Red Hat Linux 8.0 3.2-7)


808 名前:デフォルトの名無しさん :03/02/16 20:16
>>807
そのコードで、eofbitがセットされる前にfailbitがセットされると、無限ループする。

809 名前:807 :03/02/16 20:46
808さん有り難うございます。助かりました。
エラーチェックが不充分だったようですね。

ちなみに以下のサイトが参考になりましたので同じような問題で悩んでる加田は是非見てみて下さい。
http://www.kurumi.sakura.ne.jp/~kumicyou/cplusplus/0906.html


810 名前:デフォルトの名無しさん :03/02/16 21:47
スマートポインタの実装時に、配列かそうでないかで、
例えば boost なら shared_ptr と shared_array に分けていますが、
配列でないポインタを new hoge[1] して、配列として管理することの
問題点はなんですか?

811 名前:デフォルトの名無しさん :03/02/16 21:48
delete と delete[] を間違えちゃぁいけねぇ。

812 名前:デフォルトの名無しさん :03/02/16 23:55
>>807
もう一つ。eofbitが立つのは、getline()を実行してみてからでないとわからない。
だから

while (true) {
in->getline(buf, sizeof(buf));
if (!in) break;
cout << "[loop] " << buf << endl;
}

と書かないとね。

813 名前:デフォルトの名無しさん :03/02/16 23:55
windowsに標準で付いているサウンドレコーダーのように
マイクから音声を取り込んでる最中にその音量を表示したいのですが、
どのようにしたらいいか分かりません。
waveIn系のAPIを使って調べるしかないのでしょうか?
どなたか分かる方よろしくお願いします。

814 名前:デフォルトの名無しさん :03/02/16 23:57
>812
>in->getline(buf, sizeof(buf));
>if (!in) break;

無限ループか、coreの予感

815 名前:デフォルトの名無しさん :03/02/16 23:58
>>813
ここで聞いても無駄だから、素直にWin32APIスレとかに逝け。

816 名前:デフォルトの名無しさん :03/02/17 00:11
>>814
スマソ。
if (!*in) break;
だった。これでもダメか?

817 名前:デフォルトの名無しさん :03/02/17 00:17
failbitとeofbitって共存可能だろ?

818 名前:813 :03/02/17 00:22
>>815
スレ違いでごめんなさい
そっち逝ってきます

819 名前:デフォルトの名無しさん :03/02/17 00:23
>>817
別々なフラグだから、メンバ関数eof()とfail()で調べられる。
しかしeofbitが立つ時は同時にfailbitも立つから、普通は
operator void*()で調べてる。

820 名前:デフォルトの名無しさん :03/02/17 00:27
正否の判定が operator bool() でなく operator void*() なのは
どうしてだらう。

821 名前:デフォルトの名無しさん :03/02/17 00:30
まあそれは色々と事情が在るんだよ・・・

822 名前:デフォルトの名無しさん :03/02/17 00:34
ぶーるだとたちざんとかできちまうってこった

823 名前:デフォルトの名無しさん :03/02/17 00:40
bool→intの格上げを規格に入れたのはなぜだ?
void*→int*は禁止したくせに。

824 名前:810 :03/02/17 00:50
>>811
ごめんなさい。たぶん説明がたりなかったかも。
前提として new と delete がクラス内で閉じてるってのがありました。
ユーザーが勝手に delete するのまで考慮するのならともかく、
new と delete がクラス内で完結するのなら、
全部配列でもいいんじゃないかと思ったわけです。
ただ、そういう実装を見たことがないので、ちょっと聞いてみただけです。
Loki のスマートポインタも、boost の様に配列かそうでないかで
使い分けるのも、面倒くさいのです。

825 名前:デフォルトの名無しさん :03/02/17 01:07
分かった! こいつはとんでもない勘違いしてたぜ!!
ひゃっほう!!

826 名前:デフォルトの名無しさん :03/02/17 01:24
なんとなく分かったような分からないような。。operator void*() が
呼び出されるようなコンテキストで、ifstream が + や - の被演算数
になる状況って実際のところあるのでしょうか。

827 名前:デフォルトの名無しさん :03/02/17 01:28
浮動小数型の扱いについてですが、
float型で変数定義して、ループ使って0.001×1000したら
1にはならないわけですが、この理由を説明せよ って問題です。
どう説明すればイイでしょうか?


828 名前:デフォルトの名無しさん :03/02/17 01:32
>>827
宿題スレに池

829 名前:デフォルトの名無しさん :03/02/17 01:36
>>827
小数点以下の数の扱いについて、IEEEの資料を嫁。

830 名前:デフォルトの名無しさん :03/02/17 01:38
>>827
0.001は2進数では循環小数になるから。これでいいか?

831 名前:デフォルトの名無しさん :03/02/17 02:37
>>824
だからって全部配列にするのはエレガントさに欠けるだろ。


832 名前:デフォルトの名無しさん :03/02/17 02:44
>>831
見られなければ、どうということはない

833 名前: :03/02/17 10:13
>>830
それ、本当?
1E-3 になるような気がするんだが。

834 名前:デフォルトの名無しさん :03/02/17 12:55
1e-3の何処が二進表現なのかと

835 名前:デフォルトの名無しさん :03/02/17 13:37
const の アドレスを返す関数があった場合,
そのアドレスはどうやって保持すればいいのでしょうか?


836 名前:C++厨 :03/02/17 14:05
どういうこと?

837 名前:デフォルトの名無しさん :03/02/17 15:48
すみません質問です
C言語の最高の可能性って何処まであるんですか?

838 名前:デフォルトの名無しさん :03/02/17 15:50
無限に努力すれば無限の可能性が秘められています。

839 名前:デフォルトの名無しさん :03/02/17 16:01
質問です。よろしくお願いします。
二つ目のtemplate関数は通るのにどうして三つ目のtemplate関数は
テンプレート関数はすでに定義されています
というコンパイルエラーが出るのでしょうか?コンパイラは VC++6 Sp.5 + STLport です

template <typename VectorType>
void print(std::vector<std::vector<VectorType> >& obj) {
  for ( unsigned long i=0; i<obj.size(); ++i ) {
    for ( unsigned long j=0; j<obj[i].size(); ++i ) {
      cout << obj[i][j] << ",";
    }
  }
}

template <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
  for ( std::list<ListType>::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
    for ( std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
      cout << *lit2 << ",";
    }
  }
}

template <typename ListType>
void print(std::vector<std::list<ListType> >& obj) {
  for ( unsigned long i=0; i<obj.size(); ++i ) {
    for ( std::list<ListType>::iterator lit=obj[i].begin(); lit!=obj[i].end(); ++lit ) {
      cout << *lit << ",";
    }
  }
}


840 名前:デフォルトの名無しさん :03/02/17 16:20
>>839

template <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
for ( std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for ( std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}

841 名前:839 :03/02/17 16:49
>840
すいません typo です。
それでもエラーは消えません。
よろしくお願いします。

842 名前:デフォルトの名無しさん :03/02/17 16:59
>>841
これでどうだ?

template <typename VectorType>
void print(std::vector<std::vector<VectorType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for ( unsigned long j=0; j<obj[i].size(); ++i ) {
std::cout << obj[i][j] << ",";
}
}
}

template <typename ListType>
void print(typename std::list<std::list<ListType> >& obj) {
for (typename std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for (typename std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}

template <typename ListType>
void print(std::vector<std::list<ListType> >& obj) {
for ( unsigned long i=0; i<obj.size(); ++i ) {
for (typename std::list<ListType>::iterator lit=obj[i].begin(); lit!=obj[i].end(); ++lit ) {
std::cout << *lit << ",";
}
}
}

843 名前:デフォルトの名無しさん :03/02/17 17:02
若干修正。

template <typename ListType>
void print(std::list<std::list<ListType> >& obj) {
for (typename std::list<std::list<ListType> >::iterator lit1=obj.begin(); lit1!=obj.end(); ++lit1 ) {
for (typename std::list<ListType>::iterator lit2=lit1->begin(); lit2!=lit1->end(); ++lit2 ) {
std::cout << *lit2 << ",";
}
}
}

844 名前:デフォルトの名無しさん :03/02/17 17:09
禿の書いたSpecialEditionの日本語版はありますか?

845 名前:sage :03/02/17 17:27
>>839
一箇所 ++i ぢゃなく ++j だろとかしょーもないツッコミはおいといて
多分 VC++ 6 のバグ。ソース見た目どこも悪くない。
bcc5.5 と gcc-3.2.2 の両方で (修正後) 正しく実行できたよ。


846 名前:デフォルトの名無しさん :03/02/17 17:31
>>839
SP7をあてろ。


847 名前:デフォルトの名無しさん :03/02/17 17:32
>>844
一生読まなくて良い。

848 名前:デフォルトの名無しさん :03/02/17 17:41
>>847
なんで!!??

849 名前:デフォルトの名無しさん :03/02/17 17:47
>>847 はストラウストラップ

850 名前:デフォルトの名無しさん :03/02/17 17:48
C++なんて使うなあほ。

851 名前:デフォルトの名無しさん :03/02/17 17:49
>>847
おい禿! 日本語分かるのなら日本語版もお前が書け!

852 名前:デフォルトの名無しさん :03/02/17 18:08
ストラウストラップ先生の頭に油性マジックで
「ぬるぽ」って書いてみたい(;´Д`)ハァハァ

853 名前:デフォルトの名無しさん :03/02/17 18:08
>>847はスプラウト

854 名前:839 :03/02/17 18:10
>842 がんばってもらってすいません。やっぱりコンパイルエラーです。

>845 了解しました。どうもありがとうございます。

>846 SP7探したんですけど見つかりませんでした。どこにあるんですか?

855 名前:C++厨 :03/02/17 18:25
>>851
どうぞ。
http://etc.2ch.net/denpa/

856 名前:デフォルトの名無しさん :03/02/17 18:26
>>855
お前がその板に言った方がいいんじゃなくて?('-'*)

857 名前:C++厨 :03/02/17 18:30
もう帰ってこないでくださいね。
迷惑ですんで。

858 名前:デフォルトの名無しさん :03/02/17 18:32
>>857
なんでこいつはこんなに怒っているんだろう

859 名前:デフォルトの名無しさん :03/02/18 05:18
iostreamをseekさせるマニュピレーターってある?

860 名前:デフォルトの名無しさん :03/02/18 08:26
>>859
自作しれ。

861 名前:デフォルトの名無しさん :03/02/18 14:33
動的配列って、
intArray = new int[10]; delete [] intArray;
みたいに書けますよね。

reallocみたいなこと出来ますか?

862 名前:デフォルトの名無しさん :03/02/18 14:34
>>861
できないのでstd::vectorのほうが便利

863 名前:デフォルトの名無しさん :03/02/18 14:37
thanx!>>862
でも、内部に持つ予定の、計算ライブラリが、double配列しか受けてくれないし。
計算ライブラリに値を渡す前に、数も可変で。

で、配列であって、かつSTLみたくなって欲しいんですけど、
std::vectorって、もしかして配列として扱える?

864 名前:デフォルトの名無しさん :03/02/18 15:01
逆に、C++でnew使わずに、alloc realloc使ってたら変?

865 名前:C++厨 :03/02/18 15:04
変。

866 名前:デフォルトの名無しさん :03/02/18 15:07
>>863
vectorは一般的な実装なら(vector<bool>以外)
先頭要素のアドレスを渡せば配列のように連続した並びとして使える。
ただし規格で保証されてない、実装依存の使い方になっちゃうけど。

867 名前:デフォルトの名無しさん :03/02/18 15:09
規格で保証されてないんなら怖いな。
組み込み用目立コンパイラだし、STL完動か分からないし。

868 名前:デフォルトの名無しさん :03/02/18 15:17
doubleのような基本型に限定して、malloc/reallocでやるのが無難かね
それをラップしたクラス作るといいんかな。

869 名前:デフォルトの名無しさん :03/02/18 15:20
ラップしたクラス希望。

870 名前:C++厨 :03/02/18 15:48
自分で作れ。


871 名前:デフォルトの名無しさん :03/02/18 15:51
std::vectorの内部表現が素の配列と互換性を持つことは標準の補遺で
保証されている。

872 名前:デフォルトの名無しさん :03/02/18 16:24
なんだーそうなんだ。>>871

じゃあ、std::vector使う。

873 名前:デフォルトの名無しさん :03/02/18 16:28
>>872
明示的に呼び出すrealloc()と違い、std::vectorは突然サイズの拡張が
かかったりするから、ポインタではなくiteratorを呼び出して使う方がよい。
サイズが拡張すると、多分今まで指してたポインタは無効になる。

874 名前:デフォルトの名無しさん :03/02/18 16:34
>>873
push_backしたり、insertしたり、resizeしなければサイズの拡張はないわけだが。

875 名前:861 :03/02/18 16:40
>>874
あ、そういう仕様なんだ。分かりやすいね。

参照や代入するときはポインタ。
データを追加や破棄するときなんかするときは、iteratorってことね。

876 名前:デフォルトの名無しさん :03/02/18 16:43
>>875
代入する前にresizeしておく事を忘れずにね。
配列みたいな使い方したいんだったら。

877 名前:861 :03/02/18 16:48
ラジャー>>876

STLのメソッドってresizeで統一されてるみたいだけど、
addとかdeleteとかで統一のんが格好良い。
もしかして、add/deleteもあります?

878 名前:デフォルトの名無しさん :03/02/18 16:49
>>877
ない
push_backやeraseで統一

879 名前:デフォルトの名無しさん :03/02/18 16:53
例えばこんな感じ。やっぱり使いやすいね。

int main()
{
std::vector<int> v(10);
int* p;

p = &v[0];
for (int i = 0; i < 10; i++, p++) {
*p = i;
}
// v[10] = 1; // エラー
v.resize(11);
v[10] = 1; // OK
for (std::vector<int>::iterator pos = v.begin(); pos != v.end(); ++pos)
std::cout << *pos << std::endl;
}

880 名前:デフォルトの名無しさん :03/02/18 16:55
>>875
std::vectorの内容をポインタで扱うのはCで書かれたライブラリやAPIを
呼び出すときだけ。他の場合は常にメンバ関数もしくはiteratorを使え。


881 名前:デフォルトの名無しさん :03/02/18 16:57
>>880
つーことは>>879はあまりよくない例なわけだ

882 名前:デフォルトの名無しさん :03/02/18 16:58
質問です

そろそろC++の勉強しようかと思ってます。
どれくらいで身に付くでしょうか?

ちなみにVB、Delphiは経験有ります。

kylixでXWindowのサーバーソフトを制作経験もあります。

DelphiやったことあるならC#の方がいいですかね?
メモリ管理も容易そうだし。

883 名前:C++厨 :03/02/18 17:00
>>882
帰れ。

884 名前:デフォルトの名無しさん :03/02/18 17:01
>>883
なんで?

885 名前:デフォルトの名無しさん :03/02/18 17:04
>>884
C++厨は脳内アボンしてくれ

886 名前:デフォルトの名無しさん :03/02/18 17:04
>>882
で、お前はなんのためにC++の勉強がしたいんだ?

887 名前:C++厨 :03/02/18 17:07
>>883
誰だ、お前。

>>882
経験と良本があるなら半年くらいでは

888 名前:デフォルトの名無しさん :03/02/18 17:15
経験ありますってのはかじったってこと?
その調子じゃ、どれも身につかないような気がするな

889 名前:デフォルトの名無しさん :03/02/18 17:25
>>888
学生の頃、DOSのCならやったことあります。


890 名前:デフォルトの名無しさん :03/02/18 17:27
>>882
やめとけ! そんな質問するようなバカには一生かかってもムリだ。

891 名前:C++厨 :03/02/18 17:38
>>890
そういうこと

892 名前:デフォルトの名無しさん :03/02/19 06:17
class foo
{
...
public:
 void f();
};
class bar : pblic foo
{
public:
 void f(int);
};
となっている場合で、
bar c;
c.f()
でVC6では不正な引数個数エラーがでるんですがコンパイラがバカですか?

893 名前:デフォルトの名無しさん :03/02/19 07:07
using

894 名前:デフォルトの名無しさん :03/02/19 07:38
>>892
派生クラスで(引数違いでも)同じ名前のメンバ関数を定義した場合
自動的に親クラスのものはアクセスできなくなるよ。
>>893が言うように、アクセスできるようにするには、usingを使う。
class bar: public foo
{
public:
 using foo::f;
 void f(it);
};

C++第3版「15.2.2 継承とユーザー宣言」参照

895 名前:デフォルトの名無しさん :03/02/19 11:10
mainがC言語の場合、C++のエラー処理って便利ですか?

C言語からcatch出来るのか、とか知りたいです。

BCBの場合、throw Exception("文字列");とか出来ますが、
標準では、throw exception;でエラー内容入らないんですよね?

896 名前:デフォルトの名無しさん :03/02/19 11:21
> C言語からcatch出来るのか
できない。

> 標準では、throw exception;でエラー内容入らないんですよね?
std::type_info::name()で種類、std::exception::what()で内容を伝えることができる。

897 名前:デフォルトの名無しさん :03/02/19 11:33
>> C言語からcatch出来るのか
>できない。
てことは、mainはC++が良いわけだね。

898 名前:デフォルトの名無しさん :03/02/19 11:35
>std::type_info::name()で種類、std::exception::what()で内容を伝えることができる。

throwのコード希望。

899 名前:デフォルトの名無しさん :03/02/19 11:45
>>895
ふつー、 throw std::runtime_error("hogehoge");


900 名前:デフォルトの名無しさん :03/02/19 12:46
グローバルインスタンスなどの初期化の為にmain()はC++でかくのが望ましい、
とC++3rdにあったような気がするが記述が見つからん。

901 名前:デフォルトの名無しさん :03/02/19 12:49
C++ FAQ―C++プログラミングをきわめるためのQ&A集
Marshall Cline, Greg Lomow, Mike Girou
ピアソン・エデュケーション ISBN: 489471194X

のErrataのページが閉鎖されているよ〜。
http://www.inarcadia.co.jp/~kana/がないよ〜。
だれかErrataもってないか?


902 名前:デフォルトの名無しさん :03/02/19 12:56
pure virtual member を作らずに、抽象クラスを定義できますか?

いまのところ 下の様に代用しています。
class A の foo を宣言するのが面倒なのです。
ちなみに
   A のインスタンスを持ちたい時は A を継承したクラスを定義しなさい
   A を継承する時は必ず B も同時に継承しなさい
ってことを書いてみようと思います。

class A
{
private:
virtual void foo() = 0; // ←邪魔な感じ
};

class B
{
public:
virtual void foo() = 0;
}

class AB : public A, B
{
public:
virtual void foo(){}
};

903 名前:デフォルトの名無しさん :03/02/19 13:13
メソッドのインターフェースだけベースクラスに持たせる場合って、
virtualですよね。
でも、その中の実装しなくても良いですよ、っていうメソッドはどうするんでしたっけ。

904 名前:デフォルトの名無しさん :03/02/19 13:18
>>902
根本から設計腐ってるんじゃないかって気がするが。
一応あるクラスのインスタンスを直接生成されることを防ぐだけなら
コンストラクタをprotectedにしておけばいい。
特定のクラスからしか継承されたくなければコンストラクタをprivateに
した上でfriendで継承していいクラスを指定。


905 名前:デフォルトの名無しさん :03/02/19 13:19
>>903
virtual void foo() = 0;

906 名前:903 :03/02/19 13:24
>>905
何故かBorland C++ 5.02Jでは、
>エラー : Test.cpp(171,18):Class 'B' is abstract because of 'B::Comp() = 0'
となるよ。

907 名前:デフォルトの名無しさん :03/02/19 13:25
>>906
= 0 は pure virtual functionで、実装しないといかんからね
実装しなくてもいいってのは作れない。
virtual void foo() {}
のように、空の実装を用意しておけばいいわけだが。

908 名前:903 :03/02/19 13:29
なるほど。
>virtual void foo() {}
これはクラス宣言にも書けたような気がしたけど、
>virtual void foo() {};
だと、リンクで、
>致命的エラー: (1,1):Out of memory
になっちゃう。




909 名前:903 :03/02/19 13:51
間違いでした。
>virtual void foo() {};
でコンパイル通りました。

910 名前:デフォルトの名無しさん :03/02/19 13:54
>>909
そこの行末のセミコロンは無意味

911 名前:デフォルトの名無しさん :03/02/19 14:04
>= 0 は pure virtual functionで、実装しないといかんからね
>実装しなくてもいいってのは作れない。
「派生クラスで」という単語が抜けてるので完全に間違えているように見えるが

912 名前:デフォルトの名無しさん :03/02/19 14:11
>>911
質問は >>903 だから派生前提の文脈ってことで。

913 名前:デフォルトの名無しさん :03/02/19 14:27
>>912
了解

914 名前:デフォルトの名無しさん :03/02/19 15:35
MFC の CHttpFile でRead(void * lpBuf, UINT nCount)関数を使おうと思ったのですが
lpBuf のバッファの確保の仕方がわかりません。どうやったら確保できるのでしょうか。


915 名前:デフォルトの名無しさん :03/02/19 16:19
どうしてあえてMFCスレを避けてマルチするんだろう

916 名前:デフォルトの名無しさん :03/02/19 16:22
>>915
MFCな人が激減してるからでわ?

ところで、C++のmemset(&?, 0, sizeof(?))みたいなのは何がありますか?

917 名前::03/02/19 16:33
次スレのテンプレを少し整理しました。現スレのテンプレに足りないと
思われるものがありましたら、>>918-960の間に貼り付けてください。
よろしくお願いします。

918 名前:デフォルトの名無しさん :03/02/19 17:01
>>916
std::generate_n()

919 名前:デフォルトの名無しさん :03/02/19 17:02
>>916
いや単に 0 を代入するだけならstd::fill_n()の方がいいな。

920 名前:デフォルトの名無しさん :03/02/19 17:11
charのfillベンチ。やっぱりfill_nは効率が悪い。

memset = 34588
fill_n = 257876

intのfillベンチ。ほとんど差はない。

memset = 856209
fill_n = 843708

921 名前:デフォルトの名無しさん :03/02/19 19:21
なにをあたりまえの事を・・・

922 名前:デフォルトの名無しさん :03/02/19 22:15
何故intとcharでそんなに違うのか分からないので教えて下ちい。

923 名前:デフォルトの名無しさん :03/02/19 22:40
>>922
CPUのアーキテクチャによっても違うと思うが、例えばPen4では
char型は1バイトずつfillするのに対し、int型は4バイトずつfillできる。
memset()は元々何バイトずつかfillするように最適化されていると
思うから、多分データ型によって変化するfill_nではcharは不利
だったのだと思う。

これと反対の現象が、qsort()とstd::sort()で起きていた。qsort()
はバイトコピーらしく、char型のsortでは差はなかったが、int
やdoubleではstd::sortに水をあけられていた。

もちろんこれらの事はすべて処理系依存であるから一般的
な事は全く言えない。あくまでもベンチマークを取った特定の
環境の下での話。

924 名前:デフォルトの名無しさん :03/02/19 23:32
>922
まったく処理系依存だけれん
>923にくわえて
奇数アドレスのアクセスは遅いよん。
前はアクセスすらできんかったが・・・
charだと奇数アドレスに触りますよん。

925 名前:デフォルトの名無しさん :03/02/19 23:44
>>924
charなら偶数アドレスも奇数アドレスも変わらないのでは?
shortとかintとかなら遅いのはわかるけど。

926 名前:デフォルトの名無しさん :03/02/19 23:48
>>924
処理系依存の話ね。

基本的にマシンワード単位でマシンワード境界に合わせてアクセスすれば
どの処理系でも速い。

簡略化していうと、CPUは常にマシンワード単位でメモリにアクセスするので、
それより小さい単位でのアクセスは変換作業が入る。
ずれてるときはまたがる2ワードに対するアクセスになる。

で、「前は」ってどこの話よ(笑)
バスエラーが起きるかどうかは製品ラインごとに異なるもの。
intel内だってx86とitaniumで違うしね。

927 名前:デフォルトの名無しさん :03/02/19 23:51
>>925
いくらCコード中でcharでもレジスタはどうなん?
1BYTEのレジスタあるけど、厳密な意味で1BYTEとってんの?
int型のレジスタでとってマスクしてんじゃないの?

928 名前:デフォルトの名無しさん :03/02/19 23:53
680x0系のCPUは奇数アドレスからワード以上を読み出そうと
例外が発生していた。
Cでポインタを使ったプログラムを書く時も特別な注意が必要
だったような。そんなCPUはまどろっこしくて使えないワ!

929 名前:927 :03/02/19 23:53
>>926
あ、解説ありがたう


930 名前:デフォルトの名無しさん :03/02/20 00:04
便乗質問ですが、
32bit系のCPUでQWORDだとDWORDより早い気がするのは何故?
気のせい?

931 名前:デフォルトの名無しさん :03/02/20 00:11
>>930
32bit系って・・・386からPentium4の間でさえ10数年近くあるぞ

932 名前:930 :03/02/20 00:16
>>931
QWORDって出たのMMX以降でしたっけ?
早いのはパック命令のおかげですかな?汗やらんから・・・

933 名前:デフォルトの名無しさん :03/02/20 01:47
>>928
境界に沿わないアクセス許してるCPUの方が少ないと思うんだが。
IA-32の場合でも、例外にはならなくとも遅くなるから普通は避ける。

>>930
Pentium以降のデータバスは64bit。

QWORDの方が早い(速い、だろ?)って意味がわからんが、
パック命令は1命令で複数回の演算を行うんだから、
専用に最適化すれば速くて当たり前。

レジスタ <-> メモリ間の転送速度も、別にパック演算命令
使わんでも64bit転送を使えるんならそっちの方が速い。

つか、思いっきりスレ違いだな。

934 名前:デフォルトの名無しさん :03/02/20 11:10
クラスのメンバーにクラスを宣言すると、
メンバーのクラスの生成と破棄は自動で行われますか?

delphiだと、コンストラクタとデストラクタで自分でやらなきゃならなかったんですが。

935 名前:934 :03/02/20 11:13
後、分からないのが、staticでクラス変数宣言出来るのでしょうか。
やっぱ、クラスのポインタの変数宣言しか無理なのかな。

936 名前:デフォルトの名無しさん :03/02/20 13:07
>>934
まず質問する前にデバッガでコンストラクタとデストラクタの動きを追うがヨロシ。
staticなクラス変数は宣言できますが何か?


937 名前:934 :03/02/20 13:12
ごめんなさい。
コンパイルは両方出来ました。
後は、デバッガ。

というより、みんなどうしてんのかな。自分変なことしてないよな、を確認したかっただけです。

938 名前:デフォルトの名無しさん :03/02/20 14:35
質問スレ31の981です。
こんな質問をしたら

 981 名前 : デフォルトの名無しさん Mail : 投稿日 : 03/02/20 03:04

 STLのvectorについて質問です。
 fread()の様に配列にデータを流し込むタイプの関数からデータを受け取りたいのですが、

  vector<char> vc[100];
  fread(static_cast<void *>(&vc[0]), 100, 1, in );

 こんな感じで &vc[0]をポインタにして受け取っていいのでしょうか。

 983 名前 : デフォルトの名無しさん Mail : sage 投稿日 : 03/02/20 03:11

 >>982
 C++関連のスレいってログ嫁。

と言われてしまいました。
過去ログは一応探したつもりで、STLスレでfread()がらみの質問もあったのですが
それではきちんと整合が取れるか(size()を問い合わせたりしても正常に動くか)
までは言及されていないようでした。

ご存知の型、ご指導下さい。

939 名前:デフォルトの名無しさん :03/02/20 14:38
>>938
>vector<char> vc[100];

vc(100)です、質問スレ982も私が書いたもので
この訂正をしてあります。

940 名前:デフォルトの名無しさん :03/02/20 15:21
>>938
それは処理系依存なんでやらない方がよい。
begin〜endまでが連続したメモリー上にあるとは限らん。
素直に一時的なバッファを用意してやる方が吉。

941 名前:デフォルトの名無しさん :03/02/20 15:23
>>938

>>871
というのをどっかで読んだが、俺は使わないことにしてる

942 名前:デフォルトの名無しさん :03/02/20 16:41
Effective STL第2章参照

943 名前:デフォルトの名無しさん :03/02/20 16:41
>>940-941
レスありがとうございます。
こんなテストのコード書いてみると

 FILE *in = fopen("ファイル名", "rt");
 int filesize = 0;
 vector<char> vc;

 vc.clear();
 fseek( in, 0, SEEK_END );
 filesize = ftell(in);
 fseek( in, 0, SEEK_SET );

 printf("vector size : %d\n", vc.size());
 printf("vector capacity : %d\n\n", vc.capacity());
 
 vc.reserve(filesize);
 printf("vector size resized to %d\n\n", filesize);

 printf("vector size : %d\n", vc.size());
 printf("vector capacity : %d\n\n", vc.capacity());

 printf("-- fread() -- \n\n");

 fread(static_cast<void *>(&vc[0]), filesize, 1, in );

 puts(&vc[0]);
 printf("vector size : %d\n", vc.size());
 printf("vector capacity : %d\n\n", vc.capacity());



944 名前:デフォルトの名無しさん :03/02/20 16:41
結果

vector size : 0
vector capacity : 0

vector size resized to 366

vector size : 0
vector capacity : 366

-- fread() --

(略)、ファイルの中身が表示される

vector size : 0
vector capacity : 366

のように、sizeは0のままで、いつか破綻しそうで気持ち悪いですので
アドバイスのように自前でバッファを管理することにします。


945 名前:デフォルトの名無しさん :03/02/20 16:49
>>942
>Effective STL第2章参照

レスありがとうございます。
以前立ち読みはしたのですが、stringの便利さについては異議なしですが、
vectorはまだ便利さが理解できません。

Effective STLを見たところ、vectorを渡す、
つまりvectorから例えばconst char *に渡すときには
&v[0]でいいよ、ということは分かるのですが、
vectorにたいして書き込みたいときはどうするの?
ってことは書いていなかったような気がします。
もし、fwrite()を使いたいのならこれでいいのですが。

stringではoperator =があるので、代入も簡単ですが。

946 名前:デフォルトの名無しさん :03/02/20 16:54
>>945
P.74

947 名前:デフォルトの名無しさん :03/02/20 17:17
>>943
reserve() ではなくて resize() でしょ。

int main()
{
int filesize = 100;
std::vector<char> vc;

vc.clear();

std::cout << "vector size : " << vc.size() << std::endl;
std::cout << "vector capacity : " << vc.capacity() << std::endl;

vc.resize(filesize);
std::cout << "vector size resized to " << filesize << std::endl;

std::cout << "vector size : " << vc.size() << std::endl;
std::cout << "vector capacity : " << vc.capacity() << std::endl;
}

948 名前:デフォルトの名無しさん :03/02/20 17:27
ちなみに reserve() ってのは何かと言うと、std::vectorの要素数
を変更した場合は常にメモリの再割り当てが行われるわけでは
ない。

STLの実装にもよるが、通常 capacity() 以上の size() にしようと
すると、capacity() は size() の2倍のメモリを確保して再割り当て
するものが多い。

つまりは効率のため。要素を一個 push_back() する度に再割り当て
してたら遅くて仕方ないから、余裕を持ってメモリ確保されている
訳です。その確保されてるメモリを返すのが capacity()。

949 名前:デフォルトの名無しさん :03/02/20 17:41
VC++ 6.0で分割コンパイルに挑戦したら 'class'で示される型として既に定義されてますと出てきますた。
---------------------
A.h
class A {
};
---------------------
A.cpp
#include "A.h"
---------------------
B.h
#include "A.h"
#include "C.h"
class B : public A {
C *a;
};
---------------------
B.cpp
#include "B.h"
---------------------


950 名前:デフォルトの名無しさん :03/02/20 17:42
C.h
#include "A.h"
#include "B.h"
class C : public A {
B *a;
};
---------------------
C.cpp
#include "C.h"
---------------------
MAIN.h
#include "B.h"
#include "C.h"
---------------------
MAIN.cpp
#include "MAIN.h"
int main()
{
B *b;
C *c;
}
---------------------
雛形はこんな感じなんでつが、原因と解決法はいかがなもので?
ソース、ヘッダ共に全部別ファイルでつ。
連続投稿スマソ

951 名前:デフォルトの名無しさん :03/02/20 18:03
>>950
インクルードガードしなさい。

952 名前:デフォルトの名無しさん :03/02/20 18:05
>>950
簡単に言うと、C.hはA.hとB.hをインクルードしているが、B.hもA.hを
インクルードしているので、class A の定義が2回されてしまうから
エラーが出る。

953 名前:デフォルトの名無しさん :03/02/20 18:12
レスありがとうございます。

>>946
>P.74

確認してみます。

>>947
>reserve() ではなくて resize() でしょ。

そのようでした。
そこだけ直したところ

vector size : 0
vector capacity : 0
vector size resized to 366
vector size : 366
vector capacity : 512
-- fread() --
(略)
vector size : 366
vector capacity : 512

となり、すっきりしました。

>>948
>ちなみに reserve() ってのは何かと言うと

解説ありがとうございます。
STL標準講座のvectorメンバ関数表にはなぜかresize()がないけど
その後の解説にはreserve()とresize()がありました、見落としていたようです、済みません。

954 名前:950 :03/02/20 18:13
>>951
どーもです。
あの・・・インクルードガードって何でつか?(大恥)

>>952
どーもです。
その対処法が951氏が言ってるインクルードガードなんでつか?

955 名前:デフォルトの名無しさん :03/02/20 18:20
>>954
例えば、A.hは

#ifndef CLASSA
class A {
};
#define CLASSA
#endif

としてやってご覧。こういうのをインクルードガードという。

956 名前:デフォルトの名無しさん :03/02/20 18:21
>>955
おおっ、そーでしたか、大感謝。

957 名前:デフォルトの名無しさん :03/02/20 19:05
俺 #pragma once が大好きなんだが、gccにobsolete とかいわれるので腹が立つ。ほっといてくれよ。

958 名前:デフォルトの名無しさん :03/02/20 19:41
>>957
gccを再コンパイルすればいいじゃん。
それよりgccのワーニングを細かく抑制するほうほうが知りたい。

959 名前:デフォルトの名無しさん :03/02/20 19:45
>>958
http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html

960 名前:デフォルトの名無しさん :03/02/20 20:54
>>959
そんな荒いやつじゃなくて、VCみたいに番号で細かく指定したいんだが。

961 名前:デフォルトの名無しさん :03/02/20 21:12
>>960
gccを再コンパイルすればいいじゃん。

962 名前:デフォルトの名無しさん :03/02/20 21:26
つーかキリのいい番号取ったやつ次スレよろ。

963 名前:デフォルトの名無しさん :03/02/20 22:26
「962番」はキリのいい番号だよな、みんな

964 名前:デフォルトの名無しさん :03/02/20 23:17
次スレマダー?

965 名前:デフォルトの名無しさん :03/02/20 23:35
C++相談室 part16
http://pc2.2ch.net/test/read.cgi/tech/1045746245/


966 名前:デフォルトの名無しさん :03/02/27 15:18
Write a program that adds all values stored in the array val and displays the
total. Modify the program to calculate and display the total of each row.


967 名前:デフォルトの名無しさん :03/02/27 15:18
Write a program that specifies three one-dimensional arrays named price,
quantity and total. each array should be capable to hold ten elements.
using a for loop, input values for the price and amount arrays. The entries
in the total array should be the product of the corresponding values of
the price and quantity arrays. After all the data have been entered, display an output
as a table in the following.
total price quantity


968 名前:デフォルトの名無しさん :03/02/27 15:28
>>966-967
die.

969 名前:デフォルトの名無しさん :03/02/27 16:19
価格、量および合計と命名される3つの一次元の配列を指定するプログラムを
書きます。各配列は10の要素を保持するのに有能に違いありません。
使用、1つの、ループ、価格に対する入力価値および量配列のために。
配列の合計中のエントリーは価格と量の配列の対応する値の製品であるべき
です。
データがすべて入力された後、下記中のテーブルとして出力を表示してください。
価格量の合計

970 名前:デフォルトの名無しさん :03/02/27 17:04
プログラミングを始めたんですが、わからないことがあるので教えてください。
開発環境:C++(VisualC++.NET)です。

#include <stdio.h>

main()
{
printf("Hello!\n");
}

このようなプログラムを作成して実行したところ、一瞬だけウィンドウが表示されるのですがすぐ消えます。
このあとに何を書き込めばとまるんでしょうか??


971 名前:デフォルトの名無しさん :03/02/27 17:08
>>970
マルチ氏ね

972 名前:デフォルトの名無しさん :03/02/27 17:08
>>970

int i;
scanf("%d", &i);

973 名前:デフォルトの名無しさん :03/02/28 00:33
>>852
ガッ

974 名前:デフォルトの名無しさん :03/02/28 01:16
>>970
(σ・∀・)σゲッツ!


975 名前:デフォルトの名無しさん :03/03/12 03:06
>>970
>開発環境:C++(VisualC++.NET)です。

どこから見てもC++じゃないだろ

976 名前:デフォルトの名無しさん :03/03/12 21:09
#include<cstdio>
int main(){
std::printf("Hello!!\n");
return 0;
}


977 名前:デフォルトの名無しさん :03/03/12 21:13
VC++ にあるかどうか知らんけども getch() とか。
あちきは BCC だがこれよく使う。

978 名前:デフォルトの名無しさん :03/03/12 21:25
>>970 はコマンドプロンプトを触ったことがないのとかと小一時間…



979 名前:デフォルトの名無しさん :03/03/12 21:28
>>970
ある意味スレ違い。

980 名前:デフォルトの名無しさん :03/03/12 21:34
>>977
VC++にはgetch()はないから_getch()だろ。

981 名前:デフォルトの名無しさん :03/03/12 21:36
_getch() か、そっちのが処理系依存ぽくていいな。

982 名前:デフォルトの名無しさん :03/03/12 22:03
このスレはレベルが乱高下するな。
それにしても>>970はひどすぎる。


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