C++なら俺に聞け(入門篇)

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++の入門者向け解説スレです。

C言語はあってC++が無いのは寂しいので作成
2デフォルトの名無しさん:2006/10/15(日) 16:58:40
2げと
3デフォルトの名無しさん:2006/10/15(日) 17:00:43
上げ
4デフォルトの名無しさん:2006/10/15(日) 18:40:25
相談室と初心者スレで十分だなぁ。
5デフォルトの名無しさん:2006/10/15(日) 20:31:12
Cが全角で+が半角なのはいただけないな。半角に揃えろよ。
まあでもこのスレは要らないだろ。

【初心者歓迎】C/C++室 Ver.32【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1160893851/l50
はきだめC/C++下級者の質問箱 2
http://pc8.2ch.net/test/read.cgi/tech/1156206091/l50
6デフォルトの名無しさん:2006/10/22(日) 21:15:58
あげあげ
7デフォルトの名無しさん:2006/10/23(月) 16:37:15
ファイルの内容全部を
バイナリ入力する
場合は、どう書けば良いですか?
char型の配列に入れてしまいたいです。
8デフォルトの名無しさん:2006/10/23(月) 17:03:30
バイナリモードで開いた上で、istreambuf_iterator
9デフォルトの名無しさん:2006/10/23(月) 23:03:50
>>8
ありがとうございます。
↓このページの最後のほうに例があったのでやってみます。
ttp://www.io.nara-su.ac.jp/kanrishitsu/manual/FSUNf90/LANG/japanese/C++/stdlib/stdref/ist_1762.htm

ちなみにistreambuf_iteratorというのを初めて知ったんですが、
このやり方が一番簡素に記述できて、速度も最速かどうかは
分からんが、無駄はないはずだ。というような解釈で良いでしょうか?
10デフォルトの名無しさん:2006/10/23(月) 23:23:18
実行効率という観点からは多分無駄はあると思うが・・・
ポータブルだし簡素ではあるけど。
11デフォルトの名無しさん:2006/10/23(月) 23:57:52
C++初心者です。

C言語の知識で波形解析プログラムのソースを作りました。
このままではコマンドプロンプトでしか起動できないので、
今度はオブジェクト指向にならってGUIを実装させ、アプリケーション
と言えるような代物にしたいと思ってます。

しかし、ソースが巨大でこれからどうすればいいか途方にくれてます。
いろいろ参考書を見てオブジェクト指向やUMLを勉強していますが
扱い方がいまいちわかりません。

アプリ開発の一連の流れを具体的に解説してくれるような書籍なんて
ないでしょうか?
12デフォルトの名無しさん:2006/10/24(火) 00:01:46
>>11
統合開発環境を選んで、そのマニュアルやチュートリアルを読むといいよ。

あと、オブジェクト指向と GUI とは、親和性は高いのは確かだけど、直接は関係ないよ。
13デフォルトの名無しさん:2006/10/24(火) 00:02:07
Windowsプログラミング本の定石

> Win32APIを使うなら
> Visual C++(1)はじめてのWindowsプログラミング 翔泳社
> ↓
> Windows 2000プログラミング標準講座 翔泳社
> ↓
> プログラミングWindows 第5版(上)(下) アスキー
>
> MFCを使うなら
> Visual C++(1)はじめてのWindowsプログラミング 翔泳社
> ↓
> Visual C++(2)はじめてのオブジェクト指向プログラミング 翔泳社
> ↓
> Visual C++(3)はじめてのMFCプログラミング 翔泳社
> ↓
> 標準講座MFC6.0 翔泳社
> ↓
> MFCによるWindowsプログラミング アスキー
> ↓
> プログラミング Microsoft Visual C++ .NET Vol.1 基礎編、Vol.2 活用編 日経BPソフトプレス
> (MFCによるWindowsプログラミングがあればVol.2だけでもよい)
> ↓
> MFCインターナル アジソンウェスレイパブリッシャーズジャパン
>
> スレッド関係
> Advanced Windows 改訂第4版 アスキー
>
> サーバー関係
> プログラミング Microsoft Windows 2000 日経BPソフトプレス
14デフォルトの名無しさん:2006/10/24(火) 00:02:50
SDLを使うと楽だよ。
15デフォルトの名無しさん:2006/10/24(火) 00:14:06
>9
vector使ってよければ、これだけで済む。ややごちゃごちゃした印象は拭えないが。
std::ifstream inputFile("infile", std::ios_base::binary);
std::vector data(std::istreambuf_iterator<char>(inputFile.rdbuf()), std::istreambuf_iterator<char>());

>11
オブジェクト指向とGUIに直接の関係性は何もない。
ただ相性が良いからGUIプログラムにオブジェクト指向が良く使われているだけ。

お前に必要なのはおそらくGUIプログラミング。
WindowsならWindowsプログラミングとかを謳っているような本を選べ。
16デフォルトの名無しさん:2006/10/24(火) 00:15:57
Turbo C++ なんてどうだ?
楽にGUIを組めるよ。
17デフォルトの名無しさん:2006/10/24(火) 00:54:23
>>12-16
ありがとうございます。

GUIって聞くとオブジェクト指向って観念を持っていました。

僕は学生なのですが、学校のPCにはVisualC++6.0が入っているので
これを使っていきたいです。

13さんのあげてくださったプログラミング本を参考にさせていただきます。

>>15
すみません、vectorについて教えてください。









18デフォルトの名無しさん:2006/10/24(火) 00:56:24
>>17
人に聞く前に自分で調べろ。
19デフォルトの名無しさん:2006/10/24(火) 03:43:51
VB辺りでGUIだけ作って、現行コマンドライン版アプリを起動すればいいような気がする。
207 & 9:2006/10/24(火) 16:47:10
>> 10
了解しました。

>>9で挙げたサイトの例では最後に

while( !iter.equal(end_of_stream_iterator) )

// operator++とoperator*の両方を使用する
cout << *iter++;

という記述があり、そこで全てのストリームを標準出力
しているのだと思いますが、標準出力ではなく、
charに入れておきたい場合、どうすれば良いですか?
(Cの基礎みたいな話になってしまってすいません。)
初めにファイルサイズが分かれば charをその分配列で
確保してから

int i = 0;
while( !iter.equal(end_of_stream_iterator) )
char[i] << *iter++;

と書けば良いのでしょうか?
だとすれば、スマートにファイルサイズを得る方法は
あるのでしょうか?それともループ回数をカウントして
サイズを調べるのでしょうか?
21デフォルトの名無しさん:2006/10/24(火) 18:23:20
>>20
大きさを知りたいだけなら、ファイルの終わりまでシークしてtellpを呼べばいい。
中身を読み込むために大きさを知りたいのなら、>15。そもそも大きさを知る必要がない。
std::vectorは単なる動的配列で、その使い方は大したことない。
22デフォルトの名無しさん:2006/10/24(火) 20:44:11
ずっとVB6.0でゲームを作っていたのですが、そろそろC++に移行したいと考えてます。
ただ、VC++6.0が中古なんかで安く売ってますが……
やはり、最新のVC++2005の方が初心者としても扱いやすいのでしょうか?

C++2005 Suiteなんかもありますが……どれがもっとも扱いやすいのでしょうか?
VB5.0とVB6.0でも、使ってみると結構あちこち違いがありましたので、
C++でもそういったことがあるのではないかと……。

プログラミング以前の問題ですみませんが、よろしければ教えてください。
23デフォルトの名無しさん:2006/10/24(火) 21:36:48
C++自体は、ISOが標準を定めており、それは1998年に制定されてからほとんど変わっていない。
VC++は版を重ねる度にその標準へ準拠している度合いが高まっている。

もちろん最近のVC++は、.NETへ対応できるようになっているが、
VB-VB .NETの断絶とは違い、標準C++のソースはそのままコンパイルできるようになっている。
24デフォルトの名無しさん:2006/10/24(火) 21:59:19
>>22
Expressがタダなんだからまずそれを試せばいい
MFCがないが、ゲームなら要らないだろう
25デフォルトの名無しさん:2006/10/24(火) 22:46:40
#include <iostream>
using namespace std;

int main()
{
int num;
int* pT;

cout << "何人のテストの点数を入力しますか?\n";

cin >> num;

pT = new int[num];

cout << "人数分の点数を入力してください。\n";

for(int i=0; i<num; i++){
cin >> pT[i];
}

for(int j=0; j<num; j++){
cout << j+1 << "番目の人の点数は" << pT[j] << "です。\n";
}

delete[] pT;

return 0;
}
このコードでポインタpTがcin >> pT[i];のところで点数を記憶してますが、
ポインタを配列名に使えるのでしょうか?ポインタはアドレスを格納する変数なのに整数値を記憶できるのでしょうか?
26デフォルトの名無しさん:2006/10/24(火) 23:12:46
ポインタに対して、*の間接参照演算子ではなく、
配列のように[]の添え字演算子を利用することができる。

ポインタの場合、p[i]は*(p + i)と同じ。
277 & 9 & 20:2006/10/24(火) 23:40:14
>>21 、15

すいません、15さんのアドバイスにに気が付きませんでした。
ありがとうございました。
しかしvectorの使い方と言えば、
vector<chara> vChar
vChar.push('a');
というように、テンプレートとして<>を書いて使うものしか知りません。
実際、例の2行目の
std::vector data(std::istreambuf_iterator<char>(inputFile.rdbuf()), std::istreambuf_iterator<char>());
をコンパイルすると
「クラステンプレートを利用するにはテンプレート引数リストが必要です」
というエラーが出るのでてしまうのですが、どうすれば良いのでしょうか?
28デフォルトの名無しさん:2006/10/24(火) 23:44:46
std::vector<char>の間違いだろうな。
29デフォルトの名無しさん:2006/10/25(水) 00:48:11
std::vector<string>を使おう
30デフォルトの名無しさん:2006/10/25(水) 01:44:42
>>29 ここでは要らんだろ。
31デフォルトの名無しさん:2006/10/25(水) 01:45:16
>>27
エラーメッセージ嫁よ。
32デフォルトの名無しさん :2006/10/25(水) 03:09:15
class ClassA{
public:
ClassA(){・・・・;}

friend ClassA operator●(const ClassA& x, const ClassA& y)
{
・・・・;
}
}

class ClassB{
public:
operator ClassA(){return ・・・・;}
}

で引数x,yにClassB型の値が代入された場合、x,yはClassAのコンストラクタによってClassA型に
変換されるのでしょうか? それともClassBの変換関数によってClassA型に変換されるのでしょうか?
33デフォルトの名無しさん:2006/10/25(水) 03:18:06
>>32
ClassA のコンストラクタは引数なしのものしか宣言されていないので
ClassB → ClassA の変換はできない。というわけで、おそらく
変換関数の戻り値によって初期化される。
34デフォルトの名無しさん :2006/10/25(水) 03:56:22
>>33
早々の回答ありがとうございます。

つまり、(デフォルト)コンストラクタについてはオブジェクトを新たに作成したり[ClassA x]、意図的に
使わない限り[ClassA* x=new ClassA()]呼び出されることはない・暗黙に呼び出される場面はないと考え
ればよいのでしょうか?
3532:2006/10/25(水) 04:29:04
>>33
失礼しました。回答の内容取り違えてました。

ClassA のコンストラクタは引数なしのものしか宣言されていない
=ClassA内に「ClassA(ClassB c){・・・・;}」というコンストラクタが存在しない

という意味ですよね。申し訳ありません。ちなみに、このコンストラクタが
ClassA内に存在した場合も結果は同じになるのでしょうか? 連続質問で誠に
恐縮です・・・。
3622:2006/10/25(水) 08:36:25

>>23
え? VC++とVC++.NETというのは、別のものだったのですか?
VC++.NET 2003の時期バージョンが、VC++2005だと思ってました……。

>>24
Expressは、MFCがないだけの違いだったのですか。
確かに、それならまずはExpressから試してみようかと思います。

ただ、C++ Builderというのが、VBと同じRADで、VC++よりコンパイラが
速いと聞いており、とっつきやすいかなとも思っているのですが……
やはり一般的なのはVC++なのでしょうか?
C++では、ゲームはDirectXをメインに使っていこうと思っているので、
RADはあまり必要ないかとは思うのですが……。
37デフォルトの名無しさん:2006/10/25(水) 09:52:19
>VC++よりコンパイラが速い

幻想にして幻覚。
コードの内容にも寄るが、最適化性能でVCの右に出るコンパイラはまずない。
最適化を最大の売りにしてるICCですらほとんど勝てない有様。
コンパイル速度のことを言ってるならそうかもしれないが、それほど膨大なコードを書くわけでもあるまい。
3822:2006/10/25(水) 13:37:50
>>37
すみません、確かにコンパイル速度のことです。
ゲームプログラミングの本で、C++ Builderのコンパイラが付属していたりしたので、
VC++と比べてどちらがよいか迷っていたのです。
雑誌やネット記事には、長所ばかりが書いてあって、具体的な問題点などが書いてないので、
どうにもどれもこれもがよいように見えてしまって……。
ですが、やはりここは一般的なVC++の2005Expressから入って、じっくり勉強してゆこうと思います。
ありがとうございました。
39デフォルトの名無しさん:2006/10/25(水) 17:04:16
>>36
> VC++.NET 2003の時期バージョンが、VC++2005
これは間違っていないが、VC++ 2005も.NETプログラミングに対応している。
VB 2005も.NETと付いていないものの、プログラミング言語としてはVB .NETであることと同じ。
4022:2006/10/25(水) 18:51:35
>>39
話がのびてしまうのですが、たとえばネット対戦のゲームを作成しようとした場合は、
.NETの、.NET Frameworkを利用したほうが作りやすいものなのでしょうか?
.NET Frameworkで作ったソフトは、配布する際、その環境に、.NET Frameworkが
インストールされている必要があるとかで、ゲームにはあまり利用されていないようですが、
今後はゲーム制作にも多く利用されていくようになるのでしょうか?
それとも、やはり現在一般的なVC++&DirectXの環境が最適なのでしょうか?

どうにも、.NETの利便性がいまだによく掴めないままでいるのです。
今後は何もかもが.NETの時代だと、あちこちでは言われているようなのですが……。
よろしければこの点についても教えてください。
4125:2006/10/25(水) 19:11:42
>>26
お礼遅くなりました。ありがとうございます
つまり配列名がポインタ名だった場合、それは*(p+i)を意味するということでよろしいのでしょうか?
42デフォルトの名無しさん:2006/10/25(水) 20:13:49
>>37
Borland のほうがコンパイルが速いってのはガチ。

>それほど膨大なコードを書くわけでもあるまい。

コンパイルに 1 秒かかるのと 5 秒かかるってのでは差はデカイぞ。
コンパイル速度に差がありすぎるから、俺はコンパイラ非依存なコードを書くとき
開発中は主に Borland を使う。もちろんリリース版のコンパイルには VC++ を使うが。
43デフォルトの名無しさん:2006/10/25(水) 20:20:52
Boostの一番おいしいところが使えないBCCはカス
44デフォルトの名無しさん:2006/10/25(水) 20:40:00
>>41
そういうこと。
実は、式の中で配列は原則その先頭要素を指すポインタに変換される規則があり、
逆に配列に対しての添え字演算子を使った場合も、その式は成り立つ。
45デフォルトの名無しさん :2006/10/26(木) 02:15:34
C++板盛り上がれ〜♪
46デフォルトの名無しさん:2006/10/26(木) 02:16:46
>>42
1秒と5秒の差が問題になるほどコンパイルするのか?
普通は入力やデバッグに対して充分無視できる程度しかコンパイルしないと思うのだが。
47デフォルトの名無しさん:2006/10/26(木) 02:21:02
>>46
感覚の問題だから実際にやってみてもらわんとわからんと思う。
Windows のデスクトップを右クリックした時にポップアップメニューがでるまでに
ちょっとでも待たされたら嫌だろ? それと同じような感じ。
48デフォルトの名無しさん:2006/10/26(木) 02:29:21
そもそも最適化なしでコンパイルして、5倍も速度差がつくのだろうか。
まさか、最適化しつつ遅いなんて無意味なことを言うわけもないとは思うのだけどね。
49デフォルトの名無しさん:2006/10/26(木) 02:46:13
コンパイル時間の話題はもういいよ。
50デフォルトの名無しさん:2006/10/26(木) 03:14:12
>>25
おぬし、拙者と同じ棒用派だな?(笑)
俺もその本にはとても世話になったよ。
51デフォルトの名無しさん:2006/10/30(月) 19:54:50
俺に聞け〜
52デフォルトの名無しさん:2006/11/20(月) 04:34:06
for(;; p_turn = !p_turn){

とはどう言う意味でしょうか?

あと
for(;;)と言うのも参考書に載っていますが
意味がわかりませんので
これら二つの、ご助言を宜しくお願い致します。
53デフォルトの名無しさん:2006/11/20(月) 06:23:13
>>52
do while (p_turn = !p_turn); と同じ。
それから
for(;;)は while (1) と同じ
54デフォルトの名無しさん:2006/11/20(月) 06:45:36
55デフォルトの名無しさん:2006/11/20(月) 11:12:01
マルチかよ死ねカス
56デフォルトの名無しさん:2006/11/20(月) 13:09:21
>>53
有難うございました。

>>54-55
それを書いたの私ではありません、私以外の誰かがしたことです。
それを、"マルチかよ死ねカス" なんて酷い
57デフォルトの名無しさん:2006/11/20(月) 13:15:27
>>56
そう思うんならそこ行って「これは私ではありません」と書いてこいや
58デフォルトの名無しさん:2006/11/20(月) 19:12:30
>>53
違くね?
for (初期化式; 継続条件式; 再初期化式)じゃねーの?
for(;; p_turn = !p_turn)
これだと初期化なし、条件式なしで再初期化時に p_turn の否定を p_turnに入れてるだけじゃねーの
p_turn = !p_turn は比較演算じゃない、否定を代入してるだけ
つまり
while (1){
p_turn = !p_turn;
・・・・
・・・・

だろ
5958:2006/11/20(月) 19:13:35
違った
while (1){
・・・・
・・・・
p_turn = !p_turn;

こっちだな

60デフォルトの名無しさん:2006/11/20(月) 20:33:46
神様教えて
継承したクラスで、

class A{
private:
int data;
public:
int DataCal(){
return data*2;
}

 int getData(){
return DataCal();
}
 
 ・・・
}

みたいのがあるときに、継承クラスでDataCalをオーバーライドしたとすると

class B :public A{
public:
int DataMod(){
return data*3;
}
 ・・・
}

このときってgetDataもオーバーライドしないといけない??
61デフォルトの名無しさん:2006/11/20(月) 20:40:05
>>60
のー
62デフォルトの名無しさん:2006/11/20(月) 20:42:29
DataCalをオーバーライドしているようには見えないな。

ぶっちゃけvirtualつけろって話。
63デフォルトの名無しさん:2006/11/20(月) 20:46:22
あ、みすった_| ̄|○

class A{
private:
int data;
public:
int DataCal(){
return data*2;
}
 int getData(){
return DataCal();
}
 
 ・・・
}

class B :public A{
public:
int DataCal(){
return data*3;
}
  ・・・
}

です。

>61
getData()はオーバーライドしなくても、
class BでオーバーライドされたDataCal()が使われる?
64デフォルトの名無しさん:2006/11/20(月) 20:48:31
これはひどい
オーバーライドではなくて隠蔽だろう
6561:2006/11/20(月) 20:49:00
getData() は virtual 宣言したほうがいい

A *a;
B b;
a = &b;
a->getData() は
クラスAのgetData()が呼ばれる
66デフォルトの名無しさん:2006/11/20(月) 20:56:42
>>65
知ったか乙
67デフォルトの名無しさん:2006/11/20(月) 20:58:20
まぁ、とにかく
virtual調べてきます_| ̄|○
6861:2006/11/20(月) 21:06:37
ぶりぶり
69デフォルトの名無しさん:2006/11/20(月) 21:47:07
つまり、こうだな。
do {...; } while (p_turn = !p_turn, 1);
70デフォルトの名無しさん:2006/11/20(月) 22:40:43
>>63
俺もまだ未熟だから詳しいことはいえないんであれだが・・・
オーバーロードとか意味間違えてるんじゃないのか?

たぶんおまいさんがやりたいことを実行するなら、
DataCalを仮想化しないとだめだろ。

継承、オーバーロード、仮想化っていうのをいまいち理解してないと思うんだが。
71デフォルトの名無しさん:2006/11/20(月) 22:53:15
>>69
TRUE
72デフォルトの名無しさん:2006/11/20(月) 22:53:53
追加
>>61
getDataを仮想化する理由が意味不明。
むしろこのクラス設計なら絶対仮想化しちゃいけない。
73デフォルトの名無しさん:2006/11/20(月) 22:55:05
>>71
それはなに?
#c99ならtrueだろ、ってのは判らんでもないが。
74デフォルトの名無しさん:2006/11/20(月) 22:56:12
あー>>61すまねええ。俺が間違ってたorz
よく見たらめちゃくちゃやってるな・・・>>63よ・・・

getDataとか関数に名前与えてるのに中身に余計な関数書くんじゃねえよ。
命名規則ぐらいちゃんとしてこいや。
75デフォルトの名無しさん:2006/11/20(月) 23:34:31
>>74
>>61だけど
>>65は勘違い...スマソorz

>>63
んでvirtualにすんのはA::DataCal();
そうしないとA::getData()がよばれるがA::getData()内のDataCal()はA::DataCal()を呼び出す
virtualにすればA::getData()はB::DataCal()を呼び出すようになる
とA::dataはBからアクセスできないんじゃないか?Aのプライベートメンバだし
protectedで宣言しなきゃいかんのでは?
76デフォルトの名無しさん:2006/11/21(火) 01:20:01
初心者には親切にね。
77デフォルトの名無しさん:2006/11/21(火) 01:55:06
>>75
>>63の場合作法の段階から間違ってると思うんだよね・・・。

getData()を行うならば、
そいつはプライベートからdataの値を取ってくるだけにするべきなのに、
そうではないし。

スマートに書こうとすればこうなるはず。

classA側の処理
int& getData() { return data; }

classA, classBのDataCal処理
virtual int DataCal() const { 各々の処理; return 返したい値; }

コレならすっきりしてわかりやすいと思うんだけど。
78デフォルトの名無しさん:2006/11/21(火) 01:59:05
getData側にconst入れ忘れた・・・。訂正。
const int& getData() const { return data; }
79デフォルトの名無しさん:2006/11/21(火) 14:34:01
const int& なんて戻り値使うのはマトモなアプリ書いた/読んだことのない奴だけ。
荒らしっぽいレスですまんが、老婆心からのコメント。
80デフォルトの名無しさん:2006/11/21(火) 15:32:04
>>79
戻り値変数でもまったく問題ないけど、
ちょっと今回は思うところもあって、俺は参照でもいいと思うんだけど。

クラスAにはint dataっていう変数を持ってるのは確実、
内部でgetData()*2という計算をDataCal()で持とうとしている。
そんな理由でconst int&にしたんだけど間違ってだろうか?

普通の代入の場合は参照の値のコピーが行われるからint getData();と同じように振舞うしさ。
8180:2006/11/21(火) 16:31:32
あ、ちなみに今回に限りなのでそこは忘れないでくださいな(;´Д`)
82デフォルトの名無しさん:2006/11/21(火) 16:34:20
そんな理屈こねくり回すまでもなく、ポインタサイズ以下の基本型をconst参照で返す奴は普通逝け沼。
外にどうしてもアドレス公開したいのなら別だが、そういうコードが求められる状況はかなりぬるぽ。
83デフォルトの名無しさん:2006/11/21(火) 16:40:13
正直const参照が求められる状況ってのは、
まあ読み込んだ3Dオブジェクトを利用するとかいう大量データを扱う時なんだけどさ(;´Д`)

まあ変に屁理屈書いてすまん。
84デフォルトの名無しさん:2006/11/21(火) 17:40:38
>>82
ポインタサイズ以下の基本型なんてのを意識するのはGenericとはいえんな
そんなのはコンパイラの仕事だ
85デフォルトの名無しさん:2006/11/21(火) 17:45:48
>>84
Generic な人でもいつかどこかで int くらい使うだろ。
86デフォルトの名無しさん:2006/11/26(日) 19:07:40
C++でmakeは必須?
87デフォルトの名無しさん:2006/11/26(日) 19:56:21
>>86 いいえ
88デフォルトの名無しさん:2006/11/26(日) 20:47:09
>>86

でも、知ってて損はない
89デフォルトの名無しさん:2006/11/27(月) 02:43:53
だが時代遅れ。
90デフォルトの名無しさん:2006/11/27(月) 03:09:45
C++が?
91デフォルトの名無しさん:2006/11/27(月) 04:28:33
それもある。
92デフォルトの名無しさん:2006/11/27(月) 06:13:20
処女のように清らかで美しいソースが見たいです
あまり実用的でなくてもいいです
どこか参考になるところはありませんか?
93デフォルトの名無しさん:2006/11/27(月) 09:51:01
C++自体が既に非処女言語なので無理
94デフォルトの名無しさん:2006/11/27(月) 13:03:26
>>92
機械語
95デフォルトの名無しさん:2006/11/27(月) 16:31:39
>>92
Whitespace
96デフォルトの名無しさん:2006/11/27(月) 19:54:12
>>95
それは処女も中身は汚いってこと?
97デフォルトの名無しさん:2006/12/03(日) 08:36:26
最近C++初めました、Cのコードはそこそこ読めて、書けます
クラスの概念がよくわかりません
入門書では、車(オブジェクト)に対してハンドル、タイヤetc(メソッド)の関係のように
比喩した解説が多いのですが分かり辛いのですが
要するにCのtypedefやenumのような構造体と同じだと思うのですが
そのように理解してもOKですか?
簡単な事を難しく解説して初心者をかく乱している気がするのですが・・・・・
98デフォルトの名無しさん:2006/12/03(日) 09:01:48
> 簡単な事を難しく解説して初心者をかく乱している気がするのですが
そのとおり。
99デフォルトの名無しさん:2006/12/03(日) 09:07:07
初心者が簡単に理解できるように比喩を使って解説しているわけだが
分析・設計段階の話なので実装のことは考えないほうが吉。
データベースの正規化が自分の感覚としては近いかな。
100デフォルトの名無しさん:2006/12/03(日) 10:46:32
>>99
>>97です
>>データベースの正規化が自分の感覚としては近いかな。
あたらずしも遠からずって事で納得しました。
101デフォルトの名無しさん:2006/12/03(日) 15:42:13
>>98
×そのとおり
○そのとおり
>>100
×あたらずしも遠からず
○当たらずとも遠からず

>>97
実装上は、C++のクラス ≡ C++の構造体 ⊃ Cの構造体、
C++の構造体 ≒ Cの構造体+(その構造体に関与する)関数。

継承だとかテンプレートだとかは脇に置いて、取り敢えず
Cで構造体とそれを操作する関数を纏めたものがクラスって認識で医院で内科医?
102デフォルトの名無しさん:2006/12/03(日) 18:56:01
そのとおりはそのとおりだろ。
103デフォルトの名無しさん:2006/12/03(日) 20:12:05
そのとおりだね。
104デフォルトの名無しさん:2006/12/03(日) 22:24:03
>×そのとおり
>○そのとおり

吹いた。馬鹿だ。
105デフォルトの名無しさん:2006/12/04(月) 01:52:03
その通り!!
106デフォルトの名無しさん:2006/12/04(月) 18:14:50
そ の と お り !!!!
107デフォルトの名無しさん:2006/12/06(水) 22:33:00

オーバーライドされる関数にvirtualを指定したりしますが、なぜですか?
別にvirtualを指定しなくてもオーバーライドできますよね?

教えてください。
108デフォルトの名無しさん:2006/12/06(水) 22:38:57
仮想関数でぐぐれ
109デフォルトの名無しさん:2006/12/06(水) 22:43:04
>>108


その回答は意味が無い。
110デフォルトの名無しさん:2006/12/06(水) 23:01:52
>>107
派生クラスがオーバーライドするんだと言う意思表示だと思えばいい。
111デフォルトの名無しさん:2006/12/06(水) 23:12:45
>>107
とりあえず仮想関数とかでぐぐってみ
112デフォルトの名無しさん:2006/12/06(水) 23:17:38
基底クラスにvirtualがなかったらただの隠蔽だな
113デフォルトの名無しさん:2006/12/06(水) 23:45:57
ちょうどサンプルがあった。
#include <iostream>

class A { public: void func() { std::cout << "A::func()" << std::endl; }}; 
class B : public A { public: void func() { std::cout << "B::func()" << std::endl; }}; 

class C { public: virtual void func() { std::cout << "C::func()" << std::endl; }}; 
class D : public C { public: void func() { std::cout << "D::func()" << std::endl; }}; 

int main() {
    A *a = new B(); a->func();
    C *c = new D(); c->func();
    return 0;
}
114デフォルトの名無しさん:2006/12/06(水) 23:48:33
virtual付けないとコンパイル時に結合(静的結合)されてしまうので
実際の型に応じた関数を呼び出してくれないという例か
115デフォルトの名無しさん:2006/12/07(木) 15:21:36
派生クラス側のメンバ関数の宣言にもvirtual を付ける流儀が多いようだがそれはなぜか、
という質問かと思った。
116デフォルトの名無しさん:2006/12/07(木) 19:23:47
>>115
いや、そういう質問だろう。多いというわけじゃなくて、まちまちなのが気になってるみたい。
117デフォルトの名無しさん:2006/12/07(木) 21:12:21
>>107にはオーバーライドされる関数とあるが、それが基底クラスのもの
かどうかは書いてないので、どっちの話題かは確定できないな。
118デフォルトの名無しさん:2006/12/07(木) 22:28:41
>>117
いや、基底クラスのものだったら(virtual付けないと)オーバーライドできないんだから、
>>107みたいな質問は出ないでしょ。
よって、派生クラス側のメンバ関数に付けるvirtualのことかな。
119デフォルトの名無しさん:2006/12/07(木) 23:09:15
C++の関数の引数の質問で、しょぼいんですがお願いします><;


int hogehoge[10];

func( hogehoge );

void func( int b[] ){
}

と書いた場合、int bは
int* b ですか?それとも int* &b ですか?
120デフォルトの名無しさん:2006/12/07(木) 23:18:18
>>119 int* b
121デフォルトの名無しさん:2006/12/07(木) 23:24:01

基底クラスかどうかなんてわかるの?
122デフォルトの名無しさん:2006/12/07(木) 23:24:46
>>119

int& b
123デフォルトの名無しさん:2006/12/07(木) 23:28:51
>>119
void func( int b[] ){ }

void func( int *b ){ }

void func( int *&b ){ }
かって話なら
void func( int *b ){ } これ
124デフォルトの名無しさん:2006/12/08(金) 00:19:45
STLのmapのイテレータは要素数が変化しても無効にならないって本当?
125デフォルトの名無しさん:2006/12/08(金) 00:21:46
>>124
本当。
map のイテレータが無効になるのは、それが指す要素がコンテナから削除されたときだけ。
126デフォルトの名無しさん:2006/12/08(金) 00:25:57
>>125
本当だったんだ。
mapがそうならlistやsetも?
127デフォルトの名無しさん:2006/12/08(金) 00:30:49
>>126
map がそうだからってわけじゃないけど list や set もそう。
128デフォルトの名無しさん:2006/12/08(金) 00:33:41
なるほど。

>>125,127
サンクス
129Nw:2006/12/08(金) 00:40:13
Cじゃないんですけど。゚(゚´Д`゚)゚。 BASICで書いて頂けませんか?
10: 20: ってな感じで・・
1.数A,B,Cを入力してA>BかつB>CならA*B*Cの計算を、A>BかつB≦Cなら
 A+B+Cの値を、A≦BならA/B+Cの値を求めるプログラム。
2.1+2+3+・・・・+X の合計が初めて200を超える X の値を表示するプログラム。
3.1,3,5,7,9,・・・・, X までの和を求め、和が1000を超えない X の最大値を表示するプログラム。
4.X,Yを入力し、X=1でY=2なら"A"と、X=3でY=4なら"B"と、X=5でY=6なら"C"と表示し、
 上記以外の数字の組み合わせを入れたときはプログラムの最初に戻るプログラム。
5.2つの数XとYを入力し、両方マイナスのときは√(X*Y)を、どちらか一方がプラスのときはX*Yを、
 両方プラスのときはX/Yのそれぞれの値を表示するプログラム。
6.自然数MからNmでの和と平均を求めるプログラム。(NとMの値は入力するものとし、M<Nとする)
S=M+・・・・+N
7.Y=3X^3 +2X^2 +X +15 において、Xの値を-10から10まで、0.5刻みで変化させてYの値を求めるプログラム。
8.AAB+BB=BAA つまり、(100×A+10×A+B)+(10×B×B)=(100×B+10×A+A)となるAとBを
 求めるプログラム。(A,Bは一桁の整数)
9.ABA×B=BCBつまり(100×A+10×B+A)×B=(100×B+10×C+B)となるA,B,Cを求めるプログラム。
10.三角形の辺A,B,Cにおいて、それぞれを1から20まで変化させたとき、直角三角形となる組み合わせをすべて
 求めるプログラム。
11.Y=6X^2 - 5X - 9 の式において、-10≦X≦10 の範囲でYの最大値を求めるプログラム。
 (Xは、0.2刻みとする)
130デフォルトの名無しさん:2006/12/08(金) 00:50:31
断る。スレタイ嫁
131デフォルトの名無しさん:2006/12/08(金) 01:04:56
>Cじゃないんですけど。゚(゚´Д`゚)゚。 BASICで書いて頂けませんか?

ここはC++だ!!!!!

出直せ。
132デフォルトの名無しさん:2006/12/08(金) 01:28:37
仮想関数を使うべきか、純粋仮想関数を使うべきか悩むときがある。
皆さんは、どんな使い分けをしていますか?

133デフォルトの名無しさん:2006/12/08(金) 01:30:13
抽象クラスにしたいとき。
134デフォルトの名無しさん:2006/12/08(金) 01:46:16
実装するのが面倒くさいとき。
135デフォルトの名無しさん:2006/12/08(金) 02:53:38
「基本の動作」を定義しておいてあげた方が親切そうなら、普通に仮想関数を用意してあげる。
例えば別に無視してしまっても構わないイベントをハンドリングするコールバック関数とか。

使う側に「必ずここは自分で実装してもらわないと困る!」って強制したい場合は純粋仮想にする。
例えばクラス保守責任者の名前を文字列で返す関数を組み込め!とか上司の命令で決まったなら、
純粋仮想にして各担当者にオーバーライドしていただく。

至極簡単。
136デフォルトの名無しさん:2006/12/08(金) 03:24:13
>>115
モジラのとこに何か書いてあった。
文法上は規定クラスにあれば十分だが、警告を出すコンパイラもあるので全部つけとけということだそうです。
ttp://www.mozilla-japan.org/hacking/portable-cpp.html#virtual_on_subclasses
137デフォルトの名無しさん:2006/12/08(金) 11:31:39
C#ではoverrideが追加されたよな、逆にオーバーライドしない指定のnewと共に。
138デフォルトの名無しさん:2006/12/09(土) 01:39:14
モジラのルールは、アレだよ。
モジラ内ではそう決まっちゃったからそうするしか無いのかもしらんが、
何かの指針になる様なルールじゃねえっすよ。
うん。

でもまあ、これに限っては付けた方がいいのかね。
書かないで済むものは書かないのがC++流って気もするけど。
139デフォルトの名無しさん:2006/12/09(土) 02:34:48

テキストエディタでプログラムを書くときは、エディタは何を使用していますか?
140デフォルトの名無しさん:2006/12/09(土) 03:18:49
手頃なテキストエディタ。
141デフォルトの名無しさん:2006/12/09(土) 03:21:30
>>139
【エディタ】ソース何で書いてる? 1スレ目
http://pc8.2ch.net/test/read.cgi/tech/1164154920/
142デフォルトの名無しさん:2006/12/09(土) 21:12:55
>>69
> do {...; } while (p_turn = !p_turn, 1);
whileの中のこの式ってありですか?どういう意味ですか?
代入が成功したらtrueで繰り返しというのはわかるのですが、その後ろの
",1"がわかりません。
143デフォルトの名無しさん:2006/12/09(土) 21:16:20
>>142
代入に失敗も糞も無い。
do while 使うんなら do {...; p_turn = !p_turn; } while(1) で同じこと。
と思ったけど、 continue とか使うと違うのかな?
144デフォルトの名無しさん:2006/12/09(土) 21:38:02
>>143 あれ、代入に失敗も糞も無かったでしたっけ?
> do {...; p_turn = !p_turn; } while(1)
これはわかるんですが、それをwhile (p_turn = !p_turn, 1);という書式に
書き換え可能なんですか?
145デフォルトの名無しさん:2006/12/09(土) 21:39:42
>>142
ちがうよ
while (p_turn = !p_turn, 1);
そもそも上の式では p_turn = !p_turn は評価されない
while の式として評価されてるのは 最後(一番右の) 1 だけ
つまり while は常に ture でループするってこと
146デフォルトの名無しさん:2006/12/09(土) 22:00:24
>>144
カンマ演算子ってやつだ。

>>145
評価はされる。結果が使われないだけ。
147デフォルトの名無しさん:2006/12/09(土) 22:01:03
>>143, 145 ご教示ありがとうございます。
> そもそも上の式では p_turn = !p_turn は評価されない
代入は実行されるんですよね?こういう書式が可能とは知りませんでした。
while(1){p_turn = !p_turn;...}と同じですよね?
条件として評価できるものがくるまで、式を何個も置くということも
できるのですか?
148デフォルトの名無しさん:2006/12/09(土) 22:02:42
>>146
> カンマ演算子ってやつだ。
ご教示ありがとうございます。調べてみます。
149145:2006/12/09(土) 22:05:06
>>146
書き方悪かった、結果が評価されないって意味だ

>>147
追記しとく
while が繰り返しをするかどうかは式評価で決まるわけだが
「,」は左の式を評価した後に右の式を評価しろというもの
たとえば while( a == b , a < 10 , b < 50 ) という式があったとする
この式の評価は左の a==0 を評価し、次にa < 10 を評価、最後に b < 50 を評価するのだがこの式全体の評価は最後の b < 50 だけで決まる
最初と真ん中の a == b と a < 10 は意味を成さない(意味の無い比較)
使い方とすれば while( a=a*2 , b=a+10 , b < 50 ) のように式の中で代入をして最後に比較したいときなど


150デフォルトの名無しさん:2006/12/09(土) 22:14:00
>>149
「評価」を言語の動作についての用語として使うなら「結果が評価されない」も意味不明だろ。
あと「式全体の評価は〜」もおかしい。「式全体の値は〜」ってところか。
151デフォルトの名無しさん:2006/12/09(土) 22:16:09
>>149 追記ありがとうございます。
>最初と真ん中の a == b と a < 10 は意味を成さない(意味の無い比較)
最初の有効な条件式を評価する、ということではないのですか?
例えば、こんなのは可能ですか?
int i = 0;
while(i++, i < 10){...}
152デフォルトの名無しさん:2006/12/09(土) 22:18:37
>>151
条件式かどうかは関係ない。可能かどうかは、人に聞く前に自分でやってみろ。
153151:2006/12/09(土) 22:20:17
i > 0になったところで、永続ループになりますか?
154145:2006/12/09(土) 22:30:20
>>153
問題ない
155デフォルトの名無しさん:2006/12/09(土) 22:33:20
副作用とか大丈夫だったっけ?
156デフォルトの名無しさん:2006/12/09(土) 22:33:27
>>152 家のPCに開発環境なんて入れてません。
というか、スレタイ見てね(はーと

>>154 ありがとうございます。
問題ない=10回繰り返す=i > 0になったところで、永続ループにならない、
と理解しましたが、OKですね。

月曜日に試してみます。
157デフォルトの名無しさん:2006/12/09(土) 22:34:59
俺に聞けスレだったな。スマンカッタ。
158デフォルトの名無しさん:2006/12/09(土) 22:41:36
>>157 そう言われてしまうと、こちらもスマンカッタ。
159デフォルトの名無しさん:2006/12/09(土) 23:00:36
そして二人の間に友情が芽生えた

>>155
なんかあったっけ?
160デフォルトの名無しさん:2006/12/09(土) 23:38:53
聞くのはいいが、開発環境くらい入れとけと
161デフォルトの名無しさん:2006/12/10(日) 16:40:57
vectorのn番目の要素のイテレータをずばっと得るにはどうすりゃいいの?

it = vec.begin();
std::advance(it, n);
は思いついたけどこれって線形時間掛かるんじゃなくて?
162デフォルトの名無しさん:2006/12/10(日) 16:51:35
いいえ。
163デフォルトの名無しさん:2006/12/10(日) 16:52:14
vec.begin()+n
ちなみに大抵の処理系でstd::advanceは各イテレータコンセプトについて
適切に実装されているから上のような書き方をする必要はない。
規格でそう決まっていたかはシラネ
164デフォルトの名無しさん:2006/12/10(日) 17:40:52
規格でそう決まっている。 24.3.4
165デフォルトの名無しさん:2006/12/10(日) 17:46:00
THX
166デフォルトの名無しさん:2006/12/10(日) 18:00:52
advanceなんてあるのか
今までforループ使ってた…
勉強になるな
167デフォルトの名無しさん:2006/12/10(日) 18:14:42
あはは。普通に+演算子オーバーロードされてるじゃーん。気付けよ、俺。orz

>>162-164
d
168デフォルトの名無しさん:2006/12/10(日) 18:28:56
【標準出力の画面を消去する方法】
一つ目の標準出力   (例) cout << "前画面\n"

をしてから、

二つ目の標準出力   (例) cout << "次画面\n"

をしたときに、
------------------------
前画面
次画面
------------------------
ではなく、最初に出力した内容を消去して
------------------------
次画面
------------------------
とする方法を教えていただけますか?
169デフォルトの名無しさん:2006/12/10(日) 18:36:12
>>168
標準ではできない。たぶんコンソール操作を行うライブラリを使う必要がある。
170デフォルトの名無しさん:2006/12/10(日) 18:53:05
>>169
レスありがとうございます。

少しWEBで検索しました。
>コンソール操作を行うライブラリ
これは、
ttp://www.kumei.ne.jp/c_lang/intro/no_61.htm
みたいなのを自作するということでしょうか?
171デフォルトの名無しさん:2006/12/10(日) 19:11:25
>>170
コンソールアプリなら
#include <conio.h>
void clrscr(void);
これ使えねー?
172デフォルトの名無しさん:2006/12/10(日) 19:33:58
>>171
>void clrscr(void);
使い方は、
ヘッダをインクルードして、
clrscr();
ですよね?
エラーが出てしまいます。(なんで?)
VS EEでは使えないのでしょうか?
(.\main.cpp(73) : error C3861: 'clrscr': 識別子が見つかりませんでした)
173デフォルトの名無しさん:2006/12/10(日) 19:47:18
WindowsSDKを入れましょう
174デフォルトの名無しさん:2006/12/10(日) 20:01:53
>>173
WindowsSDKってのは、Windows Platform SDKのことですか?
これは、

 高機能でパフォーマンスに優れた Windows アプリケーションを
 作成できます。

と書いてありました。

私はコンソールアプリケーションで作成していますが、いいですか?

ダウンロードは、3つくらい候補があるようですが、
英語で私には難しいかもしれません。
 PSDK-amd64.exe 1.3 MB
 PSDK-ia64.exe 1.4 MB
 PSDK-x86.exe 1.3 MB

175デフォルトの名無しさん:2006/12/10(日) 20:08:56
>>172
VS EEって何?
176デフォルトの名無しさん:2006/12/10(日) 20:12:39
>>175
>VS EEって何?
Visual C++ 2005 Express Editionです。
177デフォルトの名無しさん:2006/12/10(日) 20:14:17
>>175
>VS EEって何?
略している人がいましたが、VSなんて略さないかもしれないですね。
略すならVCかも。
178デフォルトの名無しさん:2006/12/10(日) 20:19:48
>>176
変に略さんでくれ

http://msdn2.microsoft.com/ja-jp/library/system.console.clear(VS.80).aspx
これのC++の部分
Console::Clear();  と書いてある
179デフォルトの名無しさん:2006/12/10(日) 20:20:32
>>174
PlatformSDKとWindowsSDKは違う。
Platform SDK + NET SDK = Windows SDK
180デフォルトの名無しさん:2006/12/10(日) 20:21:46
>>178
ドトネトはスレ違い
181デフォルトの名無しさん:2006/12/10(日) 20:28:43
>>179

>PlatformSDKとWindowsSDKは違う。
>Platform SDK + NET SDK = Windows SDK
そうですか。
182デフォルトの名無しさん:2006/12/10(日) 20:30:58
>>168
\nの代わりに\rを使うとそういう風になる環境は結構ある。
Windowsのコンソールもそうなっているはず。
183デフォルトの名無しさん:2006/12/10(日) 20:43:25
>>182
>\nの代わりに\rを使うとそういう風になる環境は結構ある。
これはその行の先頭へ復帰する、というだけだったと思いますが......
184デフォルトの名無しさん:2006/12/10(日) 20:49:24
>>183
いったん画面をクリアしたいんだろ
185デフォルトの名無しさん:2006/12/10(日) 21:04:22
行の先頭に戻れても前の行は消せないだろカス
186デフォルトの名無しさん:2006/12/10(日) 21:07:49
>>185
えっ?
187デフォルトの名無しさん:2006/12/11(月) 16:29:38
システムエラー時以外で例外を使うのはダメプログラム?
例えば、ファイル名を決めていないのに上書き指示を受け取ったときとか。
188デフォルトの名無しさん:2006/12/11(月) 16:53:25
その例外に対処するのが至近距離にいるなら、通常のエラー処理で十分な気はする。
まとめて受け取り処理できる受け皿があるなら、普通に例外投げれば。

上記の例は例外対象じゃないだろ。
設計エラーな気すらする。
189デフォルトの名無しさん:2006/12/11(月) 16:58:35
書き込み禁止になってたりした時には例外飛ばしたいような気もするし、
名無しの場合も例外でもいいんじゃないかという気もする。

Windows でメニューに上書きコマンドを持つソフトなら、
メニューアイテムをグレイにしなきゃならんから事前にチェックする
ことになると思うけど。
190デフォルトの名無しさん:2006/12/11(月) 17:03:26
よくわからんのだが、名無しで書込み禁止なんて状況、あるんだ?
デタラメにハッシュとかで名前作ってみたらたまたま既に居て書込み禁止だったよとか、そんな状況?
191デフォルトの名無しさん:2006/12/12(火) 03:00:24
std::logic_error の出番だな。
192デフォルトの名無しさん:2006/12/12(火) 18:39:09
文字列ストリームのostringstreamへの出力に限界ってあるのでしょうか?

ostringsteam ret;
ret << "****************";

って感じで、文字列ストリームを宣言して、
テキストファイルを読み込んで、
内容を編集し、
文字列ストリームに出力します。

プログラムの最後で、
ofstream fout
と生成した出力オブジェクトfoutに
fout << ret.str();
という風に出力しているんですが、
なぜかある一定サイズ(28行くらい)を超えると、
ダイアログが出て
『問題が発生したため、****.exeを終了します。
ご不便をおかけして申し訳ありません』
と言われます。なぜでしょう?
193デフォルトの名無しさん:2006/12/12(火) 19:01:09
>>192
>なぜでしょう?

バグでしょう。
194デフォルトの名無しさん:2006/12/12(火) 19:01:40
コードと環境晒せよ
195デフォルトの名無しさん:2006/12/16(土) 10:39:27
下で使うメンバ関数のgetはCのgetcharと似ていると思います。
同じくCのgetchに似ている関数ってありますか?

#include <iostream>
using namespace std;
int main()
{
int ich;
while( (ich = cin.get) != EOF ){
cout.put(ich);
 }
}
196デフォルトの名無しさん:2006/12/16(土) 11:05:57
ない。
基本的にC++の入出力はCのそれと同じ機能を持っている。
ちょうどgetchar/(f)getcはstd::istream::getに対応している。
しかしgetchは標準でないので、C++に対応するものはない。
197デフォルトの名無しさん:2006/12/16(土) 11:14:05
>>196
回答感謝です。
そうですか。
わかりました。
198デフォルトの名無しさん:2006/12/16(土) 14:18:46
関数の引数に****.c_str()を入れて、関数内でファイルからデータを読み込むのは
どうすればいいのでしょうか・・・・?

****=ファイル名
199デフォルトの名無しさん:2006/12/16(土) 17:17:56
>>198
日本語でどうぞ。
200デフォルトの名無しさん:2006/12/17(日) 06:58:47
****.c_str()
ていうことは、
****
はstringですよね?
stringにファイル名を入れてそのファイルをreadするなら

○-----○-----○-----○-----○-----○-----○-----○-----
string ----- = "パス名"; ← ----は文字列 (末尾に、"\\")
---- += "ファイル名"
filein.open((----.c_str()), ios::in);
○-----○-----○-----○-----○-----○-----○-----○-----

でだめですか?
201デフォルトの名無しさん:2006/12/17(日) 08:18:52
なにこの頭悪そうな流れ。
202デフォルトの名無しさん:2006/12/17(日) 10:43:59
はぁ? なんのことじゃ? >>201
203デフォルトの名無しさん:2006/12/17(日) 17:07:09
coutで2350000と表示したいんですが、
どうしても2.35e+06と表示されるんですが、どうしたらいいでしょうか?
204デフォルトの名無しさん:2006/12/17(日) 19:16:58
いきなりすいません。
Visual C++でC++を書いていたのですが、
どこかのショートカットキーを押してしまい、
スペースが・で表示されたり、
Tabが→(矢印)で表示されるようになってしまいました。
どうすれば元に戻せますか?
205デフォルトの名無しさん:2006/12/17(日) 19:23:00
>>204
(VCのエディタの設定が変わったのでしょうかね?[ツール]-[オプション]とか適当にいじってもダメですか)
私は設定にはあまり詳しいわけでないのでお答えできませんが、
VCのシリーズによって、微妙に設定方法って違うかもしれませんね。
(基本的には同じだと思いますが)
206デフォルトの名無しさん:2006/12/17(日) 20:06:57
>>203
double d = 2350000.;
std::cout << std::ios::fixed << d << std::endl;
207デフォルトの名無しさん:2006/12/17(日) 20:11:20
>>204
204です。
205さん、アドバイスありがとうございます。
[ツール]-[オプション]をいじってみたのですが、
今のところ元に戻りません…
208デフォルトの名無しさん:2006/12/17(日) 20:23:25
>>203
このへん
http://www.geocities.jp/cbc_vbnet/vc/console.html
04.マニピュレータ
209デフォルトの名無しさん:2006/12/17(日) 22:37:19
>206>208
どうもありがとうございました。
問題は解決されました・・
210デフォルトの名無しさん:2006/12/18(月) 00:02:30
関数アダプタかまして作り出したオブジェクトって、
元にしたオブジェクトが死んだら使えなくなるの?

関数アダプタって、どう言う仕組みで実装できてるのだ?
211デフォルトの名無しさん:2006/12/18(月) 00:06:56
Visual C++ を使っています。
行列の固有値と固有ベクトルを求めるため、
ttp://www.neuro.sfc.keio.ac.jp/~masato/source/
このサイトにあるヘッダーファイルとリソースファイルを組み込み、マニュアルに示されているとおり、
#include <stdio.h>
#include "matrix.h"
void main(void)
{
Matrix A(2, 2), X;
Vector lamda;

A[0][0] = 3.0; A[0][1] = 2.2; // 行列 A 3.0 1.2
A[1][0] = 1.2; A[1][1] = 2.0; // 1.2 2.0

X = A.eigen(&lamda);

printf("\neigen value = ");
lamda.print();
printf("\neigen vector =\n");
X.print();
}
として、コンパイルしたところ、
 1番目の引数を 'Vector *' から'Vector &'に変換できません。(新しい機能; ヘルプを参照)
というエラーが出ます。どうようにすればよいのかぜひ教えてください。
212204:2006/12/18(月) 00:19:44
Visual C++の表示が変わってしまった件が解決しました。
(ctrl+R) + (ctrl+W) で元に戻りました。
205さん、ありがとうございました。
213デフォルトの名無しさん:2006/12/18(月) 00:29:10
>>211
ざっと見た感じ
X = A.eigen(&lamda)ではなくて
X = A.eigen(lamda);じゃないか?

(実際に確かめてないのであしからず)
214デフォルトの名無しさん:2006/12/18(月) 00:34:59
>>213
すでに試してみました。固有値は0が二つ、固有ベクトルは[0.5914,-0.8964]が二つ返され、うまくいきませんでした、
215デフォルトの名無しさん:2006/12/18(月) 00:44:04
ifstreamでファイル名が日本語のものを読み込むにはどうすればいいのでしょうか?
216デフォルトの名無しさん:2006/12/18(月) 00:47:11
>>215
#include <clocale>
setlocale(LC_CTYPE, "");
217デフォルトの名無しさん:2006/12/18(月) 00:48:09
VisualStudio2005Express入れました
一から全部教えてください
m(_ _)m
218デフォルトの名無しさん:2006/12/18(月) 00:49:05
>>215
読み込もうとするとどうなるの?
219デフォルトの名無しさん:2006/12/18(月) 01:00:38
>>216
すごい!解決したかもです。ありがとうございます

>>218
以下のチェックで必ず引っかかってましたが216さんので引っかからなくなりました
ifstream ifs(argv[1]);
if(!ifs)
return 1;
220デフォルトの名無しさん:2006/12/18(月) 01:41:41
>>219
そのままファイルに日本語書き込めるか?
ライブラリがバグッててどうしようもなかったと思うんだが。
221デフォルトの名無しさん:2006/12/18(月) 01:49:29
>>220
バグリました
引数の日本語は消え、変数内に日本語を使用するとそこで処理が止まりアプリが落ちる感じで…
振り出しに戻ったところでございます。よき方法があればご教授をTT
222デフォルトの名無しさん:2006/12/18(月) 11:22:14
>>221
SP1 が出てるから、試してみるといいかもしれない。
むしろ、試してみて報告たのむ。
223デフォルトの名無しさん:2006/12/18(月) 17:13:39
C++で質問です。
String str[] = {"aa", "bbb", "ccccc"};
のような配列の要素数を得るにはどうしたらいいのでしょうか。
224デフォルトの名無しさん:2006/12/18(月) 17:23:02
まさしくそのような配列なら、sizeof(str) / sizeof(str[0]) でOK。
225デフォルトの名無しさん:2006/12/18(月) 17:24:04
Integer型をgcc3以降のg++でも使えるようにするためにはどうすれば良いでしょうか?
今は2.95.3を併用してctype.oでごまかしながら使ってます。
226デフォルトの名無しさん:2006/12/18(月) 17:25:53
Boostを使って良(くてコンパイル時定数でなくても良)ければ、
<boost/range/size.hpp>をインクルードしてboost::size(str)という手もある。
227デフォルトの名無しさん:2006/12/18(月) 18:00:06
>>224>>226
ありがとうございます。
>>224の方法で出来たのですが、それを少し変えて
const string a[] = {"aa", "bbb", "ccccc"};を

int function(const string str[]) const {
return (int)sizeof(str)/sizeof(str[0]);
}

のような関数でfunction(a);として要素数を出すようにしたら、
戻り値が0になってしまうのですが、なんででしょうか。
228デフォルトの名無しさん:2006/12/18(月) 18:12:53
>>227
引数として得た配列のサイズを得ることはできません(固定サイズの場合を除く)。
もし問題がなければ、std::vector などを使うのが良いと思います。
229デフォルトの名無しさん:2006/12/18(月) 18:13:29
template <typename T, std::size_t N>
std::size_t array_size(T (&)[N])
{
  return N;
}
230デフォルトの名無しさん:2006/12/18(月) 18:14:17
>>228
templateで出来るだろ。
231デフォルトの名無しさん:2006/12/18(月) 22:14:53
>>227
仮引数でのTの配列型は、Tへのポインタ型へ変換される規則。

>>228
boost::sizeは、普通の引数として配列の引数を受け取るが。
(配列に対する部分特殊化は、正に229のようなことをやっている)
232デフォルトの名無しさん:2006/12/18(月) 23:13:41
度々申し訳ありません。>>229の方法で、
function() {
const string a[] = {"aa", "bbb", "ccccc"};
array_size(a);
}
のようにした場合、上手くいくのですが、下のようにすると上手くいきません。

function2() {
const string a[] = {"aa", "bbb", "ccccc"};
function1();
}
function1(const string b[]) {
array_size(b);
}

VisualStudio .NET 2003環境で以下のようなエラーが出てしまいます。
「'size_t array_size(T (&)[N])' : 'T1 (&)[N] 用のテンプレート引数を
'const std::string []' から減少できませんでした。」
どこがまちがってるんでしょうか。
233デフォルトの名無しさん:2006/12/18(月) 23:14:44
VisualC++ 2005 Expressを使ってWindowsソフトが作って見たいと思ったのですが
windows.hがインクルードできません。

Cの知識はあるのですが、C++の知識はないです。
何が原因でしょう?
234デフォルトの名無しさん:2006/12/18(月) 23:15:06
すいません訂正です。
function2() {
const string a[] = {"aa", "bbb", "ccccc"};
function1(a); // ←
}
235233:2006/12/18(月) 23:23:27
すいません、聞かなかったことにしてください・・・。
236デフォルトの名無しさん:2006/12/18(月) 23:25:20
>>232-233
226/229の方法は、配列にしか使えず、ポインタには使えない。
配列型は引数に取れないが(>231)、配列への参照型は引数に取れる(配列へのポインタ型も可)。
というわけで次のようにすればいい。
template <typename Range>
void function1(Range& b) {
  array_size(b);
}
237デフォルトの名無しさん:2006/12/18(月) 23:51:46
>>236
ありがとうございます。その方法で出来ました。
C++にはtemplateという便利なものがせっかくあるのに
使いこなせないというのはもったいないので、これから勉強し直そうと思います。
238デフォルトの名無しさん:2006/12/19(火) 08:17:38
lseek関数っていうものがいまいちよく分からないんですけど、
分かりやすく教えてください、エロい人。
239デフォルトの名無しさん:2006/12/19(火) 09:54:22
>>238
判らない人は使わなくて宜しい。
ファイルストリーム系のfseek()使えば?
240デフォルトの名無しさん:2006/12/19(火) 14:10:11
一次元配列の問題で、
六個の整数を配列に記憶して配列の中から最大値と最小値を出せって問題なのですが
これは配列に入っている数字をif文で総当りの式書かないとできないのでしょうか?
配列使って応用が効きそうだなとは思うのですがなかなかその先に考えがいけません。
何かヒントなどいただけないでしょうか?

241デフォルトの名無しさん:2006/12/19(火) 14:16:43
C++でHTTP通信をするには、どうすればいいですか?
242デフォルトの名無しさん:2006/12/19(火) 14:17:24
>>240
「ソート」とか、「ソート 配列」でググってみろ
243デフォルトの名無しさん:2006/12/19(火) 14:18:51
>>240
ヒントというか・・・
気に入ったTVが一番安く買える値段を探すときに、あなたならどうしますか?
探している途中、今まで見つけた中でいちばん安い値段をメモしておいたり・・・
244デフォルトの名無しさん:2006/12/19(火) 15:09:01
>242
>243
すいません追記で
使っていいのはif文とfor文だけです。
245デフォルトの名無しさん:2006/12/19(火) 15:14:45
>>244
>>242-243に追記と言ってどうするw
ヒントをくれてるんだから自分でやれよ
ここは宿題スレではない
246デフォルトの名無しさん:2006/12/19(火) 15:23:30
>245
はぁ?w
元からできるよw
ひとつだけ言わせてくれソ−ト使わないとこんな問題もできないんですか?wwwwww
入門スレだからどれくらいできるやついるか試しただけ、
だけどこんな初歩の問題もできないなんてwwwww
このスレの価値なし
247デフォルトの名無しさん:2006/12/19(火) 15:27:06
やれやれ・・。
次の質問どうぞ。
248デフォルトの名無しさん:2006/12/19(火) 16:36:55
>>241
処理系定義の機能を使う必要がある。よって、環境が明示されて
いなければ答えようがない。
249デフォルトの名無しさん:2006/12/19(火) 22:57:39
配列内の整数値を整列させたいのですが、qsort()を始めとしたソートアルゴリズムは使いたくありません。
どういう方法があるでしょうか。
250デフォルトの名無しさん:2006/12/19(火) 23:00:55
整列させたいのにソート使いたくないとはこれ如何に。
251デフォルトの名無しさん:2006/12/19(火) 23:02:06
アルゴリズムを使わない方法と言えば、
・他の機械(やプログラム)にデータを渡してソートしてもらう
・ユーザにデータを示してソートしてもらう
・並べ替えを一切せず、低い確率でのみ正常動作するという仕様で我慢してもらう
くらいしか思いつきません・・・
252デフォルトの名無しさん:2006/12/19(火) 23:51:45
qsort()を始めとしないソートアルゴリズムを使えばいいじゃないか。
253デフォルトの名無しさん:2006/12/20(水) 00:38:02
逆に考えるんだ。
今あるデータをソートするのではなく
最初から整列したデータを用意するんだ。
254デフォルトの名無しさん:2006/12/20(水) 07:42:40
それでいけました。ありがとうございます。
255デフォルトの名無しさん:2006/12/20(水) 10:13:55
.open,.closeとfopen,fcloseって何が違うんでしょうか?
256デフォルトの名無しさん:2006/12/20(水) 10:16:48
C++でラプラシアンフィルターを作りたいのですが誰か教えてください
257デフォルトの名無しさん:2006/12/20(水) 10:23:25
>>255
なんで同じだと思うの?
258デフォルトの名無しさん:2006/12/20(水) 13:25:00
なに?>>255
.open,.closeとfopen,fcloseの違いが分からない?

>>255それは無理矢理違いを探そうとするからだよ

逆に考えるんだ
「基本的に全く違うもので、どんな共通点を持つのか」
と考えるんだ
259デフォルトの名無しさん:2006/12/20(水) 18:36:29
C++でラプラシアンフィルターを作りたいのですが教えてもらえないですか
260デフォルトの名無しさん:2006/12/20(水) 18:38:11
>>259
お前いい加減うざい。
マルチしずぎ。
261デフォルトの名無しさん:2006/12/20(水) 18:39:30
×しずぎ
○しすぎ
262デフォルトの名無しさん:2006/12/20(水) 18:51:24
Visual C++を使用しています。
文字列操作を行うプログラムなんですが、

data[256] = "abc,de f,,,,,, g";
char finder = ','; //検索用文字

をstrchr()とmemset()とmemcpy()を用いて
,をのぞいた文字列(abcde f g)を出力させたいのですが、どのように
すればいいかサッパリ…
どんな感じで組み立てればいいか教えてもらえませんか?
263デフォルトの名無しさん:2006/12/20(水) 19:07:15
>>262
strchr()とmemset()とmemcpy()を使わないで一文字ずつ辿るのが手軽だと思うよ
というかstrchr()とmemset()とmemcpy()を使わないといけない≒宿題なら別なところ行け
264デフォルトの名無しさん:2006/12/20(水) 21:05:31
>>262
というかVC++使っててC++スレに質問来るんだから
std::string使えよ…
265デフォルトの名無しさん:2006/12/20(水) 21:50:21
>>262
文字列処理でmemset()だとかmemcpy()なんか使うなよ。
266デフォルトの名無しさん:2006/12/21(木) 01:24:45
std::string使ってremoveみたいなん使えばすぐすむ話じゃん
あとCならmemmoveを使った方がね
267デフォルトの名無しさん:2006/12/21(木) 20:15:57
java始めて3ヶ月の者です。質問なのですが、C++を勉強すればCも勉強したことに
なりますか?たとえて言うなら、大型自動車の免許を取れば普通自動車も運転でき
ちゃう、といった感じのイメージで捉えていいのかということです。C++を勉強すれば
Cも書けるようになるのかということです。
268デフォルトの名無しさん:2006/12/21(木) 20:29:59
大型免許の例えはうまい、その考えでいいと思う。
できるけど、慣れないのでやや面倒かもしれないということはあるだろう。
269デフォルトの名無しさん:2006/12/21(木) 20:31:12
やはり、そうですか。回答どうもです。
270デフォルトの名無しさん:2006/12/21(木) 20:44:49
大型は普通をもってなきゃ取れないけどな。
271デフォルトの名無しさん:2006/12/21(木) 20:53:56
自衛官になればおk
272デフォルトの名無しさん:2006/12/21(木) 21:07:50
>>267
段階踏んでまずCやるほうがいいよ。
273デフォルトの名無しさん:2006/12/21(木) 21:10:08
戦車…
274デフォルトの名無しさん:2006/12/21(木) 21:57:49
たいていのC++できる人ってC++始める前にCやってるんじゃないかな
275デフォルトの名無しさん:2006/12/21(木) 22:32:56
C++が主に使われてる分野ってなんですか?ゲームですか?組み込み式?
276デフォルトの名無しさん:2006/12/21(木) 22:38:09
GUI
277デフォルトの名無しさん:2006/12/21(木) 23:42:46
随分抽象的な回答ですね。
278デフォルトの名無しさん:2006/12/21(木) 23:48:39
え?

C++やったらCの知識は要らないんだよね
式にするとC++ - C = C+ みたいに…
279デフォルトの名無しさん:2006/12/22(金) 00:11:13
C++-C=1じゃね?
280デフォルトの名無しさん:2006/12/22(金) 00:13:07
ワロタ
281デフォルトの名無しさん:2006/12/22(金) 00:31:33
C++-C=0
282デフォルトの名無しさん:2006/12/22(金) 00:32:19
C++ - C = ++
283デフォルトの名無しさん:2006/12/22(金) 00:49:30
マジレスすると、CはC99でC++とは違う道を歩き始めたから
C99の新機能は勉強しておいて損はないと思う。
284デフォルトの名無しさん:2006/12/22(金) 00:56:22
と言ってもinlineやboolなど、明らかにC++を意識したとしか思えない機能も結構あるけどな。
285デフォルトの名無しさん:2006/12/22(金) 01:04:52
wikiで「上位互換はなくなった」という記事を読んだ
286デフォルトの名無しさん:2006/12/22(金) 01:15:56
可変長配列は便利だ。
ヒープを使わない点もパフォーマンス狙いのときには利用価値がある。
287デフォルトの名無しさん:2006/12/22(金) 01:21:25
>>286
可変長配列で使うメモリはどこから取ってくるの?
288デフォルトの名無しさん:2006/12/22(金) 01:25:02
スタックじゃねーの?
289デフォルトの名無しさん:2006/12/22(金) 01:25:35
多分alloca()に似てるとオモ
290デフォルトの名無しさん:2006/12/22(金) 01:41:47
あ、誤解してた。
C99でいう可変長配列は実行時にサイズを決定できる配列のことか。
サイズを動的に変更可能な配列という意味ではないんだね。
それならヒープでなくスタックに領域を取れるね。
291デフォルトの名無しさん:2006/12/22(金) 04:33:26
gccだとalloca()で実装されてたりするね。<可変長配列
292デフォルトの名無しさん:2006/12/22(金) 07:58:45
すみません、教えてください。
下記のように宣言されてる関数を使いたいのですが
呼び出すとアクセス違反でエラーになってしまいます。

long WINAPI Reset( long Port, long *Sts );

こんな感じで呼び出しています
-----
long *sts;
Reset(1, sts);
----

たぶん第2引数のstsの渡し方が原因と思うのですが、ポインタ関連を理解してないからですかね?

293デフォルトの名無しさん:2006/12/22(金) 08:16:28
>>292
Resetがどんな動作かによる
Stsに何かを返すのなら
long sts;
Reset(1, &sts);
294292:2006/12/22(金) 09:57:53
>>293
stsはステータスを返すようになってます。
ご指摘のとおりにコーディングしなおしたら無事動きました。
自分のは入れ物を用意してなかったからエラーになったんですね。
ありがとうございました。

あと、もう一つ質問させてください。
このReset()の仕様書をみるとstsに返される値(ステータスワード)の一覧が
こんな感じになっています。

SW1   SW2
E1    00   正常終了
E1    01   エラー
E2    10   待機中

stsはlong型なのでSW1(2バイト)とSW2(2バイト)ということになるのですか?
また、stsからSW1とSW2を切り分けるのはどうすればいいのでしょうか?
本来この関数作った人に聞くべきなんでしょうが、推測でもいいのでよろしくお願いします。
295デフォルトの名無しさん:2006/12/22(金) 10:13:04
>>294
上位バイトと下位バイトに分けるんなら
short sw1 = sts&0xFFFF;
short sw2 = (sts>>16)&0xFFFF;
SW1と2でどちらが上位か分からないから逆かもしれん

仕様書とか言ってるってことは仕事?
もしそうならCの基礎も急いで勉強した方がいいような…
296292:2006/12/22(金) 13:00:52
>>295
ビット操作ってやつですね。
はい、仕事じゃないです。
趣味です。
勉強がんばります。
297デフォルトの名無しさん:2006/12/22(金) 13:05:56
仕事じゃないならのんびり頑張れー
298デフォルトの名無しさん:2006/12/22(金) 19:58:28
":"がわかりません。

class m_stack : public stack {
private:
const unsigned int stack_size;
public:
m_stack(const unsigned int size) : stack(size), stack_size(size) { }
}
これで最後の行のm_stack()はclass stackのコンストラクタを
実行し、次にstack_size()を実行するということですか?
どうして{ }の中に記述しないのですか。よろしくお願いします。
299デフォルトの名無しさん:2006/12/22(金) 20:04:08
>これで最後の行のm_stack()はclass stackのコンストラクタを
>実行し、次にstack_size()を実行するということですか?
その通り
>どうして{ }の中に記述しないのですか
初期化と代入の違い
300デフォルトの名無しさん:2006/12/22(金) 20:04:57
ありがとうございます。おことば、かみしめて考えてみます。
301デフォルトの名無しさん:2006/12/22(金) 21:59:51
あの〜、、
演算子のオーバーロードで、インクリメント演算子を
前置と後置用でそれぞれ定義した場合、クラスのメンバにそれぞれインクリメントするようにしたんだけど、
A A::operator ++(){
 this->x++;
 this->y++;
 return *this;
}
A A::operator ++(int nouse){
 this->x++;
 this->y++;
 return *this;
}
例えばob2(1,1)の場合,ob1 = ++ob2;とすると、結果ob1(2,2),ob2(2,2)になるのですが、
ob1 = ob2++;この場合、後置だからob1(1,1),ob2(2,2)の結果にするにはどのようにすればいいですか?
上記だと後置のオーバーロードでもob2++が評価されてから、ob1に代入されてしまいますし・・。
302デフォルトの名無しさん:2006/12/22(金) 22:10:09
>>301
コピーを作ってそいつをインクリメントすればよい。
A A::operator ++(int) {
 A temp(*this);
 return ++temp;
}
303デフォルトの名無しさん:2006/12/22(金) 22:11:26
追記
前置インクリメントは、戻り値の型をAへの参照型にした上で*thisを返すようにすべき。
304デフォルトの名無しさん:2006/12/22(金) 22:18:41
>return ++temp;
これでいいの?

A A::operator ++(int) {
 A temp(*this);
 this->x++;
 this->y++;
 return temp;
}

じゃないかな?と思ったんだけど
305301:2006/12/22(金) 22:29:53
>>302
ご返信ありがとうございました。
コピーを作成するのは思いつきませんでした。

>>304
ありがとうございます。無事解決しました。

お二人とも感謝です^^。
306デフォルトの名無しさん:2006/12/23(土) 00:16:06
>>304
グハッ、何寝ぼけたことを書いたんだろう俺_| ̄|○
でもさ、こうで良くないか。
A A::operator ++(int) { 
 A temp(*this); 
 ++*this;
 return temp; 
307デフォルトの名無しさん:2006/12/23(土) 00:26:25
>>306
それも考えたんだけど
なんか後置式の中に前置式を入れるのヤダったから
変数も2つだけだし
でも拡張性とか考えれば>>306がいいんだろうけどね

あとは>>301の好み次第かな
308デフォルトの名無しさん:2006/12/23(土) 01:00:40
Effective C++かなんかにも後置インクリメント・デクリメントは前置版を使って実装しろと書いて張ったはず。
309デフォルトの名無しさん:2006/12/23(土) 14:54:36
>>298
stack_size は変数だから、実行するのはおかしいだろ。

stack_size(size) は m_stack のメンバ stack_size を size で初期化している。
310デフォルトの名無しさん:2006/12/24(日) 00:12:47
素朴な疑問ですが代入演算子のオーバーロードに virtual をつけるような場面ってありますか?

virtual Foo& operator=(const Foo& foo); ???
311デフォルトの名無しさん:2006/12/24(日) 00:30:24
代入演算子は継承されないんだから、仮想にしてもしなくても
同じなんじゃねーの?
312デフォルトの名無しさん:2006/12/24(日) 00:42:27
>>311 継承されるような気がするんだが・・・ VC++2005
#include <iostream>
using namespace std;

class Base {
public:
virtual Base& operator=(const Base& base) {
cout << "Base" << endl;
return *this;
}
};

class Sub : public Base {
public:
virtual Base& operator=(const Base& base) {
cout << "Sub" << endl;
return *this;
}
};

void func(Base& base) {
Base a;
base = a;
}

int main() {
func(Base());
func(Sub());
return 0;
}
313デフォルトの名無しさん:2006/12/24(日) 02:13:14
311は全てのクラスで暗黙の内に定義されるoperator =が、
基底クラスのoperator =を隠すことを言いたいのだと思う。
314デフォルトの名無しさん:2006/12/24(日) 05:47:25
1つのスレッドでいくつものソケットを扱うことってできるのでしょうか?

たとえば、1つのスレッドで何箇所からも同時にダウンロードする とか


ご教授願います
315デフォルトの名無しさん:2006/12/24(日) 08:40:32
明らかにスレ違い。
http://www.kt.rim.or.jp/~ksk/sock-faq/indexj.html

ここでも見ておけ。
316デフォルトの名無しさん:2006/12/24(日) 17:50:15
C++って何?
317デフォルトの名無しさん:2006/12/24(日) 18:19:34
プログラミング言語の1つ。
Cを基にしており、Cと互換な部分が多いことも売りの1つ。
その一方で、オブジェクト指向プログラミングやジェネリックプログラミングなど比較的最近の
プログラミングパラダイムを取り入れたマルチパラダイムな言語になっている。

こんな感じでいいか?
318デフォルトの名無しさん:2006/12/24(日) 19:47:48
C言語はじめてみたいと思っていますが、
CとC++ってどちらを選んでよいのかわからないのですが、
どのように選んだらよいでしょうか。
319デフォルトの名無しさん:2006/12/24(日) 20:01:49
12月24日にそんなカキコミをするような奴はCだろうがC++だろうが
やっても負け組み決定。

良くて半可通じゃね??
320デフォルトの名無しさん:2006/12/24(日) 20:26:48
>>319
なんで?
321デフォルトの名無しさん:2006/12/24(日) 20:35:06
>>319
12月24日に2ちゃんねるやってるあなたも負け組みなんでしょ?
322デフォルトの名無しさん:2006/12/24(日) 20:35:58
ちょっと中腰でタイプさせてもらうがすまん
今からパーティ行かなきゃならんのでレスできませんよ。
323デフォルトの名無しさん:2006/12/24(日) 20:40:56
>>322
妄想御疲れ様です。
324デフォルトの名無しさん:2006/12/24(日) 20:49:55
C++ばっかりやってると頭がおかしくなりますよ。
325デフォルトの名無しさん:2006/12/24(日) 23:28:16
C++やってると、Kusakabe氏に遊んでもらえませんよ。
326デフォルトの名無しさん:2006/12/26(火) 15:08:24
>>322
Mr.BATERや!
327デフォルトの名無しさん:2006/12/29(金) 20:34:21
C++で入出力に関するライブラリを使用する際、
iostream系とstdio系を混ぜないようにとはよく言われるのですが、
C++でstdioではなくiostreamを使用する積極的な理由とはなんでしょうか?
別に積極的とは言わないまでも、こういう理由からstdioではなくて
iostreamが必要という回答があれば教えてください。
328デフォルトの名無しさん:2006/12/29(金) 20:36:24
>>327
printf()だとクラスの入出力が面倒くさい、あるいはできない。
ストリームなら、多重定義によってコンパイル時に自動判別
してくれるのでとても助かる。

逆に組み込み型の入出力しかしないなら、printf()とscanf()だけの
方がいいと思う。現時点では。
329デフォルトの名無しさん:2006/12/29(金) 20:48:51
328の言うような「こっち側」だけでなく、
「あっち側」もiostreamでは自由度が高い。

ストリームバッファクラスを書けば、
ファイルやメモリに限らずどんなものに対しても入出力できるようになる。
330デフォルトの名無しさん:2006/12/29(金) 20:54:11
コンソール画面に、複数の項目を表示し、
方向キーでいずれか(1つ)の項目を選択させ、
選択された項目を下のように括弧( [ と ] )で囲みたいです。
※ 画面に表示される項目はvectorになっており(vector<string>)、
pop_backすることで、項目の数は、変動します。
全通りのパターンを書く以外に何かいい方法があれば教えてください!!

例) 項目数が9で[メニュー4]を選択した場合の表示

メニュー1 メニュー2
メニュー3 [メニュー4]
メニュー5 メニュー6
メニュー7 メニュー8
メニュー1 メニュー2
メニュー9

(横2列で表示)
331デフォルトの名無しさん:2006/12/29(金) 21:18:09
率直に考えたらこうなったが問題あるか?ただしコンパイル・実行は全く行っていない、悪しからず。
typedef std::vector<std::string> MenuItem;

void ShowMenu(MenuItem item, MenuItem::size_type selected)
{
& using std::cout;
& for (MenuItem::size_type i = 0; i < menuItem.size(); ++i)
& {
& & if (i == selected)
& & & cout << '[';
& & cout << item[i];
& & if (i == selected)
& & & cout << ']';
& & cout << (i & 1 ? '\t' : '\n');
& }
}
332デフォルトの名無しさん:2006/12/29(金) 21:30:08
>>331

>率直に考えたらこうなったが問題あるか?ただしコンパイル・実行は全く行っていない、悪しからず。

いいえ。問題なんてとんでもない。利用させていただきます。
ありがとうございました。
333デフォルトの名無しさん:2006/12/30(土) 01:48:34
C++はスレッドとかGCとか標準GUIライブラリの
規格化はしないの?
334デフォルトの名無しさん:2006/12/30(土) 01:50:01
>>333
C++の設計と進化を読め。
335デフォルトの名無しさん:2006/12/30(土) 02:07:57
istream& operator>>(istream &,const char *)
の定義をヘッダでするとリンクエラー吐くのは何故?in .net2003
cppファイル内なら通るんだけど
336デフォルトの名無しさん:2006/12/30(土) 02:19:06
>>335
俺のエスパー値が低くてわからないので、
症状が再現する最小限のコードを晒してくれ。
337327:2006/12/30(土) 07:15:46
>328
>329

必要な局面があるという事がわかって安心しました。
C++の勉強中ですが、iostream系もサボらずに覚えようと思います。
338デフォルトの名無しさん:2006/12/30(土) 09:33:18
>>333
スレッドは提案が出ていたと思う。

>>335
inline付ければ平気。
インラインでない(かつテンプレートでない)関数をヘッダで定義すると、
それをインクルードした全てのcppファイル(そしてそれをコンパイルしたobjファイル)にその関数の定義が含まれてしまう。
するとリンク時に同一名のシンボルが複数見付かったというエラーになる。

そもそもその関数を定義するのはなぜ?自分で書かなくても(std::istreamのメンバとして)標準ライブラリにあるだろうに。
339デフォルトの名無しさん:2006/12/30(土) 12:47:06
実行ファイル化した物や開発環境でデバッグファイルを作成した物は
問題なく読み込めるのですが、少しでもファイルの内容に変更を加えるだけで

error C2146: 構文エラー : ';' が、識別子 'lpDD' の前に必要です。
error C2501: 'LPDIRECTDRAW7' : 識別名を宣言するのに、型が指定されていません。

というエラーが出て、自家用PCでのVisualC++での開発が頓挫しております。
この場合、どうすればこの構文エラーがなくなってくれるのでしょうか・・・
340デフォルトの名無しさん:2006/12/30(土) 15:23:14
main()
{
 int*p;
 if(1)
 {
  int x; = 3;
  p = &x;
 }
 printf("%d", *p);
}

xがスコープから外れてるので使えないと思ったのですが
vc2003だと 3 と出力されました。
これの出力はどのコンパイラでも 3 になりますか?
それとも実装や状況に依存しますか?
341デフォルトの名無しさん:2006/12/30(土) 15:27:23
>>339
LPDIRECTDRAW7 が宣言されているヘッダをインクルードすればいいんじゃない?
342デフォルトの名無しさん:2006/12/30(土) 15:28:04
>>340
未定義動作。
343デフォルトの名無しさん:2006/12/30(土) 15:30:32
>>342
激しくさんくすこでつ!!
344デフォルトの名無しさん:2006/12/30(土) 15:32:44
クラス図の書き方がよくわからないのですがどういう決まりがあるんですか?
線の先が▲だったり、■だったりするのがよくわかりません
345デフォルトの名無しさん:2006/12/30(土) 17:34:21
JavaとかC#は一つのクラスにつき、一つのソースファイルを使う傾向があるようですが、
C++の場合は一般的にどうするべきなのでしょうか。

複数クラスを機能別にソースファイルに分けるべきなのでしょうか、
それともJavaのように一つずつクラス毎で分けたほうが良いのでしょうか。
346デフォルトの名無しさん:2006/12/30(土) 20:14:48
>>338
わかりやすい説明ありがとう
いや楽がしたくて
int a, b;
cin >> "(" >> a >> "," >> b >> ")";
みたいに出力と対称に入力出来るようにしてみた。

あと>>336もありがとう
347デフォルトの名無しさん:2006/12/30(土) 20:41:04
> JavaとかC#は一つのクラスにつき、一つのソースファイルを使う傾向があるようですが、 

そんなことありません。
348デフォルトの名無しさん:2006/12/30(土) 23:11:15
Javaはそうだろ
349デフォルトの名無しさん:2007/01/01(月) 02:52:07
>>347
バカ。
そんなことある。
350デフォルトの名無しさん:2007/01/01(月) 04:10:31
>>345
分けるべきだな
ひとつの関数でも分ける
プログラミングの苦痛は、大きいクラスでも
大きい関数でもなく、大きなファイルから来る。
これは少し冗談だがBoostでも見ればだいたいこれくらいで
分けたらいいというのは分かるぞ
351デフォルトの名無しさん:2007/01/01(月) 04:58:17
そうしてリビジョン管理もろくにできない香具師が量産される罠。
352デフォルトの名無しさん:2007/01/01(月) 09:18:50
確かに(-_-)
353デフォルトの名無しさん:2007/01/02(火) 20:59:07
Visual C++ express Editionで、コンソールアプリケーションを使っていて
↓のようなウォーニングが出ます。動作事態は問題ないのですが、
 出さないようにする方法を教えてください。
d:\rankpro\addmatchresult.cpp(43) : warning C4996: 'getch' が古い形式として宣言されました。
354デフォルトの名無しさん:2007/01/02(火) 21:02:30
355デフォルトの名無しさん:2007/01/02(火) 21:02:54
ヘッダincludeするまえに
#pragma warning(disable:4996)
356デフォルトの名無しさん:2007/01/02(火) 21:49:01
>>354 , >>355
出来ました。
どうも、ありがとうございました。
357デフォルトの名無しさん:2007/01/03(水) 23:15:07
#include <vector>

class Integer {
 const int i;   // ここのconstが問題
public:
 Integer(int i) : i(i) { }
};

int main()
{
 std::vector<Integer> vec_int;
 vec_int.push_back(Integer(1));
}

なぜこのコードがコンパイルできないのか理解できません。
4行目のconstがなければ通るんですけど。。。。
コンパイラはGCC3.2.3です。
358デフォルトの名無しさん:2007/01/03(水) 23:47:05
vectorの要素には代入演算子が必要。
自分で書いてないから暗黙の代入演算子がコンパイラによって作られる。
暗黙の代入演算子がconstメンバ変数に代入しようとしてアウト。
359デフォルトの名無しさん:2007/01/04(木) 02:30:00
constは引数か定数でしかあまり使わないな〜
360デフォルトの名無しさん:2007/01/04(木) 04:23:38
STLのコンテナの要件は、代入演算子じゃなくてコピーコンストラクタだよ。
その部分以外は正しいけどね。
361デフォルトの名無しさん:2007/01/04(木) 09:34:48
>>357
vector の push_back() ならコピーコンストラクタだけで
実装できそうだな。エラーメッセージは?
362デフォルトの名無しさん:2007/01/04(木) 10:06:32
>>360
2003 版の規格の 23.1 p3 によると、コンテナ全般での要素型への要求として
CopyConstructible と Assignable が両方必要になってる。

http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#276
これでコンテナ全般では Assignable を必要としなくなったけど、
vector では別途 Assignable が明記されたので vector に限れば
同じこと。
363デフォルトの名無しさん:2007/01/04(木) 10:27:44
>>358
暗黙で定義されるのはコピー代入演算子

>>360
規格23.1.3
コンテナに格納されるオブジェクトの型はCopyConstructibleかつAssignable
364357:2007/01/04(木) 11:35:59
皆さんありがとうございます。

エラーメッセージはこんな感じです。
コピー代入演算子でエラーが出ているようです。
また、push_back()をしなければエラーは出ません。

/usr/include/c++/3.2.3/bits/stl_vector.h: member function 内の
`Integer& Integer::operator=(const Integer&)':
/usr/include/c++/3.2.3/bits/stl_vector.h:895:
`void std::vector<_Tp, _Alloc>::_M_insert_aux(__gnu_cxx::__normal_iterator<_Tp*, std::vector<_Tp, _Alloc> >,
const _Tp&) [with _Tp = Integer, _Alloc = std::allocator<Integer>]' から実体化されました
/usr/include/c++/3.2.3/bits/stl_vector.h:498: `void std::vector<_Tp, _Alloc>::push_back(const _Tp&)
[with _Tp = Integer, _Alloc = std::allocator<Integer>]' から実体化されました
const_member.cpp:12: ここで実体化されました
/usr/include/c++/3.2.3/bits/stl_vector.h:895: non-static const member `const int Integer::i', can't use default assignment operator

メンバ変数をconstにするのは、関係のある複数の変数をひとまとめにするためだけに
クラスを使いたいからです。
Cの構造体にコンストラクタをくっつけるだけみたいな。
だから最初に載せたコードのInteger::iは本当はpublicメンバです。

やりたいことをスマートに実装する方法はないものでしょうか。
あえてメンバをconstにしなくても困らないっちゃあ困らないんですが。
365デフォルトの名無しさん:2007/01/04(木) 11:46:37
>>364
じゃあconst取れヴォケ。
366デフォルトの名無しさん:2007/01/05(金) 23:54:09
>>364
インスタンスをconstで宣言して代入じゃ問題が?
367デフォルトの名無しさん:2007/01/07(日) 16:38:31
火葬軽症って何ですか?
368デフォルトの名無しさん:2007/01/07(日) 17:09:34
文法等で規定されている形式的な継承であるかどうかに関係なく、
実質的に継承関係になっているような継承のこと。
369デフォルトの名無しさん:2007/01/07(日) 22:02:52
継承元は実体化できないよ〜ん
必ず継承して実体化できるようにしてね(はぁと)
370デフォルトの名無しさん:2007/01/07(日) 23:26:58
ダイナミックキャストって、動的に判断されるのだよな?
クラスのインスタンスにクラス情報でも勝手に組み込まれて、
グローバル領域にクラス相関図情報みたいのが勝手に作られてるのか?
371デフォルトの名無しさん:2007/01/07(日) 23:41:26
>>368,369
もっともらしく嘘を教えていただきまして
ありがとうございます
372357:2007/01/08(月) 00:00:36
>>370
手元にある本には、処理系によって異なりうるが、仮想関数テーブルのなかに
型情報を収めたテーブルへのポインタが格納されると書いてある。
だからdynamic_castは多相型(仮想関数をひとつ以上持つクラス)の
オブジェクトにしか適用できないらしい。
373デフォルトの名無しさん:2007/01/08(月) 00:02:15
ひどいミスだ。
ちなみにオブジェクトと言ってもポインタかリファレンスね。
374デフォルトの名無しさん:2007/01/08(月) 00:27:44
class Base
{
public:
int n;
};
//仮想継承
class D1 : public virtual Base { /* 〜 */ };
class D2 : public virtual Base { /* 〜 */ };

class Derivation : public D1, public D2 { /* 〜 */ };

この例のような状態は特に菱形継承(ダイアモンド継承)と呼ばれる。

仮想継承でない(D1, D2の部分のvirtualを取り除く)場合、DerivationのインスタンスにはD1の基底のBaseのnとD2の基底のBaseのnという2つのnが別に存在することになる
(メンバ関数も同様)。仮想継承した場合、 DerivationのインスタンスにはBaseの部分はただ1つしか存在しない。D1の基底とD2の基底が共有されている状態である。

C++ではクラスの多重継承・仮想継承が共に使用できる。しかしC++を基にしているJava、C#、Dではいずれも使用できない。
375デフォルトの名無しさん:2007/01/08(月) 01:42:50
>>374
ありがとうございました。
よく分かりました
376デフォルトの名無しさん:2007/01/08(月) 01:49:33
vector<int> vec1;
vector<int>::iterator iter;
int tmp;
cout << "項目を入力:" << endl;
while (cin >> tmp)
vec1.push_back(tmp);
cout << "表示方法を数字で選択:" << endl;
cout << "\t1\40入力順" << endl;
cout << "\t2\40逆" << endl;
int choise;
cin >> choise;   ※
cout << choise << endl;
switch(choise){
(以下省略)

上のソースで※の行のcinが無視されてしまいます。
だから例えば※の1行上で int choise = 0; 等とすると最後までchoiseは0のままです。
入力できるはずのところで入力できません。どうしてでしょうか?
377デフォルトの名無しさん:2007/01/08(月) 02:00:40
while (cin >> tmp)
vec1.push_back(tmp);

をどうやって抜けてる?
378デフォルトの名無しさん:2007/01/08(月) 02:06:50
>>377
Ctrl+Z です
379デフォルトの名無しさん:2007/01/08(月) 02:14:18
cinにstd::ios::failbit立ってるんとちがう?
cin.clear()してみ。
380376:2007/01/08(月) 03:10:27
>>379
できました。ありがとうございます。
Ctrl-Z が failbit フラグをonにするということですか?検索してみましたがよくわかりません。
381デフォルトの名無しさん:2007/01/08(月) 03:25:19
>>380
正しくは、cinがEOFを検出した事でstd::ios::eofbitが立つが、
std::ios::eofbitが立つ時は必ずstd::ios::failbitも立つ。

failbitが立ってしまうとそのストリームに対する操作はclear()と
close()以外は無効になる。
382デフォルトの名無しさん:2007/01/08(月) 07:59:33
>>371
あほな当て字をするからまともに答えてもらえないんだよ。
おれも仮○包茎の説明をしよかと思って思いとどまった。
383デフォルトの名無しさん:2007/01/08(月) 10:14:02
なにせマたちはスルーカが足りないからね。
384デフォルトの名無しさん:2007/01/09(火) 01:49:22
longをstringに変換する方法を教えてください。
お願いします。
385デフォルトの名無しさん:2007/01/09(火) 01:52:54
>>384
sprintf
snprintf
stringstream
strstream
boost::lexical_cast
でググって、好きな方法を選べ
386デフォルトの名無しさん:2007/01/09(火) 01:56:10
>>385
ありがとうございます。
それ以外のにします。
387デフォルトの名無しさん:2007/01/09(火) 01:58:10
>>386 語るんじゃねーよ。
>>385 ありがとです。
388デフォルトの名無しさん:2007/01/09(火) 02:02:31
>>387 騙るんじゃねーよ。
>>384 ありがとです。
389デフォルトの名無しさん:2007/01/10(水) 22:19:38
ダライアス継承の利点を教えてください
390デフォルトの名無しさん:2007/01/10(水) 22:44:47
何、そのシューティングっぽい継承。
ダイアモンド継承なら知ってるけど。
391デフォルトの名無しさん:2007/01/14(日) 21:12:30
C++で、適当な多次元配列を定義して、その型名をtypeid演算子によって表示するプログラムが分かりません。教えて下さい。
392デフォルトの名無しさん:2007/01/15(月) 11:07:49
あああ
393デフォルトの名無しさん:2007/01/15(月) 12:23:15
>>391
型名というか名前は実装依存だが。

int n[1][2][3];

std::cout << typeid(n).name() << std::endl;
394デフォルトの名無しさん:2007/01/15(月) 22:30:57
よろしこ
UINT max;
UINT foo;
if(1 < foo < max)
{
処理
}
このように書くと、

warning C4804: '<' : 演算中の 'bool' 型の使用方法が安全ではありません
warning C4018: '<' : signed と unsigned の数値を比較しようとしました。
こんなときはどうしたらいいですか?
1にUINTの1だ〜と宣言させればよいかと思い
UINT 1なんて書いたら、コンパイラに馬鹿にされました
int 1と書いたらそんなものを付けるなともっと馬鹿にサレマスタ
VS2005
SDKデツ
395デフォルトの名無しさん:2007/01/15(月) 22:46:03
if (1 < foo && foo < max)
396デフォルトの名無しさん:2007/01/15(月) 22:55:35
>>395
394です
サンクス、馬鹿にされなくされなくなりましたが
foo && foo
でなんで直ったのか、もっと分からなくナリマスタ
解説してもらえませんか
397デフォルトの名無しさん:2007/01/15(月) 22:59:07
>>396
悪い事は言わん
1から勉強やり直せ
398デフォルトの名無しさん:2007/01/15(月) 23:02:09
foo && foo
じゃなくて
(1 < foo) && (foo < max)
と捉えろ
399デフォルトの名無しさん:2007/01/15(月) 23:43:30
>>395です
>>398サンクス良く分かりマスタ
が、1にプレフィックスを付ける方法とかは無いのですか?
400デフォルトの名無しさん:2007/01/15(月) 23:46:01
1u
401デフォルトの名無しさん:2007/01/15(月) 23:56:18
>>400
ちょww、お前ソレいま教えるなよ、こいつなんか勘違いしたまま先に進んじゃうぞw
402デフォルトの名無しさん:2007/01/15(月) 23:59:19
>>400
1uだとやっぱり、
warning C4804: '<' : 演算中の 'bool' 型の使用方法が安全ではありません
warning C4018: '<' : signed と unsigned の数値を比較しようとしました。
これが出るんだよね・・・・
403デフォルトの名無しさん:2007/01/16(火) 16:26:11
「計算式対応電卓」
・計算式を文字列として入力すると、その計算を行い、結果を出力するプログラムを
作成せよ。
-入力文字列を解析し、数値と演算子に分けて計算する。
-例:計算する式を入力してください。終了:end
   使用可能演算子:四則演算(+-*/)
1+2
   答えは3です。
・必ず四則演算のほかに、使用可能な演算子を追加せよ。
 入力する際の演算子記号は任意にきめてよい。
-例:あまりを求める %
   二乗を求める
・繰り返し何度も計算できるようにする。
404デフォルトの名無しさん:2007/01/16(火) 16:29:03
つ 数式 and (パーサー or 構文解析)
http://pc10.2ch.net/test/read.cgi/tech/1168663908/
405デフォルトの名無しさん:2007/01/16(火) 17:34:56
前置法 中置法 後置法について調べてから
あとは>>404のスレで
406デフォルトの名無しさん:2007/01/16(火) 20:37:52
初期化が必要なコンストラクタしかないクラスインスタンスの配列を生成するにはどのように書けばよいのでしょうか?

class A
{
public:
A(int a);
};

このクラス定義に対して
A *ADim=new A[100]; //初期化がないと言って怒られます

よろしくお願いします
407デフォルトの名無しさん:2007/01/16(火) 20:45:58
byte 配列でメモリを確保してからひとつづつ placement new で初期化かなー。
408デフォルトの名無しさん:2007/01/16(火) 21:47:56
>>406
どう初期化したいの?
409406:2007/01/17(水) 00:08:00
1個だけであれば
A a(0);
あるいは 
A *a=new A(0);
でインスタンスが生成できますが
これを100個配列として生成する記述の仕方がわかりません。
よろしくお願いします
410デフォルトの名無しさん:2007/01/17(水) 08:09:53
std::vectorでも使っておけ。
411デフォルトの名無しさん:2007/01/17(水) 11:08:00
#include <cstdlib>
#include <memory>

A *ADim = (A*)std::malloc(sizeof(A) * 100);
std::uninitialized_fill_n(ADim, 100, A(1234));

別々の初期値が要るならraw_storage_iteratorで。
412デフォルトの名無しさん:2007/01/17(水) 11:18:16
たしかにそれをやってくれるのがvectorなわけだよな
413デフォルトの名無しさん:2007/01/17(水) 13:53:28
>>409
A(0) を100個でいいなら

std::vector<A> ADim(100, A(0));
414デフォルトの名無しさん:2007/01/17(水) 19:12:42
#include <iostream>
using namespace std;

int main(void)
{
unsigned char x,y;

cout << "2つの値を入力してください。\n";

cin >> x >> y;

x -= '0';
y -= '0';

int a = x + y;
int b = x * y;

printf("x = %d, y = %d, x + y = %d, x * y = %d",x,y,a,b);

return 0;
}

これで出力したら10以上の数値が出ないんですが、
どうしたら出るようになるか教えてください。
415デフォルトの名無しさん:2007/01/17(水) 19:16:51
>>414
xとyをint型か何かにする。
なんだかんだいって(signed/unsigned) charは文字を扱うためのもの。
416デフォルトの名無しさん:2007/01/17(水) 19:20:00
そうしたいのはやまやまなんですが、
宿題で『unsigned char』と『printf』ははずせないんです…。
417デフォルトの名無しさん:2007/01/17(水) 19:26:41
文字列して atoi じゃダメなのか?
418デフォルトの名無しさん:2007/01/17(水) 19:31:54
>>414
正直、気持ち悪すぎ
419デフォルトの名無しさん:2007/01/17(水) 19:32:22
>>417
atoiってchar以外で使えたっけ
420デフォルトの名無しさん:2007/01/17(水) 20:22:22
クラスって今まで頭の中で理解してたつもりだったが、クラスを使う場面が無かった
(あったけどうわべのだけ理解していた)のですが、Win32APIを弄りだしたら
物凄くクラスを使うと便利ということが分かったばかりの初心者です。

privateで宣言した
TCHAR *buffer[512];
というコンストラクタをデクストラクタする時に

foo::~fooSet()
{
  delete buff;
}
とすると、警告が出るのですが使い方間違ってますかというより、privateな変数は
デクストラクタしなくてもいいのでしょうか?

warning C4156: 'delete' の配列でない形式を使った配列の削除は、定義されていません。
warning C4154: 配列の delete が定義されていません。配列は、ポインタに変換されます。

VS2005
SDK
421デフォルトの名無しさん:2007/01/17(水) 20:29:22
buffer は配列であって new で確保したものじゃないだろ?
delete するなら buffer[0] とかだ
422デフォルトの名無しさん:2007/01/17(水) 20:31:16

スマソなれない言葉なんで(^^;
×デクストラクタ
○デストラクタ
です、よろしく
423デフォルトの名無しさん:2007/01/17(水) 20:33:48
>>421
サンクス
>>buffer は配列であって new で確保したものじゃないだろ?
そうです
buffer[0]したら警告が止んだ、これでいいのか、なるほど。
424デフォルトの名無しさん:2007/01/17(水) 20:38:10
よくねー
newしてないものをdeleteしちゃダメ。
425デフォルトの名無しさん:2007/01/17(水) 20:45:04
>>424
サンクス
>>423だす
ていうかnewしてなかったら、deleteしなくてもいいの?
426デフォルトの名無しさん:2007/01/17(水) 20:49:16
当たり前だ・・・・
何も知らないという事は恐ろしい
427デフォルトの名無しさん:2007/01/17(水) 21:19:33
そう言うなよ兄者
処でクラスって楽しいですね、これからは全てクラス化しようと
決心シマスタ
428デフォルトの名無しさん:2007/01/17(水) 21:22:51
> privateで宣言した
> TCHAR *buffer[512];
> というコンストラクタを
それコンストラクタじゃなくてメンバ変数だよ、多分
あと、デストラクタするってのも普通言わない
429デフォルトの名無しさん:2007/01/17(水) 21:49:29
>>428
なるほど、拙者承知した
処で、兄者はC++使いのつわものと拝見したが、Win32APIの関数もクラス化して
ライブラリィとか作ったりしたこともあると思うのだが、どんなものを作ったのか
教えてくれまいか、コードを書いてくれとは言わないが、これは便利だった役にたった
という物があったら教えてくれましか。
ATLとかvectorとか見たら目眩がするのでいっそ自分で作ったほうがましかと思う次第であるのでヨロシク
430デフォルトの名無しさん:2007/01/17(水) 22:00:23
> 自分で作ったほうがましかと思う
自分で作っても劣化版になるだけ。車輪の再発明と言う。
だいたい曲がりなりにも金を取ることもある製品なんだから作っているのはそれなりのプロだ、自分よりスキルがないわけがない。
431デフォルトの名無しさん:2007/01/17(水) 22:03:16
まぁ勉強のためにしてるんだからいいんじゃないの
432デフォルトの名無しさん:2007/01/17(水) 22:46:46
ATLとかVectorとかとてもプロが作ったものとは思えないのですが、単に
作者が自分の技術に心酔して一般には使いにくい塵を売りつけたおぞましい物にみえますが・・・・・
433428:2007/01/17(水) 23:14:41
>>429
何で用語の間違い指摘しただけでそんな認定受けなきゃならんのだ
質問するとき用語が間違っているとトラブルになりやすいからわざわざ指摘したんだが…
覚えたてなら用語を間違って覚えてる場合もあるだろ

あとオレはそんなにC++が得意なわけじゃないから

APIのラッパークラスも書いた事無いよ
書く予定も無い
まあ、使い捨てなものとか勉強目的のはあったと思うが、
少なくとも使い回せるようなのは一つも
今のオレが書けないような汎用性の高いライブラリが色んなサイトで公開されてるし
434デフォルトの名無しさん:2007/01/17(水) 23:26:44
>>432
それよりもっと使いにくいものなんて世の中ごまんとある。
ところで、ATLはATL::CHandleなんかの小物が便利だよ。
435デフォルトの名無しさん:2007/01/17(水) 23:30:55
>>410>>412-413
コピーコンストラクタがあるとも限らないから、>>411が良いんじゃないだろうか。
436デフォルトの名無しさん:2007/01/18(木) 04:40:26
>>435
>>411 でもコピーコンストラクタは必要なわけだが。
437デフォルトの名無しさん:2007/01/18(木) 18:01:19
なるほど。
コピーコンストラクタが無い場合には自前で placement new で初期化する必要アリか・・・
438デフォルトの名無しさん:2007/01/18(木) 20:37:54
std::uninitialized_fill_n(ADim, 100, 1234);
ならコピーコンストラクタは要らないんじゃね?
439デフォルトの名無しさん:2007/01/18(木) 21:23:21
>>438 うん。要らない。
440デフォルトの名無しさん:2007/01/20(土) 10:12:19
>>406には、そういう質問が出てくる段階においては、
C++ではデフォルトコンストラクタが無いクラスの配列は
基本的には無理とするのがベター。
441デフォルトの名無しさん:2007/01/20(土) 16:05:24
VC7.1(VisualStudio.NET2003)でコンソールアプリを作成しています。
独自拡張の出力ストリームを以下のように作成しました。(一部省略)


// 拡張ストリームバッファ
class streambuf2
: public std::basic_streambuf< wchar_t, std::char_traits< wchar_t > >
{
public:
// 必要最低限の仮想関数をオーバーライド
}

// 拡張ostream
class ostream2
: public std::basic_ostream< wchar_t, std::char_traits< wchar_t, > >
{
private:
  streambuf2 m_sb2;
public:
  ostream2()
    : std::basic_ostream< wchar_t, std::char_traits< wchar_t, > >( &m_sb2 )
  {
  }
// 特にオーバーライド無し
}


つづく
442441:2007/01/20(土) 16:11:48
上記 >>441 のように作成したストリームを用いて
以下のように文字列を出力すると、入力文字列のポインタがうまく判別されず(?)、
文字列のoperatorとは違う関数がよばれ、文字列のアドレスが数字で表示されてしまいます。

ostream2 cout2;
cout2 << L"TestString";

出力結果:00,524,1F0

どうしてこのような現象になってしまうのでしょうか?
原因がわからず困っています。



なお、以下のように二回同じ文字列を出力した場合、二回目は正しく文字列として出力されます。
ostream2 cout2;
cout2 << L"TestString";
cout2 << L"TestString";
出力結果:00,524,1F0 TestString

また、初回をbasic_stringでわたしてやった場合は以後普通に動作するようです。
ostream2 cout2;
cout2 << basic_string< wchar_t >("TestString");
cout2 << L"TestString";
出力結果:TestString TestString


同じ値をそのまま二回渡して呼ばれるoperator関数が、変わる事ってありえるのでしょうか???
443デフォルトの名無しさん:2007/01/20(土) 19:38:14
とりあえず/Zc:wchar_tをつけたらどうか?
プロジェクトのプロパティ→C/C++→言語→wchar_tをビルトイン型として扱う
444441:2007/01/21(日) 02:24:08
>>443さんに指摘してもらったオプションをON/OFF
切り替えても変化がありませんでした。

なお、同一ソースをlinuxに持っていって実行した所、
上記の問題は発生しませんでした。


もしかしたらVS2003のバグなんだろうか・・・一応SPは当ててあるのですがorz
別の場所でなにかしらのメモリを上書きしてしまっている可能性とかもありえるのかな・・・
445デフォルトの名無しさん:2007/01/21(日) 09:35:52
とりあえずデバッグでステップインしたらどうか?
446デフォルトの名無しさん:2007/01/24(水) 19:28:50
VC++の例のロケール絡みのバグ?
447デフォルトの名無しさん:2007/01/25(木) 15:04:17
std::stringはコピーオンライトだとずっと思ってました・・・
少なくとも私の使ってるGCCでは違いました。ショック!
448デフォルトの名無しさん:2007/01/25(木) 15:57:35
copy on write は参照を数えておかなきゃならないから、
マルチスレッド/マルチコア/SMPで効率が悪くなることもあって
ずいぶん前に流行らなくなったような記憶がある。
449デフォルトの名無しさん:2007/01/28(日) 23:11:05
>>442>>414のコードは全然書き方違うけど同じC++なんですよね?
よく分かりません
450デフォルトの名無しさん:2007/01/28(日) 23:44:06
そのうちわかるさ
451デフォルトの名無しさん:2007/01/29(月) 18:23:14
C言語なら俺に聞け(入門篇) Part 6
http://pc10.2ch.net/test/read.cgi/tech/1167325490/

上のスレが埋まったけど、次はここ使うのか?
452デフォルトの名無しさん:2007/01/29(月) 18:23:56
って、ここ、C++ のスレだった。
新スレキボンヌ。
453デフォルトの名無しさん:2007/01/29(月) 23:42:31
>>452
C言語なら俺に聞け(入門篇) Part 7
http://pc10.2ch.net/test/read.cgi/tech/1170064980/
454デフォルトの名無しさん:2007/01/30(火) 01:25:05
>>453
Thanks
455デフォルトの名無しさん:2007/02/15(木) 09:58:57
std::iostream から >> で std::string として
文字列を取り出すってことができないのは悲しい。
456デフォルトの名無しさん:2007/02/15(木) 10:16:58
いろいろと誤解しているとしか思えない
457デフォルトの名無しさん:2007/02/15(木) 19:47:14
勘違いしてました。
#include <string>
じゃなくて #include "string.h"
としていたために、
以前自分が作ったクソ文字列クラスを使ってました。
もちろん >> 演算子なんて定義してませんでした。
テヘッ
458デフォルトの名無しさん:2007/02/16(金) 19:48:23
>>457
namespace 使おうぜ
459デフォルトの名無しさん:2007/02/16(金) 20:23:26
ぜんぶ orz:: 名前空間に入れよう。
そうしよう。
460デフォルトの名無しさん:2007/02/23(金) 18:50:22
C++って、変数cに1足してるんですか?
461デフォルトの名無しさん:2007/02/23(金) 19:14:56
いいえ。
462デフォルトの名無しさん:2007/02/23(金) 19:56:59
変数Cでしょ
463デフォルトの名無しさん:2007/02/23(金) 20:54:27
その理論でいくとC#の#って何の演算なんだ?
464デフォルトの名無しさん:2007/02/23(金) 21:51:41
文字列連結だ
CにJavaとかDelphiとかSQLとかくっつける
465デフォルトの名無しさん:2007/02/25(日) 00:13:32
>>460
Cの拡張版という意味で++、つまりワンステップ上の、ということでは
466デフォルトの名無しさん:2007/02/25(日) 20:54:53
>463
C++++の+4つをくっつけて#じゃないっけ?
467デフォルトの名無しさん:2007/02/25(日) 21:07:09
C♯なんだから、半音上がっているんだよ。
もう半音上がったら当然Dだな。
468デフォルトの名無しさん:2007/02/25(日) 21:47:08
# って♯(シャープ)じゃなくて#(ナンバー)だよね。
シーシャープじゃなくて、シーナンバーとするべきだ。
469デフォルトの名無しさん:2007/02/25(日) 23:06:08
シャープ記号をASCIIに入れなかった昔の偉い人に文句言え。
470デフォルトの名無しさん:2007/02/26(月) 00:03:33
C#の#はprotectedのことかと思ってた。
471デフォルトの名無しさん:2007/02/26(月) 00:59:19
C# ←犬と木
472デフォルトの名無しさん:2007/02/26(月) 01:02:16
次でぼけてっ!
473デフォルトの名無しさん:2007/02/26(月) 23:17:05
>>472
(プロデューサーの声)
それだと>>471以前がまともな事言ってたみたいになるけどいいのか?
474デフォルトの名無しさん:2007/02/27(火) 23:19:40
倍精度型は変数名に#を後付する、ってならったよ。
475デフォルトの名無しさん:2007/02/28(水) 03:33:04
そうそう、単精度は!で文字列は$、整数型にも%を忘れないようにね。
476デフォルトの名無しさん:2007/03/01(木) 00:24:35
base class を作るメリットって何ですか?
デメリットはありますか?
477デフォルトの名無しさん:2007/03/01(木) 00:35:10
>>476
俺は作ることないな。
478デフォルトの名無しさん:2007/03/01(木) 08:53:08
               . __ ______
.             /日 「  日\_\
∴∵∴          |. │/ \ ┃ .|モツニ| おいらをどこかのスレに送って!
    ∵∴ ______\.ハ,,ハ.|_/__/  お別れの時にはお土産を.持たせてね!
       ()__|_日 ('(゚∀゚∩(@)目〓〓」_┐
    ∴∵    \_====―― ̄   \__┐
∵∵∴          <_<_| └― __┐
'              .</</√

現在の.所持品:
479デフォルトの名無しさん:2007/03/01(木) 15:06:53
>>476
C++で基底クラスを作らないとなると
C++の機能の半分も使っていないということになるな

メリットとかデメリットとかいう以前の問題
480デフォルトの名無しさん:2007/03/01(木) 16:54:30
必要なら作る、不要なら作らない。
必要・不要は基本的に設計時の問題。

>>476
メリット
ベースクラスで共通の動作を提供できる。
継承関係によるポリモーフィズムができる。

デメリット
基底クラスと派生クラスの間に比較的密な関係が生まれやすい。
ときに基底クラスの存在が邪魔に感じることがある。
481デフォルトの名無しさん:2007/03/01(木) 17:55:03
system,execの違いは何ですか
482デフォルトの名無しさん:2007/03/01(木) 18:44:34
system : 標準関数
exec : 非標準関数
483デフォルトの名無しさん:2007/03/01(木) 19:07:27
?
484デフォルトの名無しさん:2007/03/01(木) 19:57:25
>>481
systemはShellを経由して外部のプログラムを起動する。
spawnは直接外部のプログラムを起動する。
execは自プロセス内に外部のプログラムをロードし実行する。ただしWindowsではspawnと同じ動作になる。

execやspawnは本来unixのapiであり、Cの標準関数ではない。
485デフォルトの名無しさん:2007/03/15(木) 12:38:35
stlのvectorって配列として使っても大丈夫でしょうか?
vectorは配列のindexが隣同士でも
データ自体は隣同士に並んでないって可能性も考えた方がいい?
begin()で配列の先頭を取って配列として使いたいんですが。
環境はVC.net2003です。
486デフォルトの名無しさん:2007/03/15(木) 12:53:25
>>485
>データ自体は隣同士に並んでないって可能性も考えた方がいい?
もしそんな変態処理系があったら、それは「標準に準拠している」とは
呼べない。でも
>begin()で配列の先頭を取って配列として使いたいんですが。
それはまた話が別。
vector のイテレータは大抵ポインタなんで結果的に大丈夫だろうけど
先頭アドレスはできれば &hoge[0] で取るよろし。
487デフォルトの名無しさん:2007/03/15(木) 14:06:40
>>485
勿論、push_back()などの操作をした後はポインタ取り直さないとダメよ。
488デフォルトの名無しさん:2007/03/15(木) 17:41:04
&*vectorhoge.begin():
489デフォルトの名無しさん:2007/03/15(木) 17:45:34
&hoge.front();
490デフォルトの名無しさん:2007/03/15(木) 17:59:18
>>485
配列の数が完全に固定されているときは配列
可変長になる可能性があるときは、迷わずvectorを使いましょう
491デフォルトの名無しさん:2007/03/15(木) 19:21:38
>>486-490
レスありがとん。
ロベールさんとこに
>実はvector が純粋な配列であるという保証はありません。
>vector の性質上それで問題ないように見えますが、それは仕様として定められていないのです。
>例えば、サイズが大きくなるとあるサイズで分断してメモリを確保するようになっていたとしても、
>誰も文句は言えないのです。
なんて書いてあるからstringあたりを使おうかと迷ってたんです。
char_traitsとか意味不明ですし
可変長配列はvector使う事にします。
492デフォルトの名無しさん:2007/03/15(木) 19:28:42
確かに規格では当初vecotrが配列代わりとして使えるようにする規定がなかったのだが、
後から&v[0] + n == &v[n]が保障される記述が追加され、
なおかつ実際問題それ以前からそうなっている実装ばかりだったし、
vectorを動的な可変長配列として使うのは全く問題ない。
493デフォルトの名無しさん:2007/03/15(木) 19:32:17
おめーらそろいもそれってvector<bool>の事を無視ししやがって。
...と思ったもののvector<bool>なんて異物はどうでもいいか。

494デフォルトの名無しさん:2007/03/15(木) 20:15:57
そろいもそれって
495デフォルトの名無しさん:2007/03/15(木) 20:18:40
舌噛んだのか
496デフォルトの名無しさん:2007/03/15(木) 21:54:07
>>491
stringに関しても>>492と同じようなことが起っているので
contiguous memoryとして使って良いよ。と委員会の偉いひとが言ってた
497デフォルトの名無しさん:2007/03/15(木) 23:03:49
98年以前にC++の公式仕様ってあったっけ?
禿本とARMが仕様ってこと?
498デフォルトの名無しさん:2007/03/16(金) 00:20:35
強いて言うならドラフトも参考にされていたとは思う
499デフォルトの名無しさん:2007/03/16(金) 13:24:18
>>496
>stringに関しても>>492と同じようなことが起っているので
>contiguous memoryとして使って良いよ。と委員会の偉いひとが言ってた
kwsk
500デフォルトの名無しさん:2007/03/16(金) 16:30:29
501デフォルトの名無しさん:2007/03/21(水) 20:38:28
親クラスのprivateなメンバー関数は子クラスでも継承して使用できますが
孫クラスからは継承して使用できないのでしょうか?
502デフォルトの名無しさん:2007/03/21(水) 20:51:19
>>501
private は子クラスでも使えないよ。
503デフォルトの名無しさん:2007/03/21(水) 22:07:38
>>502
ごめんなさい
protectedでした、子クラスも孫クラスからでも使えました。
504デフォルトの名無しさん:2007/03/23(金) 06:38:47
class A
{
public:
static A* create()
{
return new A;
}
};
// B-Yまで省略
class Z :public Y
{

};
int _tmain(int argc, _TCHAR* argv[])
{
A*a = Z::create(); //ここでZのオブジェクトを返す様にしたい
return 0;
}
テンプレートとか実行時型情報か何かを使えば
createをオーバーライドせずにZのオブジェクトを返すようなことはですか?
505デフォルトの名無しさん:2007/03/23(金) 08:12:08
>>504
日本語でおk
506デフォルトの名無しさん:2007/03/23(金) 13:08:57
自分自身をメンバに持つクラスなんて作れるんすか?
そんな事したら無限再帰して再起不能になっちゃうんじゃないすか?
507デフォルトの名無しさん:2007/03/23(金) 13:09:18
はあ?
508506:2007/03/23(金) 13:15:44
勘違いしてました
そのまま打ち込んで中身に適当なテストコードしこんでコンパイルしたらちゃんと動いちゃいました
すいません
509デフォルトの名無しさん:2007/03/24(土) 04:54:43
>>506はやればできる子
ちょっとだけアレなだけで
510デフォルトの名無しさん:2007/03/25(日) 16:52:24
基底クラスCFoo
派生クラスclass CHoge : public CFoo
派生クラスCHogeから派生したclass CVar : CHoge

この様な関係がある時、CVarクラスから基底クラスCFooのprotectedなメンバ関数への継承関係は成り立たないのでしょうか?

class CFoo
{
protected:
  void  SetFlg(bool flg = true){m_flg = flg;};

private:
  bool  m_flg;
省略

class CHoge : public CFoo
{
省略

class CVar : public CHoge
{
このクラス内でSetFlg()関数を使いたいのですが・・・
511デフォルトの名無しさん:2007/03/25(日) 17:10:44
>>510
> このクラス内でSetFlg()関数を使いたいのですが・・・
で、どうなったの?
512デフォルトの名無しさん:2007/03/25(日) 17:28:31
>>510です説明不足すみません
CHogeクラスにて、SetFlg()関数を使う場合

CHogeのヘッダーファイル
#include "CFoo.h"

class CHoge : public CFoo
{


この様に書くことでHoge.cppの実装として
void CHoge::Set()
{
  bool flg = true;
  CFoo::SetFlg(flg);//←この様に派生元を書かなくても、
  SetFlg(flg);//この様に継承して使えるのですが
}

これと同じようにChogeクラスの孫クラスCVarの実装で同じようには使えないのでしょうか?
513デフォルトの名無しさん:2007/03/25(日) 17:46:43
>>512

実行していないがコンパイルは出来たぞ。

class CFoo
{
protected:
void SetFlg(bool flg = true){m_flg = flg;};
private:
bool m_flg;
};

class CHoge : public CFoo
{
};

class CVar : public CHoge
{
public:
void func()
{
bool flg = true;
//CFoo::SetFlg(flg);
SetFlg(flg);
}
};
514デフォルトの名無しさん:2007/03/25(日) 18:00:19
>>512です
>>513サンクスです
ですよね、出来ますよね普通なんで漏れは出来ないのだろう??

515デフォルトの名無しさん:2007/03/25(日) 18:16:28
坊やだからさ。
516デフォルトの名無しさん:2007/03/25(日) 18:17:11
>>514
だからどうなったのさ?
コンパイルエラーから理由がわからないのかってことだよ。
517デフォルトの名無しさん:2007/03/26(月) 17:08:22
すごい初歩なんですけど
void SetStr(LPSTR str , LPSTR readStr ,
int i , int *txtLen)
{
  str = (LPSTR)malloc(*txtLen+1);
  strncpy(str ,
   readStr + i - *txtLen,
   *txtLen);
  str[*txtLen] = '\0';
  return;
}
strに渡した内容を改竄して、再び戻ってもstrを使用したいのですが
メモリ確保のポインタが悪いのか上手くいきません。どうすればできますか?
お願いします。
518デフォルトの名無しさん:2007/03/26(月) 17:27:29
void にするくらいなら、str のポインタ返せばいいのに。

それがどうしてもできないのなら、引数をLPSTR* str にして
関数の中のstr を *str に。
呼び出し元のstr を &strにすればいいかも。
519デフォルトの名無しさん:2007/03/26(月) 17:28:19
ってここC++じゃないのか
520デフォルトの名無しさん:2007/03/26(月) 17:31:25
>>517
戻して欲しいものへのポインタを渡して、そこに戻して欲しいものを入れてもらうワケよ。
intを戻して欲しいなら、intへのポインタを渡してそこにintの値を入れてもらう。

あなたの場合は、SetStr()でmalloc()したアドレスを戻したいのだよね?
ならばLPSTRへのポインタを渡すのだ。
521517:2007/03/26(月) 17:44:24
>>518-520
解決しました。ポインタは難しいです。
戻り値を利用します。
522デフォルトの名無しさん:2007/03/26(月) 22:04:38
つーかstd::string使えて
523デフォルトの名無しさん:2007/03/28(水) 04:29:16
世界一わかりやすいCプログラミングの授業 (単行本)
Lepton (著)

この本はお薦めでしょうか?
524デフォルトの名無しさん:2007/03/28(水) 05:47:13
>>523
図書スレいけ
525デフォルトの名無しさん:2007/03/28(水) 10:17:28
自分がnewで作られたオブジェクトかどうかを自分で知る方法無いですか?
526デフォルトの名無しさん:2007/03/28(水) 10:36:24
new をオーバーライドしてフラグ入れとけば
527デフォルトの名無しさん:2007/03/28(水) 11:11:56
つ More Effective C++
528デフォルトの名無しさん:2007/03/28(水) 19:53:30
newは「オーバーロード」するもんじゃね?
529デフォルトの名無しさん:2007/03/28(水) 20:41:53
たしかにoperator newやoperator new[]を関数として定義できるが、
526の用途に使えるかというと微妙かもしれない。
規格上処理系依存や未定義の動作になるかどうかすれすれだと思う。
530デフォルトの名無しさん:2007/03/28(水) 21:20:22
自分がヒープにいるかどうか調べるだけじゃだめなの??
531デフォルトの名無しさん:2007/03/28(水) 23:30:41
>>529
何故未定義の動作になるか説明希望
532デフォルトの名無しさん:2007/03/29(木) 00:11:12
そもそも、何でそんな事をしたいのかが気になるなあ。
533デフォルトの名無しさん:2007/03/29(木) 00:49:41
>>528
オーバーロードもできるが、グローバルなやつを再定義することで
仮想関数のオーバーライドと同様に処理を置き換えられる。
534529:2007/03/29(木) 01:09:33
>>531
そんな気がすると思っただけ、特に何か考えたわけではない。
535デフォルトの名無しさん:2007/03/29(木) 01:51:42
>>534
>規格上処理系依存や未定義の動作になるかどうかすれすれだと思う。
「そんな気がする」と思っただけでこんな発言するな。
536デフォルトの名無しさん:2007/03/29(木) 01:57:44
クラスにoperator newを定義して、確保したメモリ領域をすべて覚えておく、とか思ったが、
std::vectorに直接格納されたらどうしよう。
537デフォルトの名無しさん:2007/03/29(木) 02:28:13
vectorの領域再確保が起きたときに
ポインタが無効になってしまう可能性があるという話か。
538デフォルトの名無しさん:2007/03/29(木) 12:48:44
vector使うのは危険
539デフォルトの名無しさん:2007/03/29(木) 13:44:35
なぜだ、理由を書け
540デフォルトの名無しさん:2007/03/29(木) 15:10:16
すみません。
オライリーのAI入門始めようと思うんですが、
本家からダウソできるAIDemo2-2見たんですが難しいです。
関数群の解説だけでもお願いします。
541540:2007/03/29(木) 15:14:00
だけってのはおかしいか。失礼しました。
542デフォルトの名無しさん:2007/04/28(土) 14:15:27
教えてください。delete NULLは無害ですか?
例えば
char *p = new char;
if (p != NULL) {
delete p;
}
としなくても
char *p = new char;
delete p;
で安全ですか?
543デフォルトの名無しさん:2007/04/28(土) 14:23:53
安全です
544デフォルトの名無しさん:2007/04/28(土) 14:31:22
どの道、newに失敗してもpにはNULLは入りませんし。
545デフォルトの名無しさん:2007/04/28(土) 14:35:04
>>543
ということは、世の中にあふれている
if (p != NULL) delete p;
のif文は無駄ということですか?
546デフォルトの名無しさん:2007/04/28(土) 14:35:24
>>544
MSですら>>542のようなコードを書いてて困る
547デフォルトの名無しさん:2007/04/28(土) 14:51:31
古いC++は p != NULL
548デフォルトの名無しさん:2007/04/28(土) 14:55:56
VC++ 6.0は新しいC++でしょうか?
549デフォルトの名無しさん:2007/04/28(土) 14:59:54
>>548
古いな。たしかデフォルトだと new からヌルが返ってきたはず。
550デフォルトの名無しさん:2007/04/28(土) 15:02:01
ちょっと分からなくなってきました。
delete NULL;
が安全かどうかはC++が新しい古いで変わるのでしょうか?
551デフォルトの名無しさん:2007/04/28(土) 15:06:25
>>550
ISO の国際規格に準拠した C++ コンパイラなら安全。
VC++ 6.0 は準拠していない部分が多い。
552デフォルトの名無しさん:2007/04/28(土) 15:08:44
あ、 ISO の規格に対応する日本語訳の JIS 規格でもいいよ。
553デフォルトの名無しさん:2007/04/28(土) 15:21:22
VC++ 6.0 の delete のインプリメントは free なので
delete NULL は桶。
554デフォルトの名無しさん:2007/04/28(土) 15:36:43
>日本語訳の JIS 規格

http://www.jisc.go.jp/app/JPS/JPSO0020.html
1. ここの【JIS規格番号からJISを検索】で X3014 って入力して 一覧表示 をクリッコ。
2. JISX3014 のリンクをクリッコ。
3. 規格の閲覧のリンクをクリッコ。
4. (゚∀゚)ウマー
5. ・・・あれ? テキスト検索ができないよ? (´Д`;)
555デフォルトの名無しさん:2007/04/28(土) 15:38:32
>>553
いや、デストラクタ呼ぶだろ。
556デフォルトの名無しさん:2007/04/28(土) 15:53:44
>>550
誰か安全じゃないなんて書いたか?
NULLを返すロートル仕様のnewでない限り、NULLにならないんだから問題ないだろ。
557デフォルトの名無しさん:2007/04/28(土) 15:55:31
>>556
new がヌルを返さなくても、 new の結果を保持していた変数に
ヌルが代入されることはあるだろう。たぶんそのことじゃないかな?
558デフォルトの名無しさん:2007/04/28(土) 22:34:29
free nullで死ぬ古のコンパイラの表を見た記憶があるが
VC++は含まれなかったと思われ。
ちなみにVC++でnewが失敗するとか考えるだけ無駄だ
失敗するときはOSが死んでいる
559デフォルトの名無しさん:2007/04/28(土) 22:37:46
>ちなみにVC++でnewが失敗するとか考えるだけ無駄だ
>失敗するときはOSが死んでいる
にゅ、newをオーバーロードしてるかも知れないじゃないかッ
560デフォルトの名無しさん:2007/04/28(土) 22:38:46
newの例外拾う実験なんてやるだけ無駄ってことなんですね・・・
一度やってみましたがメモリ使用量が1.5Gとか行ってばからしくなってやめたのを思い出した
561デフォルトの名無しさん:2007/04/28(土) 22:51:36
OSが死にますか、そうですか。
562デフォルトの名無しさん:2007/04/28(土) 23:02:20
>>558
そうだな。お前みたいな奴が書いたプログラムがそこらじゅうで動いてるだろうからな。
563デフォルトの名無しさん:2007/04/28(土) 23:41:50
>>542
まったくもって安全。

ただ、本筋とは関係ないけどnewは失敗時にNULLを返すんじゃなくて、
例外を投げる。
だから上下のコード両方ともNULLをdeleteする呼び出し経路は存在しない。
564デフォルトの名無しさん:2007/04/29(日) 00:04:16
>>563
纏め乙。
565デフォルトの名無しさん:2007/04/29(日) 00:51:59
bad_alloc例外か
566デフォルトの名無しさん:2007/05/03(木) 02:30:47


000 ・・・ 00A ・・・ Z00 ・・・ ZZZ

のように、数字と文字の混じったものを作成したのですが、
どうすればよいかわかりません。

よろしくお願い致します。

環境:Visual C++ EE

567デフォルトの名無しさん:2007/05/03(木) 02:55:21
>>566
#include <stdio.h>
int main() {
  const char tc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  char buf[4];
  for (int i=0; i< (sizeof tc - 1); i++)
    for (int j=0; j< (sizeof tc - 1); j++)
      for (int k=0; k< (sizeof tc - 1) ; k++) {
        buf[0] = tc[i]; buf[1] = tc[j]; buf[2] = tc[k]; buf[3] = 0;
        puts(buf);
      }
  return 0;
}
568デフォルトの名無しさん:2007/05/03(木) 03:20:50
他意はないが、ちょっと改変してみた。
#include <stdio.h>
int main() {
const char tc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char buf[4] = { 0, };
for (const char *i=tc; 0 != (buf[0] = *i); ++i)
for (const char *j=tc; 0 != (buf[1] = *j); ++j)
for (const char *k=tc; 0 != (buf[2] = *k); ++k)
puts(buf);
return 0;
}
569デフォルトの名無しさん:2007/05/03(木) 03:38:57
普通は再帰にするだろ。

#include <iostream>
#include <string>
using namespace std;

void order(int n, string& buf) {
  static const char Letters[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

  if(n == 0) {
    cout << buf << endl;
  } else {
    for(int i = 0; Letters[i] != '\0'; ++i) {
      buf += Letters[i];
      order(n - 1, buf);
      buf.resize(buf.size() - 1);
    }
  }
}

int main() {
  string buf;
  order(3, buf);
}
570デフォルトの名無しさん:2007/05/03(木) 04:00:56
// さらに改変。ところでこんな風にauto_ptr使うのって駄目なんでしょうか?
#include <vector>
#include <string>
#include <memory>
#include <iostream>
#include <fstream>

std::auto_ptr< std::vector<std::string> >
make_seq() {
const char tc[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
std::auto_ptr< std::vector<std::string> > ret(new std::vector<std::string>);
char buf[4] = { 0, };
for (const char *i=tc; 0 != (buf[0] = *i); ++i)
for (const char *j=tc; 0 != (buf[1] = *j); ++j)
for (const char *k=tc; 0 != (buf[2] = *k); ++k)
ret->push_back(buf);
return ret;
}

std::ostream& dump(std::ostream& out, std::vector<std::string>& strs) {
typedef std::vector<std::string>::size_type strs_type;
for (strs_type i = 0, end = strs.size(); i < end; ++i)
out << strs[i] << std::endl;
return out;
}

int main() {
std::ofstream fout("out.txt");
dump(fout, *make_seq());
return 0;
}
571デフォルトの名無しさん:2007/05/03(木) 04:08:02
>>570
std::auto_ptr なんか使わずに make_seq 関数を std::vector<std::string> を
継承したクラスにでっちあげてしまえばいんじゃない?
572デフォルトの名無しさん:2007/05/03(木) 04:09:44
ソースの自動生成って簡単なんですか?
classの構造としては悪い例なんで恐縮なのですが
例えばC++で、hoge.hに
class hoge {
int m_i;
public
int get_i();
};
みたいなのがあるとき、それに対応するhoge.cppで自動的に、
int hoge::get_i() {
return m_i;
}
のような定義を生成するようなやつです
573デフォルトの名無しさん:2007/05/03(木) 04:15:20
>>572
その例だとインライン関数にした方がいいと思うから、

#define PROPERTY_GET(type, name) private: type m_##name; public: type get_##name() { return m_##name; }

とかいうマクロを作ったのでいいと思うけど、
このソースを見て他の人がどう思うかは知らん。
574デフォルトの名無しさん:2007/05/03(木) 04:21:14
思い切って各処理系で独自拡張されているプロパティの機能使うのもありだとは思うけど。
575デフォルトの名無しさん:2007/05/03(木) 04:23:51
>>572
真面目にやるとかなり大変だとは思うけど、自分の目的が果たせるだけの
手抜きなものであれば比較的楽にできると思う。でも、下手にそんなもの
作るよりはマクロでお茶を濁したほうが正解だと思うぞ。
576デフォルトの名無しさん:2007/05/03(木) 04:35:17
やっぱ大変なんすね…
なんか{と}の対応をとったり空白行読み飛ばしたり
宣言の行の構文解析をしたりと大変だとは思いましたが…
素直に他の方法を検討するか、腰据えてコンパイラ、リンカの分野まで勉強するかしかないようですね
今回はVCの__declspec(property())使うことにします
ありがとうございました
577デフォルトの名無しさん:2007/05/03(木) 04:40:47
本当に適当でいいなら
構文解析とか必要ないんじゃないかな。
class hoge { を探して、
}; が見つかるまでの間に、
*** get_+++(); ってだけ書いてある行が見つかったら、
hoge.cpp に *** hoge::get_+++() { return m_+++; } を追加、とか。
578デフォルトの名無しさん:2007/05/03(木) 18:58:12
コンストラクでファイルオープン処理入れたら、同僚に普通そんなことはしない
と言われたんだけど、やっぱり駄目なの?
579デフォルトの名無しさん:2007/05/03(木) 18:59:44
・エラー処理が難しい。
・グローバルなオブジェクトにされた場合、プログラム開始から終了までファイルが開きっぱなしになる。
580デフォルトの名無しさん:2007/05/03(木) 19:02:03
・メンバ変数にすると、それを所有してるクラスを作る時に
 ファイルが開かれてしまう。

これがいいか悪いかは状況次第ではあるかもしれないけども。
581デフォルトの名無しさん:2007/05/03(木) 20:06:19
普通ファイルを開かないコンスタラクタつけるだろ
582デフォルトの名無しさん:2007/05/03(木) 20:25:53
>>578
「普通」とかいういいかげんな理由でプログラミングしないこと。
ほんとうに駄目だとしたら書き換えるのはわりと面倒になるだろうから、
何が困るのか具体的に聞いてみるといい。

> ・エラー処理が難しい。

例外投げればいい。

> ・グローバルなオブジェクトにされた場合
> ・メンバ変数にすると

完全に使う側の問題だろう。都合が悪いならポインタにすればいいし。
583デフォルトの名無しさん:2007/05/03(木) 20:46:41
コンストラクタの例外って色々と面倒臭いんだぜ。
584デフォルトの名無しさん:2007/05/03(木) 20:48:30
>>583
「色々」って、また胡散臭いことを言う。具体的に頼む。
585デフォルトの名無しさん:2007/05/03(木) 20:55:48
RAIIの原則に従えばコンストラクタでファイル開くのはぜんぜんおかしくない

コンストラクタ内の例外安全はスマートポインタで確保
586デフォルトの名無しさん:2007/05/03(木) 20:56:26
587デフォルトの名無しさん:2007/05/03(木) 21:04:13
>>586
それは書いた奴が C++ のオブジェクトモデルを正しく理解していないだけ。
コンストラクタが完了したオブジェクトについては必ずデストラクタが呼ばれる。

「他のメンバのスキルが怪しそうな場合は〜」ってのがオマエモナーって感じ。
588デフォルトの名無しさん:2007/05/03(木) 21:06:38
>>586
そこで書いてるのって、
コンストラクタで例外飛んだらデストラクタ起動しないよ。
としか書いてないような気がする。
正直、そんなあたりまえの事で使うなっていわれてもなぁ

ついでにそのすぐ下ではデストラクタでの例外に付いて、
的外れな問題点を書いてるし。
本質的な問題はそこじゃねー

件の文章を読んでると、
例外安全性についての基本的知識が欠如してるっぽいから
参考にするのは無理があるな。
589デフォルトの名無しさん:2007/05/03(木) 21:19:19
結局はRAIIが徹底出来ていないだけだな。
590デフォルトの名無しさん:2007/05/03(木) 21:37:05
これいじって、A のデストラクタを呼ぶ方法はある?

#include <iostream>
using namespace std;

class A {
public:
  A() { cout << "A" << endl; }
  ~A() { cout << "~A" << endl; }
};

class E {
public:
  E() { throw exception(); }
};

class B {
  A a;
  E e;
};

int main() {
  B b;
}
591デフォルトの名無しさん:2007/05/03(木) 21:38:46
>>590
いじらなくても呼ばれるだろ。
592デフォルトの名無しさん:2007/05/03(木) 21:39:47
呼ばれんぞ
593デフォルトの名無しさん:2007/05/03(木) 21:45:21
>>592
呼ばれたけど・・・。
594デフォルトの名無しさん:2007/05/03(木) 21:46:29
g++ 4.0.1 で -ansi -pedantic 付きでコンパイルしたが、
全く呼ばれないぞ。
595デフォルトの名無しさん:2007/05/03(木) 21:51:19
ほんとだ。 g++ 3.4.4 @Cygwin でも ~A が出ない。

↓こうしたら出た。
- B b;
+ try { B b; } catch(...) { }
596デフォルトの名無しさん:2007/05/03(木) 21:51:40
>>591
例外が一切ハンドリングされない場合はデストラクタを呼ぶかは未定義。
例えばg++とかはデストラクタ呼ばずにabortする。
>>590
main関数を
try{B b;}catch(...){}で囲めばデストラクタが呼ばれる.
597デフォルトの名無しさん:2007/05/03(木) 21:53:14
>>596
なるほど。そこだったか。
598デフォルトの名無しさん:2007/05/03(木) 21:59:09
調べてみたのでメモっておく。
15.3 "Handling an exception"
p9
"If no matching handler is found in a program, the function terminate() is called;
whether or not the stack is unwound before this call to terminate() is implementation-defined."
599デフォルトの名無しさん:2007/05/03(木) 22:53:49
>>586
これ2chたまに見るな
出される度にボコボコにされてるけどw
600デフォルトの名無しさん:2007/05/03(木) 22:59:32
C言語版は良いと思うけどね
601デフォルトの名無しさん:2007/05/04(金) 02:44:15
もう1つ質問!
Cで関数を分割していく過程で、キーになる値などは引数で渡したりするのが一般的だと思いますが
C++だとキー項目をクラスのメンバにして、引数で渡さずに直接メンバ変数として参照するケースが多いみたいですが
これって、複数の関数内部で共通的に使うものならば、なんでもメンバ変数にしとけばいいってことですか?
今までCしか開発したことがなかったので、どうクラスを作っていいか悩んでばかりです。
602デフォルトの名無しさん:2007/05/04(金) 02:49:11
>>601
「なんでも」ってことはない。共通で使う値になんらかの制約があったり、
自然にオブジェクトが見出せたりするときはクラスが適任。
603デフォルトの名無しさん:2007/05/04(金) 02:52:01
>>601
OOもどきがやりたいなら、お願いだからOOの勉強してからにしてください。
604デフォルトの名無しさん:2007/05/04(金) 03:11:00
今まで普通にCを使いこなせていた人なら
構造体の使い方はよくわかっているはずだし
それを拡張したclassの基本的な使い方がわからないはずは無いのだが。
605デフォルトの名無しさん:2007/05/04(金) 03:14:57
class が構造体の拡張とか笑えるぞ。
カプセル化だけじゃなく、ポリモーフィズムも class の根幹であり、
これは C では(不可能ではないが)なじみの薄いところだ。
606デフォルトの名無しさん:2007/05/04(金) 03:38:59
んな事誰でも知ってるって。
FILE*の中身(実装)を知らなくてもopen/read出来ることと
逆にいえばデバイスの種類がファイルの実体でなくても同じように読み書きできること
これをわかっている奴が
継承による多態が理解できないわけ無いっての。

その程度もわかってない奴が、偉そうなこと言うなよ。
607デフォルトの名無しさん:2007/05/04(金) 08:49:58
それは無理あるだろw
C だと普通それは分岐で実装するんだよ。
608デフォルトの名無しさん:2007/05/04(金) 17:21:03
言語仕様としてのサポートの有無があるかどうかの差だけだけど。

もしかして、デバイスドライバとかで
普通に関数ポインタがメンバに入ってるの知らないの?
609デフォルトの名無しさん:2007/05/04(金) 17:28:25
あと、プラグインとかモジュールとか言われるものも
関数ポインタのテーブルへのポインタ、
つまりC++におけるvptrを登録することによって動作を変える
そういうのも珍しくない。

もちろん、普通のコードで当たり前に使っているというわけじゃないけど
そういうものを理解できる人、つまりCを使いこなせてる人が
C++のクラスを理解できないなんて、ありえないんだよ。
610デフォルトの名無しさん:2007/05/04(金) 17:54:17
>>608
俺はデバドラも触る人間だから知ってるけど、
デバドラなんて普通の人は触らないぞw
611デフォルトの名無しさん:2007/05/04(金) 18:16:51
理解できはしても、構造体の単なる拡張というイメージではないと思うが。
612デフォルトの名無しさん:2007/05/04(金) 18:50:36
構造体とクラスの話題のようなので質問です
structをアクセス指定子がデフォルトでpublicであるclassって
認識で使っちゃっていいんでしょうか?
613デフォルトの名無しさん:2007/05/04(金) 19:00:49
人によるとしか。
614デフォルトの名無しさん:2007/05/04(金) 20:12:44
非OOP的に使うなら、俺は別にかまわないと思っている。
615デフォルトの名無しさん:2007/05/04(金) 20:25:46
テンプレートの述語クラスとか。
616デフォルトの名無しさん:2007/05/04(金) 20:42:52
C++ではポインタの宣言を
int* p;
と書くことが多いようですが、なんで
int *p;
こう書かないのでしょうか?
Cではこの書き方が一般的なのに。
617デフォルトの名無しさん:2007/05/04(金) 20:49:00
int *p; が一般的? C でも両方ともよく見るぜ。
まあ、C++ ではほとんどみないけど。

理由はワカランが、一行に複数の変数を宣言しないスタイルが広まったから、
わざわざ *p と書く必要性が薄くなったんじゃないかね?
int* p; の方が見やすいし。
618デフォルトの名無しさん:2007/05/04(金) 21:03:39
•禿が自著でint* p;のスタイルを使った。
•ポインタとは別に参照int& r;があり、int *pは「*pがint」と読めるというルールが全ての型に通用しなくなった。
619デフォルトの名無しさん:2007/05/04(金) 21:11:46
int* p, *q; と書くと馬鹿みたいだね。
620デフォルトの名無しさん:2007/05/04(金) 21:44:00
私はCでもC++でも int * p; と書きますが。
621デフォルトの名無しさん:2007/05/04(金) 21:52:34
622616:2007/05/04(金) 22:10:09
なるほど。
ありがとうございました。
623デフォルトの名無しさん:2007/05/14(月) 21:12:03
拡張子のhとhppは同じ意味?

h = hpp

624デフォルトの名無しさん:2007/05/14(月) 21:16:28
>>623
hppはC++のヘッダであることを明示するとかなんとか聞いた

C++の場合hでも事実上変わらないからhにしてる場合も多いが
Boostではhppで統一してたな
625デフォルトの名無しさん:2007/05/19(土) 15:30:24
何でだろう?
626デフォルトの名無しさん:2007/05/19(土) 16:05:39
何かツールの都合で
Cのヘッダと区別したいとか
627デフォルトの名無しさん:2007/05/19(土) 19:10:08
Cのソースでインクルードしないでねっ♥
628デフォルトの名無しさん:2007/05/21(月) 22:23:08
コンストラクタについて教えてください。

class test {
public:
test() {
std::cout << "コンストラクタ1" << std::endl;
}
test(int i) {
std::cout << "コンストラクタ2 : " << i << std::endl;
}
};

test t; // これは、「コンストラクタ1が呼び出される」
test t2(1); // これは、「コンストラクタ2が呼び出される」
test t3(); // 何も呼びだれない。

なぜ、t3()は何も呼び出さないのか教えてください。

環境:MinGW C++(3.4.2)
629デフォルトの名無しさん:2007/05/21(月) 22:26:39
test型のオブジェクトを返す関数の宣言だから。
630デフォルトの名無しさん:2007/05/21(月) 22:28:43
>>628
test t3(); は test型のオブジェクトを返す関数の宣言だから。
631デフォルトの名無しさん:2007/05/21(月) 22:31:54
何という結婚具合
632デフォルトの名無しさん:2007/05/21(月) 22:34:32
test()を読んでいるわけではないと。。。
オブジェクトを返すと。

すいません、意味がわかりません。
633デフォルトの名無しさん:2007/05/21(月) 22:45:29
int f( int i ); は判る?
test f( int i ); も判る?
test f( void ); は、どう?
test f(); になると?
みんな関数の宣言なわけよ。
634デフォルトの名無しさん:2007/05/21(月) 22:45:49
C++の仕様によれば、
変数の初期化と関数宣言のどちらにも解釈できるコードは、
関数宣言として解釈される。

これはCとの互換性を保つための仕様。
635デフォルトの名無しさん:2007/05/21(月) 22:50:58
構築済みのオブジェクトから自分のコンストラクタを明示的に呼ぶような処理ってまずいですか?
636デフォルトの名無しさん:2007/05/21(月) 22:54:21
なんとも気持ちの悪い仕様ですね。

有難う御座いました。
637デフォルトの名無しさん:2007/05/21(月) 23:02:32
>>636
気持ち悪いのはお前だろ…
638デフォルトの名無しさん:2007/05/21(月) 23:21:15
>>637

いや、2chに来ているやつ全員
639デフォルトの名無しさん:2007/05/21(月) 23:26:17
そんな貴方に
http://chiebukuro.yahoo.co.jp/
優しく答えてあげるわよ
640デフォルトの名無しさん:2007/05/21(月) 23:50:53
>>635
生成済みのインスタンスを対象にするなら、
先にデストラクタを呼んでおかないとまずいだろう。
641デフォルトの名無しさん:2007/05/21(月) 23:52:04
よくわからんがplacement newの事を言ってるんだろうか
642デフォルトの名無しさん:2007/05/21(月) 23:57:22
コンストラクタを呼んでるつもりで、実は自分のクラスの
テンポラリオブジェクトを生成しているだけだったりする
ってのがよくあるオチ。
643デフォルトの名無しさん:2007/05/22(火) 00:34:38
>>637
そういうことをいうお前が一番きもい
644デフォルトの名無しさん:2007/05/22(火) 01:49:49
VisualC++2005やってるんですが、一つのプロジェクトの中にソースがたくさんある(入門書のサンプルを順番に練習中のためint mainが複数存在する)場合、
それらのソースをひとつずつビルド→実行することは出来ないのでしょうか?
要するにコマンドプロンプトで「bcc32 〜.cpp」ってやるような単純な手順を、VC++上でやりたいという話なのですが…
645デフォルトの名無しさん:2007/05/22(火) 02:41:05
>>644
単にテストが目的なら
それぞれ普通の関数にしてmain()から順々に呼んでやればいいんじゃね?
646デフォルトの名無しさん:2007/05/22(火) 07:40:28
>>644
mainの数だけプロジェクト作れ
647デフォルトの名無しさん:2007/05/22(火) 19:49:55
hppとcppと分けて実装してますか?
それとも、hppの中にすべて実装していますか?
648デフォルトの名無しさん:2007/05/22(火) 20:18:04
>>647
ヘッダ内にあるべきものと、そうでないものの
区別が付かないと申すか?
649デフォルトの名無しさん:2007/05/22(火) 20:31:48
exportが無いコンパイラでのtemplateライブラリとかは
hppの中に書かざるを得ない…
650デフォルトの名無しさん:2007/05/22(火) 20:32:31
int *p;
int x = 10;

p = &x;

printf("%d", *p);

これでは10が表示されるみたいですが、
char *p;

p = "aaaa";

printf("%s", *p);

こうするとエラーがでます。printf("%s", p)とすればaaaaと表示されます。
1番目に書いたほうは理解できたのですが、
同じように考えて2番目もするとエラーでした。
この違いはなんなんでしょうか?
651デフォルトの名無しさん:2007/05/22(火) 20:33:11
うお。C++スレへ書いてしまった。スレ汚し申し訳ない。
652デフォルトの名無しさん:2007/05/22(火) 21:01:37
>>648

そういうことです。
653デフォルトの名無しさん:2007/05/22(火) 21:34:30
>>652
■ .hpp に書くもの
・他所の .hpp や .cpp から利用することがあるもの。
・宣言
・クラス定義

■ .cpp に書くもの
・他所の .hpp や .cpp から利用することがないもの。
・クラス定義以外の定義
654デフォルトの名無しさん:2007/05/22(火) 22:21:37
>>653

なるほど、有難うございます。
655644:2007/05/22(火) 22:55:16
結局いまのオイラにはBCCでやったほうが早いようです。皆さんありがとうございました。
656デフォルトの名無しさん:2007/05/22(火) 23:15:53
657デフォルトの名無しさん:2007/05/23(水) 01:24:21
ヘッダでも内部リンケージしかないものは書いてもいいだろ。
初期化とか。
658デフォルトの名無しさん:2007/05/23(水) 01:41:31
初期化??
659デフォルトの名無しさん:2007/05/23(水) 08:32:21
コンストラクタ、デストラクタのことなんでね?
660デフォルトの名無しさん:2007/05/23(水) 13:58:15
なんでそれが内部リンケージなんだ?
インライン関数にしてればそうなるけども、
そうでなければ外部リンケージじゃん。
661デフォルトの名無しさん:2007/05/23(水) 14:02:01
きっと>657はコンストラクタをインラインに書かないといけないと思っているんだよ。
662デフォルトの名無しさん:2007/05/23(水) 14:08:48
インライン関数や静的なconst整数定数は内部リンケージだけど、
インライン展開されなければ実質的には外部リンケージになるんだよね?
まあ、要するに、実体が1つしか作られないんだよね、という質問。
663デフォルトの名無しさん:2007/05/23(水) 23:44:38
>>662
インラインかどうかとリンケージは関係ない。
664デフォルトの名無しさん:2007/05/24(木) 01:48:19
お勧めーーーなC++の教本を教えてください。
665デフォルトの名無しさん:2007/05/24(木) 02:05:05
Accelerated C++
666デフォルトの名無しさん:2007/05/24(木) 02:34:00
>>665
レスども。本屋にでも行って調べてきまつ。
667デフォルトの名無しさん:2007/05/24(木) 07:25:23
はじめはどのコンパイラがお勧めなんでしょうか?
教えてくだしあ><//
668デフォルトの名無しさん:2007/05/24(木) 08:25:24
669デフォルトの名無しさん:2007/05/24(木) 23:51:25
>>668
ありがとうございます。
ダウンしたフォルダの中にexeがなかったのですが
どうすればいいでしょうか?・・・
670デフォルトの名無しさん:2007/05/25(金) 00:05:19
PCの知識なしにプログラムを学ぶとか無理だよ
671デフォルトの名無しさん:2007/05/25(金) 00:34:30
今時PCの知識が無い奴と言えば
XPデフォルト拡張子非表示で
そもそもexeを知ってるわけ無いだろ

というわけで釣乙
672デフォルトの名無しさん:2007/05/26(土) 00:08:23
プログラミングを学ぼうとするなら
Windowsみたいな欠陥OSを使っていてはおぼつかない。
Cドライブをフォーマットして、PC UNIXを入れなさい。
そうすれば最新のg++でプログラミングできる。
673デフォルトの名無しさん:2007/05/26(土) 01:13:08
>>672
PC UNIX って NTFS にインストールできるの?
674デフォルトの名無しさん:2007/05/26(土) 01:32:13
>673
やろうと思えばできるよ
675デフォルトの名無しさん:2007/05/26(土) 01:34:58
>>674
インストールはできるけど、動かないよとかそんな落ちじゃなくて?
マジに普通にうごくの?
676デフォルトの名無しさん:2007/05/26(土) 13:02:43
>>672
それはunixが使える人間の戯言
相手のレベルも考えず自分の主観だけで「俺様理論」を振りかざすのは愚行でしかない

初心者にunixを薦める場合、そもそもunixをインストール出来るか否かが問題
使えるようになるかどうかが、さらに問題
結果的にはコンパイル以前の問題で躓く可能性が高い
677デフォルトの名無しさん:2007/05/26(土) 13:20:19
開発環境はGUIじゃないと使えない椰子は多いだろうね
678デフォルトの名無しさん:2007/05/26(土) 14:13:12
今時のUnixなんて、どれも大してインストールは難しくないだろ。
#インストールだけなら
それこそ、それさえできない香具師がプログラミングだなんて烏滸がましいと思うぞ。
679デフォルトの名無しさん:2007/05/26(土) 14:52:55
そもそもインスコイメージが見つかりませんとかw
680デフォルトの名無しさん:2007/05/26(土) 14:55:39
だいたい、Winのアプリのインスコできてるのか?
681デフォルトの名無しさん:2007/05/26(土) 22:45:27
>>676
それは最近のPC UNIXを知らない人間の戯言
インスコの簡単さも知らず自分の主観だけで以下省略
682デフォルトの名無しさん:2007/05/26(土) 22:58:33
今のは超簡単になってるよな Linuixとかさ

おじさんビックリだよ
683デフォルトの名無しさん:2007/05/26(土) 23:00:54
まあ、M$のより簡単だな
684678:2007/05/26(土) 23:31:49
>>681
PC Unixに限らないよ。Sparc版Solarisだってとっても簡単。
PCと違ってバリエーションが少ない(なんせ自社製ハードしかない)から
組み合わせで苦労することもないし。
685デフォルトの名無しさん:2007/05/27(日) 00:00:45
linux対応のドライバが無いから新しいPC買うまで様子見
686デフォルトの名無しさん:2007/05/27(日) 00:02:15
よっぽど新しいものでなければ
大概対応してるけどね
687デフォルトの名無しさん:2007/05/27(日) 00:29:27
>>686
またお前は適当なことを。
688デフォルトの名無しさん:2007/05/27(日) 00:33:43
>>684
富士通とかも出してるよ
689デフォルトの名無しさん:2007/05/27(日) 00:44:39
>687
インスコに必要なデバイスに対応してないってことは
あんまりないでしょ
オンボードのサウンドすらあっさり認識されるよ

と俺はLinux板でアドバイスしてるよ
まあおまいらも騙されたと思ってインスコしてみそ
690デフォルトの名無しさん:2007/05/27(日) 01:07:03
インスコというやつは厨くさくて
691デフォルトの名無しさん:2007/05/27(日) 01:15:31
>690
まあ板違いだからな言葉も違う
廚の振りしたプロも多いよ
692デフォルトの名無しさん:2007/05/27(日) 01:27:18
>>689
俺の知ってるLinux厨はでかい態度で、できるできるっていうわりに
実際にやらせたらできないことが多かったんでどうもLinux厨は信用ならん。
しかも、そいつできなかったことに対して自分の間違いを認めたことは一度もなし。

まぁ、おまえがどうなのかは知らんが、Linux厨に限らず俺が見てきた
オープンソース派なヤツはおしなべてそんなヤツが多すぎ。
693デフォルトの名無しさん:2007/05/27(日) 02:10:46
Linux使っていることに何か特別な気分でいられるんだろうね。
周りがWindowsばかりだからw 目的があって使っているならまだしも・・・
多種さまざまな目的において、Windowsの方が使いやすいし
なんといってもデバイスドライバやソフトウェアの種類がLinuxへの
完全な乗り換えを思いとどまらせる。まぁ、KNOPPIX使うことはあるけど。
大学じゃUNIXでC言語の授業を受けてたけど、自宅じゃWindowsで
694678:2007/05/27(日) 02:25:28
>>688
昔あった「ラップトップEWS」は確かに富士通製だったけど、
その後はOEMしかなかったと思ったのだけど……
出してたっけ?
#某芝で売っているEWSは剥がれ掛けのラベルの下に「Sun」の文字がw
695デフォルトの名無しさん:2007/05/27(日) 10:32:00
>>694
おととしあたりに共通化の発表したと思った。
それまでは単なるOEMでは無かった。
696デフォルトの名無しさん:2007/05/27(日) 22:17:06
大学のJavaの授業ではWin上でEclipseを使ってたけど
家ではOSX上でEclipseを使ってます><
Eclipseさえ動けばなんでもいいよ
697デフォルトの名無しさん:2007/05/30(水) 17:55:16
Eclipseは糞
698デフォルトの名無しさん:2007/06/03(日) 02:17:58
演算子のオーバーロードをしない場合に起こりうる現象は?
699デフォルトの名無しさん:2007/06/03(日) 02:53:10
?
700デフォルトの名無しさん:2007/06/03(日) 12:44:19
>>698 俺はわからん
701デフォルトの名無しさん:2007/06/04(月) 00:10:04
整数クラスを作って演算子をオーバーロードしない(できない)設計の場合、
a+b*cのかわりに、a.add(b.multiply(c))みたいな不自然な書き方を
使用者が強いられるって話じゃないの。
702デフォルトの名無しさん:2007/06/07(木) 02:03:56
ifstream.read(配列,読み込みsize);

↑でEOFまで達すると、seekgで読み込み位置修正は無理でしょうか?
703デフォルトの名無しさん:2007/06/07(木) 02:08:58
>>702
一回 clear() すればたぶん大丈夫。
704デフォルトの名無しさん:2007/06/07(木) 02:15:43
>>703
有り難う!
705デフォルトの名無しさん:2007/06/08(金) 03:21:23
ファイルから16進数表記された文字列を読込んで、
それを数値に変換する事は可能でしょうか?
706デフォルトの名無しさん:2007/06/08(金) 03:29:58
可能ですよ
707デフォルトの名無しさん:2007/06/08(金) 19:16:15
トンツートンツーでもできるよ
708デフォルトの名無しさん:2007/06/08(金) 19:43:47
sscanf, strtol あたりを使えば。
709デフォルトの名無しさん:2007/06/09(土) 05:30:02
解決しました、有り難うございます。
710デフォルトの名無しさん:2007/06/30(土) 04:58:17
CまたはC++で文字列の末尾から5文字(終端文字も含む)にはどうしたらいいですか?
711デフォルトの名無しさん:2007/06/30(土) 04:59:31
文字列の中から指定した文字の個数を数える手段はありませんか?
例えば yoshio という文字列から o が2つあるといった感じで
712デフォルトの名無しさん:2007/06/30(土) 05:00:45
>>710
ん?末尾から5文字にはどうしたらって、見捨てないで普通に使ってくださいな。
713デフォルトの名無しさん:2007/06/30(土) 05:01:14
>>710 好きにしたらいいですよ。
>>711 ありますよ。
714デフォルトの名無しさん:2007/06/30(土) 05:16:40
文字列の中から指定した文字の個数を調べてくれる手段はありますか?
例えば yoshio という文字列から o が2つあるといった感じで
あるとしたらどういうものがありますか?
715デフォルトの名無しさん:2007/06/30(土) 06:38:45
#include <string>
#include <algorithm>
#include <cassert>

int main() {
using std::string;
{ // <<710の問いに対するエスパー回答
string str("123456789");
int n(5);
string::size_type len = str.length();
string::const_iterator e(str.end());
assert( str.substr(len-n, len) == string(e-n, e) );
}

{ // <<714の問いに対する(ry
string str("nullponullpo");
string::size_type num(0);

string::iterator i(str.begin()), e(str.end());
while ( i != e ) {
i = std::find(i, e, 'l');
if (i == e) break;
++num;
++i;
}
assert( num == 4 );
}
}
716デフォルトの名無しさん:2007/06/30(土) 12:24:59
おい天才、教えてください
const 配列のアドレスと要素数を取得する関数は↓のうちどれが一般的ですか?
(例はint型配列を取得する関数の宣言)

@void getArray(const int*& array, int& num);

Aconst int getArray(const int*& array);

Bconst int numofArray();
  + void getArray(const int*& array);

C他あればそれを教えてくだされ
717デフォルトの名無しさん:2007/06/30(土) 12:37:14
何がやりたいんだ?

#define ELEMOF(array) (sizeof (array) / sizeof *(array))

みたいなことがやりたいのか?
それならこうだぜ。

#define ELEMOF(array) (sizeof ELEMOF_((array)))
template <typename T, size_t N> char (&ELEMOF_(const T (&)[N]))[N];
718デフォルトの名無しさん:2007/06/30(土) 12:38:55
あ、すまん。違うな。ようやく理解した。

int size();
const int* data();

みたいなのを作るんじゃないか?
719デフォルトの名無しさん:2007/06/30(土) 12:54:09
boost::addressof()とboost::size()がまさにそれなんだが…
720デフォルトの名無しさん:2007/06/30(土) 13:06:17
そっちじゃない。
721デフォルトの名無しさん:2007/06/30(土) 13:09:20
そっちです。
722デフォルトの名無しさん:2007/06/30(土) 13:11:25
どっちやねん
723716:2007/06/30(土) 13:14:36
>>718
う〜ん、やっぱり関数の戻り値として取得するのがいいですかね。
要素数を求める用と配列のアドレスを求める用の関数を実装して取得するようにします。

ありがとう
724デフォルトの名無しさん:2007/06/30(土) 15:10:12
構造体を返す
725デフォルトの名無しさん:2007/06/30(土) 15:10:42
それは不便にしかならない
726デフォルトの名無しさん:2007/06/30(土) 20:30:22
>>714 の質問の答は別のスレにありますた
int n = strspn(s.c_str(), "\t"); < こんな感じ。 sはstring型
727デフォルトの名無しさん:2007/06/30(土) 20:55:21
std::countでよくね?
728デフォルトの名無しさん:2007/06/30(土) 21:18:24
って思ったが、やってみたら >>726 じゃだめぽだった orz
729デフォルトの名無しさん:2007/06/30(土) 21:22:35
>>728
      m9 三 9m
     彡  ∧∧  ミ
    m9  (^Д^)  9m プギャプギャプギャプギャー!!
     ヾヽ\ y  ) 彡
      m9/三 9m
       ∪ ̄ ̄ ̄\)
730デフォルトの名無しさん:2007/06/30(土) 21:36:57
>>729
ある文字列から、指定した1文字の数を検索する方法を教えてくれYO!
731デフォルトの名無しさん:2007/06/30(土) 21:40:01
だからstd::countとかboost::count使うのがいい
732デフォルトの名無しさん:2007/06/30(土) 21:45:41
>>731
使い方の例を教えてください、おながいします!
733デフォルトの名無しさん:2007/06/30(土) 21:50:35
>>732
いろいろやってみればいいだろ。
それをしないからお前はいつまで経ってもそうなんだ。
734デフォルトの名無しさん:2007/06/30(土) 21:54:41
726にならうなら、
int n = std::count( s.begin(), s.end(), '\t' );
735デフォルトの名無しさん:2007/06/30(土) 21:55:14
>>733
はぁ?教えられないくせに自分は知ってますよだ?ちゃんと yoshio の中から o の数を
って具体的な例を挙げて質問しているじゃん。答えられないならしゃしゃり出てくるなよ
所詮お前もあれだろ?質問者を見て、自分より劣る奴にはでけぇ面できる役立たずの
ウドの大木だろ? スレタイ 読んでから二度とお前はこのスレでレスするな。
少なくともお前みたいな、知らない奴を叩くだけの奴に答えてもらいたいなんて思う奴はいない。
失せろ、クズw
736デフォルトの名無しさん:2007/06/30(土) 21:57:04
答えられないくせにでしゃばるだけのうざいバカ。いるよな、こういう奴。
んで、あまりにも的外れなレスするから、そいつが発する言葉は全て無視されて
周りは「あっ、なんか知ったかのバカがほざいているよ」って思われてるんだよねw
知っているなら知っていると、知っていることを示すレスをすりゃ良いのに、
そんなんだからいつまで経ってもそうなんだ。何がそうなんだか知らないがそうなんだw

733 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 21:50:35
>>732
いろいろやってみればいいだろ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。

何がそうなの?w
737デフォルトの名無しさん:2007/06/30(土) 21:59:03
バカが何ほざいてんだか
よそでやってくれ
738デフォルトの名無しさん:2007/06/30(土) 21:59:10
>>734
thanks a lot.助かりますた。
739デフォルトの名無しさん:2007/06/30(土) 21:59:20
boost::countの方は
size_t n = boost::(s, '\t');
ちなみにこっちは非標準のboost::range_exのargorithm.hppだから適当にリポジトリから拾ってきてね
740デフォルトの名無しさん:2007/06/30(土) 22:00:23
↓答もしないくせに煽るだけのバカはお前だろw
737 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 21:59:03
バカが何ほざいてんだか
よそでやってくれ

スレタイ読んでからこのスレの意味を理解しろや、ボケが。
↓何これ?お前のはレスになってねーんだよ、そういうのは茶化しって言うんだよ。
733 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 21:50:35
>>732
いろいろやってみればいいだろ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
それをしないからお前はいつまで経ってもそうなんだ。
741デフォルトの名無しさん:2007/06/30(土) 22:02:15
>>737
バカはおめーだろ。バカは。答える気がないのに質問している人を煽るだけかよ?
周りからしてみりゃ、お前が答える能力がないくせに、なんとなく知っているって話だろ。
具体的にどういうものがあるかも示せないくせに、さも知ったような口聞くんじゃねーよ、
ヘボプログラマーw お前みたいな三流以下はプログラマーに向いていないどころか
知った気になって間違った不適切な手法を用いてバグを出しまくって、信頼を失って
仕事も入らなくなるんだよなw
742デフォルトの名無しさん:2007/06/30(土) 22:04:22
>>740
C++なら俺に聞け(入門篇)、ただし、基地外のぞく

基地外警報発令
743デフォルトの名無しさん:2007/06/30(土) 22:06:26
>>742
だからおめーに聞いてねーってwwww でしゃばるだけのまともな回答をしない奴が
何俺に聞けとか偉そうにしてんだよ?お前みたいな役立たずバカになんて聞いてねーし
レスしてもらいたいなんて思わないよ。医者だとしても治療とか言って
治療したつもりが悪化させてしまうような奴な医者を誰も頼らないし
そんなのは医師免許を剥奪するのが望ましい。して、お前は医師免許すら持っていない
偽医者だから、引っ込んでろ。
744デフォルトの名無しさん:2007/06/30(土) 22:07:29
>>742
うわっ、お前の口キムチくせぇ。頼むからその口開かないで祖国に帰れ、な?
745デフォルトの名無しさん:2007/06/30(土) 22:07:41
基地外、基地外、基地外、基地外
746デフォルトの名無しさん:2007/06/30(土) 22:14:16
>>745 もうええって。確かに調べれば出る罠。けどお前は役立たずのクズ。お前のレスは無駄すぎ。
自分で↓ここまでやったから。後は知ったかのお前をとっくに超えている俺にひれ伏すんだなw
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
string s;
char src;
int n;
printf("Input 文字列> ");
cin >> s;
printf("Input 検索文字> ");
cin >> src;
cout << static_cast<int>(count( s.begin(), s.end(), src )) <<endl;
return 0;
}
747デフォルトの名無しさん:2007/06/30(土) 22:14:48
危険ですので基地外にプログラミング教えないでください
748デフォルトの名無しさん:2007/06/30(土) 22:15:27
>>746
勝手に逝ってろ
749デフォルトの名無しさん:2007/06/30(土) 22:16:34
基地外でも理解する頭がありゃどんどん理解してプログラミングが出来てくるから
安心しろw ここで知らない奴を見つけては煽るだけのバカよりよっぽどマシだから。
いずれこのスレは俺が主体となってレスするようになるから、低レベルな自分が
通用するような今の現状で満足していろ。自民党が参院選で負けてその後悲惨な
結末をたどるように、初心者を叩くだけで自分は出来た気になっちゃっているアホは
いずれ時間の経過とともに年をとって、苦労するだろうw
750デフォルトの名無しさん:2007/06/30(土) 22:18:21
こいつはしばらく前から居着いてる基地外だからスルーよろ。
751デフォルトの名無しさん:2007/06/30(土) 22:19:46
われわれは、基地外を叩いてるんだよ、基地外をな
752デフォルトの名無しさん:2007/06/30(土) 22:22:14
↓スルーの種類のコピペ
753デフォルトの名無しさん:2007/06/30(土) 22:24:04
理解する頭はあるんだよ、俺は。レベルは高くないけど大学で理系の分野を専攻していて
基本的なことは習ったから。論理演算子やプログラミングの授業もあったし
実験や研究でもそれに関する内容があったし。ただ、プログラミングを本格的にやるような
学科じゃなかったから、最近になってやり始めたのさ。言語の実装について理解できれば
後はそれと数学的な理論を用いてより推敲されたコードを記述してオマエラをあっと言わせてやんよ?
やっぱ大学くらい行くべきだな。ちょこっと専門学校でかじったくらいの奴らにはぜってぇ〜負けないw
754デフォルトの名無しさん:2007/06/30(土) 22:26:12
今の大学って四年でも
ポインタ理解してない奴が多いイメージがあんだけど
755デフォルトの名無しさん:2007/06/30(土) 22:27:17
>>753
countの使い方くらい検索すればでてくるだろ?
756デフォルトの名無しさん:2007/06/30(土) 22:29:34
この前宿題スレで大学大学言ってた奴かw?
757デフォルトの名無しさん:2007/06/30(土) 22:30:28
>>755 ああ、出てきた。余裕だな、俺。このまま行くと、来年にはプログラミングマスターになれそうだ。
ttp://www.geocities.jp/ky_webid/cpp/library/016.html
758デフォルトの名無しさん:2007/06/30(土) 22:32:48
基地外マスター、大学を出てるんだら
言語の実装をココで聞かなくていいじゃね
759デフォルトの名無しさん:2007/06/30(土) 22:33:39
ふふっ、そうだな。下を見て見下すような奴らに言語の実装を聞く方がおかしかった。反省するよ。
ちょっくらC++の参考書でも買ってくる。オマエラに聞くよりマシだろうからなw
760デフォルトの名無しさん:2007/06/30(土) 22:38:09
今の大学だろうが、昔の大学だろうが、卒業しても
ポインタ理解してない香具師なんかいくらでもいたろ
761デフォルトの名無しさん:2007/06/30(土) 22:41:57
んで、俺が ポインタを理解していない とでも?実態はメモリ上のアドレスを示すもんだろ。
だから何?もちろんポインタなんてC言語じゃ普通に使っているが?ナイト不便だしな。
762デフォルトの名無しさん:2007/06/30(土) 22:46:44
>実態はメモリ上のアドレスを示すもんだろ
あー、判ってないな。
763デフォルトの名無しさん:2007/06/30(土) 22:48:07
>>762 お前が分かってないってことがバレただけだな。口を閉じろよ、初心者w 間違ってないことを
自分基準で間違っているって言う奴はただのバカ。実態はアドレスだよ。間接演算子を用いて
そのアドレス上の値を参照するんだが?もちろん型の指定は忘れるなよ、初心者w

http://www.google.co.jp/search?q=C%E8%A8%80%E8%AA%9E%E3%80%80%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
764デフォルトの名無しさん:2007/06/30(土) 22:48:55
>>761
メモリ上のアドレスって何?
765デフォルトの名無しさん:2007/06/30(土) 22:51:32
762 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 22:46:44
>実態はメモリ上のアドレスを示すもんだろ
あー、判ってないな。

↑こいつは多分、ポインタを配列だと勘違いしているんだろうな。
ポインタは言葉が持つ意味のごとく「指し示すもの」。

ttp://www.techscore.com/tech/C/6.html
プログラムで使用されるデータは、全てメモリに保持されます。
C言語で作成されたプログラムも同様に、変数が保持するデータは全てメモリで管理されます。
通常プログラマはメモリのどこに変数のデータが管理されているか意識しなくて良いようになっていますが、
データが格納されているメモリアドレスを操作する仕組みも提供されています。
それを「ポインタ」と呼びます。

はいっ、間違っているってならこういう説明をしているサイト全てに抗議してこいよw
766デフォルトの名無しさん:2007/06/30(土) 22:51:57
もちろんzipcode
767デフォルトの名無しさん:2007/06/30(土) 22:53:17
760 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 22:38:09
今の大学だろうが、昔の大学だろうが、卒業しても
ポインタ理解してない香具師なんかいくらでもいたろ

↑こいつ、大学出ててもポインタを知らないような奴ならでけぇ面が出来る
専門学校卒っぽいな。所詮この程度。しかも自分が分かっていないことを露呈www

762 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 22:46:44
>実態はメモリ上のアドレスを示すもんだろ
あー、判ってないな。

↑お前ガナーwwwww ポインタはアドレスを示すものだよ。ちゃんと実態を把握しましょうね、専門学校w
768デフォルトの名無しさん:2007/06/30(土) 22:53:41
     ______    ___  ____  _____     __     ___
   /___   /    |  / /      | /__  __/ [][] /  /   _| |_
         /   /     /  /  /  / ̄ ̄|. l    / /      /  /    |_  レ'~ ̄|
       /   /.     /  /  /  /.  / /    |  |___   \ \    /   /| |
      /   /     /  /  /   ̄ ̄ /     \__|     \ \ /_  /  | |_
     /   /       /  /  /  / ̄ ̄ ̄                 ̄ ̄  .|__|   \/
   /   /      /  /  /  /
  /   /____.  /  /  /  /
 /       / /   |  /  /
  ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄   ̄
769デフォルトの名無しさん:2007/06/30(土) 22:54:47
>>765
自分でやれよ。
770デフォルトの名無しさん:2007/06/30(土) 22:55:14
>>764
えっ?えええええええええええ!?お前、メモリについても無知か・・・
そもそもコンピュータって、何か演算処理する場合、一度メモリにデータが書き込まれて
それをCPUが読み込んで処理して、場合によってはHDDやその他の記憶装置に
保存する仕組みがあるのは、3流大学の情報系の授業でもやるぞ?w
お前、コンピュータの五大装置とその役割を説明してみろよ?w
あぁあ、お前が低学歴だってのがバレちゃっただけだな・・・たかが count くらいで
偉そうにするから・・・やれやれ。
771デフォルトの名無しさん:2007/06/30(土) 22:55:43
>>763
× 実態
○ 実体

まーこんな揚げ足取る以前にどうも分かってない気がすんだが。
ポリモーフィズム使いこなそうと思うと曖昧な知識じゃやってけんぞ。
772デフォルトの名無しさん:2007/06/30(土) 22:59:58
>>764>>762
ポインタも知らないくせに大学を出ていてもポインタを知らない奴を持ち出して
自分の方が上だと勘違いする奴がこんなスレで偉そうに知らないくせに
知ったような口を聞いて、答にもならないレスをしていたと い う の か?
頼む、笑いが止まらない、お前は二度とこのスレで質問者にレスするな。邪魔。
いずれ俺がこのスレで主体となってレスするから、それまでにお前はこのスレから離脱しろ?な?
お前にプログラミングは向いてない。なぜなら、プログラムを動作させる
汎用電子計算機について全く理解していないから。

車の運転においても、国によって道路交通法は違う。車の運転(アクセル、ブレーキを踏む程度)
で運転が出来た気になっていて、その国のルールを無視するような運転をする奴に
運転免許なんて与えられないよな。お前はそんな感じでキーボードを叩けるくらいで
コンピュータを使えた気になってしまっていることに気づけ。お前どこの学校卒だ?痛々しい。
773デフォルトの名無しさん:2007/06/30(土) 23:00:23

























774デフォルトの名無しさん:2007/06/30(土) 23:01:49
>>771
でた〜〜〜、その程度のことを指摘して、今度は自分は知っていますよアピールですか?wwww
まぁ、変換ミスしたことは認めるけど、それで ポインタ について知らなかったことにはならないからw
あと、何度も言うようだが、C言語ではポインタなんて当たり前のように使っているし、ないと不便。
C言語だろうと、C++だろうと、どちらも汎用電子計算機に計算処理をさせるためのコードの記述を
その実装された仕組みにあわせてすることにはなんら変わりは無い。メモリのアドレスすら
知らない奴が、ポインタについて知っていないと評価するなんてちゃんちゃらおかしいことだw
775デフォルトの名無しさん:2007/06/30(土) 23:02:39
きちがい、おまえすごいな。
すごいお前がなんで、高卒PG見習いの俺だって知ってるcountの使い方が解らないんだよ。
だから、バカにされたんだぞ。
776デフォルトの名無しさん:2007/06/30(土) 23:04:24
>>774
でた〜〜〜、その程度のことを指摘して、今度は自分は知っていますよアピールですか?wwww
まぁ、変換ミスしたことは認めるみたいだけど、それでポインタについて知ってることにはならないからw
あと、何度も言ってるようだが、C言語ではポインタなんて当たり前のように使っているし、ないと不便。
C言語だろうと、C++だろうと、どちらも汎用電子計算機に計算処理をさせるためのコードの記述を
その実装された仕組みにあわせてすることにはなんら変わりは有る。ポインタすら
知らない奴が、メモリのアドレスについて知っていないと評価するなんてちゃんちゃらおかしいことだw
777デフォルトの名無しさん:2007/06/30(土) 23:05:16
>>775
countの使い方を知らないのはいいけど、教えてもらっても使い方を検索もできないで、
教えろって暴れるのがどうしようもないっていうか。
778デフォルトの名無しさん:2007/06/30(土) 23:06:18
764 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 22:48:55
>>761
メモリ上のアドレスって何?

このレスにはマジ吹いた。飲んでたジュースを噴出した画面とキーボードと
PC本体がコーラまみれになっちまったぜい!賠償を請求するニダ!
779デフォルトの名無しさん:2007/06/30(土) 23:06:39
>>774
count知らなかったの?ウチの小学生の娘も笑ってますよw
          __,.  -─-- 、_
        , - ' _,´ --──‐-   )
      ,イ´__-___,. -‐ '__,. - '´
      `ー----, - ' ´ ̄ ``  、__
         __,ィ            ヽ. `ヽ.
      ,  '⌒Y  /     、ヽ    ヽ  ヽ.
     /    /  i   /l/|_ハ li  l i   li   ハ
.    // 〃 /l  i|j_,.//‐'/  lTト l、l   j N i |
   {イ  l  / l  li //___    リ_lノ lル' lハ. ソ  ___◎_r‐ロユ
    i| /レ/l l  l v'´ ̄  , ´ ̄`イ  !| ll,ハ └─‐┐ナ┐┌┘ _  ヘ____
    ハ| ll∧ハヽ ト、 '''' r==┐ '''' /l jハ| ll ll    /./┌┘└┬┘└┼────┘ロコ┌i
   〃  ‖ レ'¨´ヽiへ. _ 、__,ノ ,.イ/|/ ノ ll l|   </   ̄L.l ̄ ̄L.lL.!         ┌┘|
  ll    ll {   ⌒ヽ_/ } ー‐<.__  ′  l| ‖
  ‖    ‖ ヽ,   /、 〈   |:::::::| `ヽ      ‖
  ‖       {.  ハ ヽ Y`‐┴、::::v  l      ‖
  ‖      |iヽ{ ヽ_ゾノ‐一’::::ヽ. |      ‖
  ‖      |i:::::`¨´-- :::......:...:.:.::.}|     ‖
  ‖      |i::::::ヽ._:::_:::::::::::::::::::_ノ |     ‖
  ‖      |i::::::::::::i___:::::::::::/  |
           jj::::::::r┴-- `ー‐ '⌒ |
         〃:::::::マ二      _,ノ
       //::::::::::::i ー 一 '´ ̄::.
       ,','::::::::::::::i::::::::::::::::::::::i::::::ヽ
780デフォルトの名無しさん:2007/06/30(土) 23:08:31
>>777
悪い、俺、countの質問をした奴じゃないから。いつから俺がcountを質問した奴になったんだ?
俺はレベルは高くないけど一応工学部に所属していたことのある、プログラミングを
趣味で始めた程度のビギナー。分かる?それでも電子計算機について学んできたから
それなりに知識はあるわけ。まぁ、if文とかで使われる式の評価や真偽については
高校でならう命題や集合などの知識があれば出来ないことはないだろうけど
やっぱ大学レベルは必要だなw
781デフォルトの名無しさん:2007/06/30(土) 23:09:28
ドクロちゃんって小学生だったのか
782デフォルトの名無しさん:2007/06/30(土) 23:11:07
>>780
え?おまえ誰?
783デフォルトの名無しさん:2007/06/30(土) 23:11:19
ドクロちゃんは14才
ザクロちゃんは9才
バベルちゃんは何歳だろう
784デフォルトの名無しさん:2007/06/30(土) 23:11:51
>>779
countを知っている程度で、知らない奴にそこまで得意気になれるお前って、そうとうレベルが低いんだな・・・
分かるよ。要するにお前はあれだろ?自分が出来ることで、それが出来ない他人を見つけては
俺はすげー!お前よりできる!って自慢しに来る奴だろ?人それぞれ得意不得意はあるし
経験したしないの差はあるけどさ。1つだけ用いてそこまで得意気になれるあんたには脱帽したぜ。
高学歴高収入の奴を目の前にしても、そいつが出来ないことだけを用いて
自分はそいつより優勢だと感じたいんでしょうね・・・哀れ、チーン。
785デフォルトの名無しさん:2007/06/30(土) 23:13:19
>780
あなたの所属していた工学部では、
全員ポインタをマスターしていたというわけで?
786デフォルトの名無しさん:2007/06/30(土) 23:13:49
>>784
そんな事くらいで得意げになるわけねぇじゃんw
787デフォルトの名無しさん:2007/06/30(土) 23:18:03
最後に。ポインタの実体はアドレスです。誰かさんが検索しろって言っていたが
その検索したどこのサイトを見ても メモリのアドレス について語られています。
ポインタの前で用いられることのある * <これは間接演算子。まさか、ケツ穴だと思った?w
788デフォルトの名無しさん:2007/06/30(土) 23:19:47
なんだこのスレは
789デフォルトの名無しさん:2007/06/30(土) 23:20:04
きちがいは大学の工学部に所属していたことあるのか、でも、普通なら卒業したといわないか。
所属だけなら、先生の秘書でも工学部に所属って言わない?
790デフォルトの名無しさん:2007/06/30(土) 23:21:47
ksk
791デフォルトの名無しさん:2007/06/30(土) 23:22:47
C++覚えたてのキの字が鬼の首を取ったように暴れるスレか。
792デフォルトの名無しさん:2007/06/30(土) 23:23:43
博士が100にんいるむら
http://www.geocities.jp/dondokodon41412002/
793デフォルトの名無しさん:2007/06/30(土) 23:24:32
>>787
いや、掛け算と思った、orz
メモリアドレスでも論理と物理あるだろ
794デフォルトの名無しさん:2007/06/30(土) 23:26:41
>>787
ネットのヘンな解説ばっかり見てるなよ。
795デフォルトの名無しさん:2007/06/30(土) 23:30:01
ポインタ=アドレスという知識では、はっきりいって浅い。
796デフォルトの名無しさん:2007/06/30(土) 23:30:18
>>787
たしかに実体としてはメモリアドレスになっている実装ばかりなんだが、
C/C++の標準規格の文書では、ポインタについての部分でもそれ以外でも、
メモリアドレスという概念には一切言及されていない。
(例外があるとすれば単行&演算子の名称がアドレス演算子ということだが、それも名称だけ)

だからポインタ=アドレスと言うとみんなよってたかってぼこぼこにしてくる。
797デフォルトの名無しさん:2007/06/30(土) 23:31:10
おっばいが100にんいるむら
http://www.geocities.jp/dondokodon41412002/
798デフォルトの名無しさん:2007/06/30(土) 23:31:19
ああすまん単行ではなく単項ね。わかっているとは思うけど。
799デフォルトの名無しさん:2007/06/30(土) 23:34:26
メンバ変数ポインタとか明らかにアドレスじゃないよね。
800デフォルトの名無しさん:2007/06/30(土) 23:35:44
>実態はメモリ上のアドレスを示すもんだろ
どうでもいいけど、ここだけ「だろ」って語尾。つまり同意を求めちゃっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。

なんつーか、毎週ご苦労さん。
801デフォルトの名無しさん:2007/06/30(土) 23:36:38
>>796みたいに説明という説明をせず、そうではないこともあるとか言って
ポインタそのものが使いこなせているわけでもないのに知ったかぶるからたたかれるんだよ。
何が間違っているかすら説明していないし、本質を説明してないだろ、お前は。
メモリ上のアドレスを知れ
802デフォルトの名無しさん:2007/06/30(土) 23:36:56
ひとつおりこうになったね。
がんばって、はやくわれわれを「あっ」といわせてください^^
803デフォルトの名無しさん:2007/06/30(土) 23:38:19
「ハードに近いレベルが基本的なことなんだ」とか勘違いしてそうだな。
804デフォルトの名無しさん:2007/06/30(土) 23:38:52
>>802
良いのかい?
俺はノンケでも喰っちまう男だぜ?
805デフォルトの名無しさん:2007/06/30(土) 23:40:40
>>800
何が言いたいんだ?事実だぞ?そういうことでたぶらかして何が楽しい?
んじゃ間違っているなら間違っている点を指摘しろよ?
逆にさぁ、お前らの屁理屈を通したら、ポインタはアドレスを示すものではない?
ってことを正当化させて相手を完全に否定しようとしているとしか思えない。実にきめぇ。
自分のほうがより理解している、知っている!って誇張したいんだろ。

とりあえず検索するなり、ポインタを扱ってみりゃ誰だってわかる。
メモリ上にデータが一時的に書き込まれる、それを参照してプログラムは
演算処理をしている。そんなの大学じゃ普通に習うぞ?
あとな、なんだかんだ言ってもそういう基本原理を人間が都合よく 実装 して
仮想して実際にあるように装っているわけだろ?お前、画面に映った美女を
実際にいるかのように思っているエロゲヲタだろ?ぼくちんの○×ちゃんは
画面に映っているだけの存在じゃない、俺にとっては妻だとかなw

とにかく、お前らしつこいくらい ポインタ について噛み付いてくるくせに
お前らこそポインタについて説明はなんらしていないじゃん。
そういう説明が不適切だ!不適切になることもある、程度しか言えないなら
結局お前らがポインタについて理解していないだけ。

それから、そういう説明をしているサイトや学校に対してお前らは抗議してこい。
そしてお前らの糞な説明をした講義でもしてこいw
806デフォルトの名無しさん:2007/06/30(土) 23:41:37
結局理解できて無いじゃん。
というか人の話聞いてないな、お前。
807デフォルトの名無しさん:2007/06/30(土) 23:42:40
>>805
「最後に」といいつつ、見てることは見てるんだな。
ああ、最後にと言ったやつとは別人ってこと?
808デフォルトの名無しさん:2007/06/30(土) 23:43:10
頼むから、多重継承してるクラスのメンバ関数ポインタとか
メンバ変数ポインタとかの構造を理解してから出直してきてくれ。
809知ったかの勝ち逃げパターンw:2007/06/30(土) 23:43:16
800 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 23:35:44
>実態はメモリ上のアドレスを示すもんだろ
どうでもいいけど、ここだけ「だろ」って語尾。つまり同意を求めちゃっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。
自信がないことがばればれ。だからもう、後は必死になって取り繕うしかなくなっている。

お前が必死になってそれは違う、違う、そうじゃな〜〜いって言うだけで
まったく説明が出来てないバカwwww
とりあえず、メモリ上のアドレスを示すものじゃないならそれについて説明を求めまーーすwwww
悪いがポインタについてと、ポインタを扱うとはまた別物だから。
それから、ポインタだけで話をするなよ。言葉そのものが意味するものは pint の名詞 pointer だから。
http://dictionary.goo.ne.jp/search.php?MT=pointer&kind=ej&mode=0&base=1&row=0
何かを指し示すものには変わりはない。電子計算機上においては、メモリのあるアドレスを指し示している
ことには変わりはないんだし。やれやれ、バカに理解させるってのが無理だってことがヨークわかった。
所詮低学歴ってこの程度の屁理屈でしか言い返しができないんだよな。それも正当性のない屁理屈w
810デフォルトの名無しさん:2007/06/30(土) 23:43:48


























811デフォルトの名無しさん:2007/06/30(土) 23:45:34
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF
http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
> ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報でアクセスできるとき、
> その位置を表現する変数の事をいう。有名な例としてはC/C++でのメモリアドレスを表すポインタが
> 挙げられる。
はい、何も間違えていませんね。いい加減言葉は言うまでもないが、そのものの本質を
理解する頭を持ちましょうね。あっ、そういう頭がないからお前らは低学歴のくせして
ここで質問する奴を叩いて、自分はそいつより上だと自己満足することを求めているのかw
低収入の頭の悪い奴がとる態度とそっくりだ。現実はそう甘くない。お前ら低収入は
お金に困らない人が普通にやっていることさえもまともに出来ないから考え方もおかしくなるんだよなw
812デフォルトの名無しさん:2007/06/30(土) 23:47:31
>>811

「挙げられる。 」だよ。

例として 挙げられてるだけであって、それがすべてじゃない。
お前の知識は、全体集合の中の、よく挙げれられる一部の例だけしかないってこと。

残念だったな。
813デフォルトの名無しさん:2007/06/30(土) 23:49:36
都合の悪いレスは必死こいて無視する。実にゆとり的。


ん?ひょっとして理解できてないだけだったりするのかな。
814デフォルトの名無しさん:2007/06/30(土) 23:50:02
#include <iostream>

struct A { int a; };

void show(int (A::*mp)) {
 int* p = reinterpret_cast<int*>(&mp);
 std::cout << *p << std::endl;
}

int main() {
 int (A::*mp1) = &A::a;
 int (A::*mp2) = NULL;

 show(mp1);
 show(mp2);
}

これ実行してみ。
何て出力されるか? それはメモリ上のアドレスか?
815デフォルトの名無しさん:2007/06/30(土) 23:51:17
結局チミはだれな訳?
逆ギレしつつもcountを教えてもらった人?
自分で実装してみろ、って言った人?
816デフォルトの名無しさん:2007/06/30(土) 23:53:27
大学の教育課程でお教授が言ってることなんて
うそばっかりだから。だまされるなよ。
817デフォルトの名無しさん:2007/06/30(土) 23:53:57
>>764 メモリのアドレスも知らない奴がポインタを知ったように語る、もはや論外。プギャーはこいつだろw

764 名前:デフォルトの名無しさん 投稿日:2007/06/30(土) 22:48:55
>>761
メモリ上のアドレスって何?
818デフォルトの名無しさん:2007/06/30(土) 23:55:18
>>804
アッー!

>>816
なんかメモリリークを軽視してる奴が多いよな
819デフォルトの名無しさん:2007/06/30(土) 23:55:49
ttp://homepage1.nifty.com/toshio-k/prog/c/pointer.html
あれあれぇ〜、ここでもポインタについて アドレス を用いて説明してまちゅねぇ。
さぁ、抗議と講義をしてきんしゃい、メモリのアドレスも知らなかった君(プ
820デフォルトの名無しさん:2007/06/30(土) 23:55:53
>>817
論理アドレスと物理アドレスのどっちなのかって聞いてんだろ。多分。
821デフォルトの名無しさん:2007/06/30(土) 23:56:55
>>817
おまえ、>>814 が何やってるか分かるか?
822デフォルトの名無しさん:2007/06/30(土) 23:57:57
>>819
自分ですれば?
823デフォルトの名無しさん:2007/06/30(土) 23:58:51
さっきから暴れてるキの字はさっさとJISのページに行ってC++の規格読んで来い
824デフォルトの名無しさん:2007/07/01(日) 00:00:06
これがわからないならプログラミングなんてやめな>メモリのアドレスも知らん香具師

#include <stdio.h>

int main(void) {
int *a,b=3;
printf("b : %p / %d \n",&b,b);
printf("a : %p / %d \n",a,*a);
a=&b;
printf("a : %p / %d \n",a,*a);
return 0;
}
825デフォルトの名無しさん:2007/07/01(日) 00:00:54
>>824でスレタイも読めないかわいそうな子だということが判明しました。
826デフォルトの名無しさん:2007/07/01(日) 00:00:58
>>824
いいから >>814 を実行してみろや。
それとも C++ スレで stdio.h とか書いてるお前には理解できないか?
827デフォルトの名無しさん:2007/07/01(日) 00:02:08
SegmentationFault(core dumped)
828デフォルトの名無しさん:2007/07/01(日) 00:04:47
得意がって未初期化のポインタを参照とはね・・・
829デフォルトの名無しさん:2007/07/01(日) 00:04:56
>>823
はぁ?お前今の流れ読めてねーだろ?ポインタの話だろ、ポ・イ・ン・タ。
わかるぅ?ポインタの実体がアドレスだってのはわかっているし
そのアドレスに記録されているデータを参照するのに使われている間接演算子についても
>>824で証明済み。まぁ、恐らくアホは b の前の & が理解できないだろうけどなw
830デフォルトの名無しさん:2007/07/01(日) 00:05:46
都合の悪いレスには無反応wwwwwwwwwwwwww
831デフォルトの名無しさん:2007/07/01(日) 00:06:19
>>824
テストプログラムとは言え
初期化してないポインタで参照するのは感心せんなぁ・・・
832デフォルトの名無しさん:2007/07/01(日) 00:07:44
ポインタがメモリ上のあるアドレスを指し示していることが理解できない奴がこんなスレで
偉そうに答えにもなっていない答えをレスしていたなんて・・・結局、どこへいっても、
自分より劣る奴を見下したい奴はいるんだね。
833デフォルトの名無しさん:2007/07/01(日) 00:08:15
>>829
ポインタの実体をアドレスと呼ぶのは確かだが、
それは必ずしもメモリアドレスとは限らない。
もっと抽象化された存在だ。
それは >>814 で証明済み。

どこに突っ込まれてるのか理解してないようだな。
834デフォルトの名無しさん:2007/07/01(日) 00:08:33
831 名前:デフォルトの名無しさん 投稿日:2007/07/01(日) 00:06:19
>>824
テストプログラムとは言え
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
↑やっちまったな。ポインタについて理解していない証拠が出ました。はいさようならw
835デフォルトの名無しさん:2007/07/01(日) 00:08:42
>>829
くだらないHPを参考に挙げまくってた流れからすれば妥当だ。
今お前に必要なのは、そこら辺の解説ページではなくC++の規格だよ。
836気まぐれアナスイ:2007/07/01(日) 00:09:12
C.で作成した物をgcc.でconpile.をして、
error.出力を出さずに実行で、文字列が変わらずに
その後書き換えを試そうとするとcuerser.を移動すると
文字化けが生じる状態はどの様な状態ですか?
837デフォルトの名無しさん:2007/07/01(日) 00:09:12
世の中ポインタの実装にメモリアドレスを使わないものもあったらしい。
C++ではなくCの話だが、許してくれ。
http://www.kouno.jp/home/c_faq/c5.html#17
> 5.17:
> ヌルポインターに0以外の値を使用するマシンや、
> 異なる型のポイン ターに異なる内部形式を持つマシンは本当に存在するのか
(中略)
> Symbolics社のLISPマシンは、タグ付きアーキテクチャなので、
> そもそもポインターを数値で表すという通常の概念さえ持たない。
>  (基本的には、存在しないのハンドル)をCのポインターとして使っている。

ちなみに、最後の行は日本語でおkだが、原文だとこうなっている。
it uses the pair <NIL, 0> (basically a nonexistent <object, offset> handle) as a C null pointer.
838デフォルトの名無しさん:2007/07/01(日) 00:09:31
>>834
int *a,b=3;
printf("b : %p / %d \n",&b,b);
printf("a : %p / %d \n",a,*a); ←←←←←←←←←←←←←
839デフォルトの名無しさん:2007/07/01(日) 00:10:06
>>831>>833
> どこに突っ込まれてるのか理解してないようだな。
そのままそっくり返します。ポインタについて理解していないのはお前の方。

↓ポインタを数値データと思っていた勘違いの証拠
初期化してないポインタで参照するのは感心せんなぁ・・・

はい、以後放置よろw
840デフォルトの名無しさん:2007/07/01(日) 00:10:25
>>814
みたいな書き方って今も普通なのか?なんか10年ぐらい前に
みたっきりで今みねーような気がするんだが
841デフォルトの名無しさん:2007/07/01(日) 00:10:53
>>840
boost とかで使われてる
842デフォルトの名無しさん:2007/07/01(日) 00:10:55
>>836
志村ー、スレタイスレタイ。

他所行ってらっしゃい。
843デフォルトの名無しさん:2007/07/01(日) 00:11:45
>>839
これはひどい・・・
まさかここまで基地外とは。
844デフォルトの名無しさん:2007/07/01(日) 00:11:53
>>835
くだらないとは失礼だろ
ttp://www.sgnet.co.jp/c/6-4.htm
これもアドレスについて話が出ている
845デフォルトの名無しさん:2007/07/01(日) 00:13:01
>>834
>int *a,b=3;
>printf("b : %p / %d \n",&b,b);
>printf("a : %p / %d \n",a,*a);

*aを表示させようとしている時点で
どこのアドレスを指し示しているのか未定義。
つまり、定義した時に入っているゴミデータを参照している。
基本的にこういうのは忌避するもんだけど。
846デフォルトの名無しさん:2007/07/01(日) 00:13:04
int (A *mp1)
とか書いたら保守するとき大変じゃね?
1個や2個ならいいけどこれがいっぱいあるとさ...
847デフォルトの名無しさん:2007/07/01(日) 00:13:33
831 名前:デフォルトの名無しさん 投稿日:2007/07/01(日) 00:06:19
>>824
テストプログラムとは言え
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・
初期化してないポインタで参照するのは感心せんなぁ・・・

ttp://www9.plala.or.jp/sgwr-t/c/sec10.html
ここでもポインタについてアドレスの話が・・・ざわざわざわっ
848デフォルトの名無しさん:2007/07/01(日) 00:14:12
>>844
人間、抽象的なことより具体的なことのほうが理解しやすいからね。
だからメモリアドレスの話をするのが手っ取り早い。
でもそれは、ポインタを理解するための足がかり。
849デフォルトの名無しさん:2007/07/01(日) 00:14:51
>>814改造して遊んでてふと思ったんですが
メンバポインタってクラスの先頭からのオフセットなんでしょうか?
850デフォルトの名無しさん:2007/07/01(日) 00:15:05
>>845
知っていてわざとやっているに違いないだろ。
汲み取ってあげようよ、その必死な意図を。
851デフォルトの名無しさん:2007/07/01(日) 00:16:20
>>824
すまん、俺、メモリよくわからんが、お前の言っているメモリは何を言ってる
たとえば、ハードのメモリ(の論理アドレス)なのか?
852デフォルトの名無しさん:2007/07/01(日) 00:17:04
>>850
運が悪いと落ちることもあるんだがな・・・。
853デフォルトの名無しさん:2007/07/01(日) 00:18:30
>>849
メンバ変数ポインタはオフセットで実装してある場合が多いだろうね。
だからヌルポインタのビット表現が 0 では困るということで、
ヌルポインタのビット表現が 0 にならない例の 1 つでもある。
854デフォルトの名無しさん:2007/07/01(日) 00:19:49
「#include <stdio.h>はおまじないです」と比べればまだ高尚な部類で、
趣味グラマとしてはそんくらいの理解で十分だろう。
パソヲタに説明するにはちょうどいいしな。

結局は正しい定義を言われて素直にへぇボタン押さなかった必死な子が悪い訳だけど。
855デフォルトの名無しさん:2007/07/01(日) 00:20:25
>>849
そういう実装になっていることが多いし、それが率直な実装だと思う(俺の主観だが)。

>>850
今はそういう問題ではないと思ってあげようよ。824がかわいそうだ。
856デフォルトの名無しさん:2007/07/01(日) 00:20:34
>>846
普通は typedef するだろうけど、
まあこのプログラムでは
ポインタであるということが目立った方がいいんじゃないかな。
857デフォルトの名無しさん:2007/07/01(日) 00:20:39
>>853
そいつは俺も知らなかったな。
やたら更新頻度高くなってからヲチしていたが
初めて参考になった。今後気を付けるわ。
858デフォルトの名無しさん:2007/07/01(日) 00:22:07
メンバ変数ポインタと
メンバ変数のアドレスを入れられた普通のポインタとは別だかんね。
念のため。
859デフォルトの名無しさん:2007/07/01(日) 00:22:45
おまいらよ、C++入門スレに来てるキチガイにメンバ変数ポインタの話は酷じゃね
860デフォルトの名無しさん:2007/07/01(日) 00:23:57
じゃあ、もっと使う可能性の高い
多重継承したクラスのメンバ関数ポインタの話でもするか?
861デフォルトの名無しさん:2007/07/01(日) 00:27:32
もうポインタの話はやめろ。俺が決定的な証拠(原爆)を落としてやるから
ポインタについて実体がアドレスということを否定した香具師は反省しろ
↓の実行結果が物語っているものがわからんのなら、マジでプログラミングなんてやめろ。

#include <iostream>
using namespace std;
int main() {
int *a,b=3;
cout << "a : " << a <<endl;
cout << "*a : " << *a <<endl;
cout << "b : " << b <<endl;
cout << "&b : " << &b <<endl;
a=&b;
cout << "after a=&b " <<endl;
cout << "a : " << a <<endl;
cout << "*a : " << *a <<endl;
return 0;
}
862デフォルトの名無しさん:2007/07/01(日) 00:27:50
>>841
それって本当にメンバ変数ポインタ取るために使ってる?
メンバ関数ポインタのために使ってるのがほとんどじゃね?
863デフォルトの名無しさん:2007/07/01(日) 00:28:24
はいはい、コアダンプコアダンプ。
864デフォルトの名無しさん:2007/07/01(日) 00:29:44
>>861
>>845

本当にお前やめろ
865デフォルトの名無しさん:2007/07/01(日) 00:29:47
>>859
そうやって直接的ではない話で相手がわかってないと思われることを炙り出そうとするのが
お前らのやり方なんだよな。しかし、それをやった自分の方がまったくの無知だったというオチだろ。
大学でな、論理回路やメモリに関する仕組みがわかる実験くらいやるだろ。
お前、KUE-CHIP2 って使ったことあるか?参考までにどういうものか示しておくが。
ttp://www.astem.or.jp/rdt/kuechip2.html
866デフォルトの名無しさん:2007/07/01(日) 00:31:22
>>864
本当にお前がやめろ、痛すぎ。メモリのアドレスすら知らないバカが
電子計算機の基本部分にかかわることを無視して、コードだけしか見えていない
仕組みも知らん奴が口出しするなよ。
867デフォルトの名無しさん:2007/07/01(日) 00:31:23
861は原爆にしてはインパクトが薄いよな
831みたいな余計なあほを露出させるほどの隙があるというかなんというか
868デフォルトの名無しさん:2007/07/01(日) 00:31:57
>>862
boost::lambdaで多用するよ。
メンバ変数へのアクセスは基本的にlambda::bindへ
メンバ変数ポインタとインスタンスを渡す形になる。
869デフォルトの名無しさん:2007/07/01(日) 00:32:05
じゃあメンバ関数ポインタのアドレスと言うかオフセットってどうやってみるんだろう
A { void f() {} };
ってのがあったときに
void (A::*mfp)(void) = &A::f;
ってして
これをint型のポインタにして出力しようとしても駄目だった
あとstatic void f();の時はメンバポインタすら作れなかった

うーんややこしいぜ
870デフォルトの名無しさん:2007/07/01(日) 00:35:15
>>869
>駄目だった
具体的に書こう。何が駄目だったの?当然static_castじゃ無理だよ。?

>static void f();
普通の関数ポインタしか取れないよ。
呼ぶのにクラスのインスタンス不要なんだから。
871デフォルトの名無しさん:2007/07/01(日) 00:35:51
ったく、電子計算機の原理についてまったく知らない奴らが得意気にプログラミングについて
コードを知っているだけで理解した気になっているのか。もう一度お前らに課題を課す。
汎用電子計算機の五大装置について述べよ。んじゃな、あばよ、下を見て叩くだけしか出来ない
低レベルな香具師ら。
872デフォルトの名無しさん:2007/07/01(日) 00:36:19
とりあえず、printfの万能性に期待して、
printf("%p %p %p %p\n", &A::f,-1,-1,-1)とか。
(正確には、%pはsizeof(&A::f)/sizeof(void*)個だけ要るけど。)
873デフォルトの名無しさん:2007/07/01(日) 00:36:52
bind、functionも関数ポインタの悪用・・・もとい応用だな
これ使ってその辺にある戻り値voidの関数を悉くスレッドに出来るのが
boost::threadライブラリで、こいつを参考にしてATLと上手く連携が取れるwindowAPI版作って見ようと思ってたり
874デフォルトの名無しさん:2007/07/01(日) 00:37:50
メンバ関数ポインタのサイズって、
多重継承してたら 8 とかになってたりするんだよな。
メモリアドレスにさらに+αが存在してる。
875デフォルトの名無しさん:2007/07/01(日) 00:38:27
あれか、記憶、演算、入力、出力、制御、とかって奴か。
中学の時に習ったけど、知ってるからどうなのよ、って話だな。
876デフォルトの名無しさん:2007/07/01(日) 00:39:01
>>874
そこら辺はD&Eとかに書いてありそうだな。持ってる人ヨロ
877デフォルトの名無しさん:2007/07/01(日) 00:40:50
>>869
メンバ変数へのポインタは整数型へすら変換することができないことになっている。
ただ、extern "C"を使ったり可変長引数を使えばC++コンパイラを出し抜けるはず。
もっとも、メンバ関数へのポインタは、860も少し指摘しているが、
継承やら仮想関数の場合やらを考慮しないといけないので、
大抵普通のポインタよりサイズが大きい場合がある。

静的メンバ変数は、普通の関数と同じで、ただの関数へのポインタになる。

>>871
入力装置、出力装置、演算装置、制御装置、記憶装置だよな。
順番がおかしいかもしれないが。
そんでもってC/C++の標準規格は、電子計算機の原理なんて
どうでもいいようになっているとか言っていい?
878デフォルトの名無しさん:2007/07/01(日) 00:41:09
VC++ だと仮想継承してると 12 になって、
GCC だと仮想継承してても 8 なんだよな。
最新バージョンではまた違ってるかもしれんが。
879デフォルトの名無しさん:2007/07/01(日) 00:44:28
演算装置と制御装置の違いって何よ。
880デフォルトの名無しさん:2007/07/01(日) 00:44:55
ググレ
881デフォルトの名無しさん:2007/07/01(日) 00:45:34
このせいで、メンバ関数ポインタは void* に渡せないんだよな。
だから、任意のパラメータを取る関数なりなんなりに
直接渡すことはできないんだな。
882デフォルトの名無しさん:2007/07/01(日) 00:46:36
D&E日本語版にはかかれてないね。
禿が言ってるのは、「昔はメンバ関数ポインタなんかなかった。
ところで、無理矢理、thisを第一引数にとる関数ポインタにキャストして
使ってる香具師がいて、こういうのは禁止させたいから、
あたらしくメンバ関数ポインタってのを作ったよ」
ってだけ。
883デフォルトの名無しさん:2007/07/01(日) 00:46:43
>>876
メンバへのポインタという説はあるが、実装についての話は特にない。
884デフォルトの名無しさん:2007/07/01(日) 00:46:46
#include <iostream>
extern "C" {
struct A { void f(){} static void sf(){} };
}
int main() {
void (A::*mpf)(void) = &A::f;
void (*sf)(void) = &A::sf;
std::cout << reinterpret_cast<int*>(mpf);
}
とりあえずコンパイラ(cl.exe)を出し抜くのは無理でした
885デフォルトの名無しさん:2007/07/01(日) 00:48:29
>>882
this をレジスタ渡しすることもあるしな。
886デフォルトの名無しさん:2007/07/01(日) 00:49:13
>884
>>872
887デフォルトの名無しさん:2007/07/01(日) 00:49:46
>>884
俺が考えたのは分割コンパイル。
a.cppでextern "C" void hoge(void (someclass::*)());と宣言して、
b.cppでextern "C" void hoge(long pmf) {}なんて具合に定義するという感じ。
888デフォルトの名無しさん:2007/07/01(日) 00:51:29
ググった。何だこりゃ。こんなん教えて飯食ってるのかな。

制御
 主記憶装置内に保存されているプログラムを読み込み、読み込んだプログラムに従ってコンピュータの各装置に動作を指示します。

演算装置
 制御装置の命令に従って、データに対し演算処理などを行います。制御装置と演算装置を合わせて
CPU(Central Proccessing Unit: 中央処理装置)といいます。

記憶装置
 記憶装置には主記憶装置と補助記憶装置があります。主記憶装置はCPUが読み込むプログラムやデータを保存しておき、
CPUの命令に応じてデータを各装置に送ります。主記憶装置はメインメモリとも呼ばれます。

 主記憶装置は大きな容量のデータは保存することができず、またコンピュータの電源を切るとデータは失われてしまいます。
このような主記憶装置の不便なところを補う役割を果たすのが補助記憶装置です。主記憶装置は補助記憶装置に対して、
必要に応じてデータの書き込みまたは読み込みを行います。
(例) メインメモリ、ハードディスク、フロッピーディスクなど

入力装置
主記憶装置にデータを入力するための装置です。
(例) キーボード、マウス、スキャナなど

出力装置
主記憶装置から送られてきたデータを文字や画像として表示する装置です。
(例) ディスプレイ、プリンタなど
889デフォルトの名無しさん:2007/07/01(日) 00:54:50
ポインタの話はどうでもいいけど
#include <stdio.h>
ってそんなにダメなの?
「これ書くような奴は頭悪い」とか思われるようなものならやめる
890デフォルトの名無しさん:2007/07/01(日) 00:55:55
C++ なら cstdio 使う。
この場合、識別子が std 名前空間内に入ってる。
891デフォルトの名無しさん:2007/07/01(日) 00:57:44
global namespaceに混じるのはありがたくないわな
892デフォルトの名無しさん:2007/07/01(日) 00:58:16
>>888
PGになってから使ったこと無いような言葉ばかりだな
学生ってそんな言葉で電子計算機の話をしてるのか(電子計算機という言葉も、前に使ったの何時かな)
893デフォルトの名無しさん:2007/07/01(日) 01:01:22
理想
<cstdio>
namespace std
{
int printf(const char*, ...);
//..
}
<stdio.h>
#include <cstdio>
using std::printf;
//..

現実
<stdio.h>
int printf(const char*, ...);
//..
<cstdio>
#include <stdio.h>
namespace std
{
using ::printf;
//..
}

OTL
894デフォルトの名無しさん:2007/07/01(日) 01:03:35
stdio.h は C でも使うしねえ。
まあ、神経質に分けてくれてるコンパイラもあるかもしんないよ。
895デフォルトの名無しさん:2007/07/01(日) 01:05:37
>>893
なるほど…意味分かったぜ
896デフォルトの名無しさん:2007/07/01(日) 01:06:29
>>887
出来たけどなんか4263941とかおかしい値になった
やり方がおかしいのかなぁ…
897デフォルトの名無しさん:2007/07/01(日) 01:06:56
>>896
普通のアドレス値じゃね?
おかしい値か?
898デフォルトの名無しさん:2007/07/01(日) 01:07:27

 ⊂( ゚д゚ )  
   ヽ ⊂ )
   (⌒)| ダッ
   三 `J
899デフォルトの名無しさん:2007/07/01(日) 01:07:47
>>893
ワロタ。

>>889 >>893を見た後なら気にせず使えといってみる
900デフォルトの名無しさん:2007/07/01(日) 01:08:47
まあ、どんな実装があるか分からんし、
cstdio で慣れた方がいいと思うよ。
901デフォルトの名無しさん:2007/07/01(日) 01:14:43
>>871
今更だけど、このスレにいるような人間は、
電子計算機の原理や五大機能より、チューリングマシンのほうが馴染み深いのかもしれない。
902デフォルトの名無しさん:2007/07/01(日) 01:19:14
んじゃ、これならおkか?ポインタ”変数”に”格納される値”はアドレスの”番地”とか。
確かにポインタの実体はアドレスってのは不適切とも言えるだろうけど。
ん?もうポインタの話は終わり?そりゃすまんこった
903デフォルトの名無しさん:2007/07/01(日) 01:20:50
ほら、そこの君、そうそう、君だよ君。ん?自分かって?反応した君が君さ。
マウスのポインタって言ったらどうよ?矢印って言う?そりゃOSが便宜上
矢印の形をしたものをマウスのポインタとして用いているだけであって
ポインタって言ったら そこを指し示しているもの であって、さしている場所が実体じゃないよね?
そういう説明ならおkか?
904デフォルトの名無しさん:2007/07/01(日) 01:21:43
ポインタの実体はアドレスだよ。
& だってアドレス演算子って呼ぶし。

でも、メモリアドレスとは限らないけどね。
905デフォルトの名無しさん:2007/07/01(日) 01:22:02
ちと変か。矢印がマウスのポインタの実体ではなく、指し示すために使っているもの
ってか、混乱してきた。ポインタの話すまそ。
906デフォルトの名無しさん:2007/07/01(日) 01:24:43
>>904
なるほど。それでいこう。スレ違いすまそ。
907デフォルトの名無しさん:2007/07/01(日) 01:25:50
// test1.cpp
struct A { int x; void g(){}; void f(){} };
extern "C" { void hoge(void (A::*)(void)); }

int main() {
 void (A::*mpf)(void) = &A::f;
 void (A::*mpg)(void) = &A::g;
 hoge(mpf); hoge(mpg); }

// test2.cpp
#include <iostream>
extern "C" { void hoge(long* pmf) { std::cout << pmf << '\n'; } }
で一応いけましたが、オフセットじゃなくて絶対座標が出ちゃいました
インスタンスが無いのに?って思ったんですがそもそもどういう形で
コードになるかまだよく分からんのでとりあえずおkってことで
助言くれた人tnxc
908デフォルトの名無しさん:2007/07/01(日) 01:27:30
メンバ関数ポインタは普通に関数のメモリアドレスが入ってることがほとんど。
909デフォルトの名無しさん:2007/07/01(日) 01:36:38
アドレスの”番地”
910デフォルトの名無しさん:2007/07/01(日) 01:37:38
TLBの事を言ってるの?
911デフォルトの名無しさん:2007/07/01(日) 01:46:26
>>909
まずいか?住所の番地って言わない?○○町の3−2−4みたいな
その数字の部分って漢字で表現したんだが・・・
912デフォルトの名無しさん:2007/07/01(日) 01:47:28
漢字 > 感じ。また茶化されそうな予感・・・やりづらいね、頭の固い?理系?の方々って。
913デフォルトの名無しさん:2007/07/01(日) 02:44:36
俺俺ポインタ:
ポインタはアドレスを指しているんだよ
その先にあるものシラネ。ひょっとしたら、遠く離れたお前のPCのHDDかもしれんぞ。
覗いたら、お前のプライベートエロ画像丸見えだった。だから、ポインタの実体には注意汁、テヘ
914デフォルトの名無しさん:2007/07/01(日) 05:33:53
ポインタは、理解出来ているが構造体とか理解出来ていない俺がいる。
ポインタ←間接参照だろう?
アドレス云々じゃなくて。
間違っていたらつっこみよろしく。
915デフォルトの名無しさん:2007/07/01(日) 06:27:03
>>914
ポインタは書き換えが可能。
演算も出来る。

ちなみに、間接参照専用の機能が参照という機能ですよ。
916デフォルトの名無しさん:2007/07/01(日) 06:32:05
>>914
> アドレス云々じゃなくて。
またそれか・・・ポインタが持つ情報はアドレスを示すためのものだろ?
番地が表示されるソースが過去ログに出てるでしょうに。
917デフォルトの名無しさん:2007/07/01(日) 07:03:43
>>915
ああ、すまんすまん。
書き換え云々もコミで書いとったが、詳しく書いていない俺が悪いな。申し訳ない。。
参照専用機能は知らんかったがいる人にはいるのかもな。
注意すればいいだけのような気もするが。
>>916
へ?意味が解らんというか無意味な議論にならんか?
>>またそれか・・・ポインタが持つ情報はアドレスを示すためのものだろ?
示しただけでは意味が無いんじゃない?
アドレス先の内容を加工出来ないと・・・。
と思うんだが。
918デフォルトの名無しさん:2007/07/01(日) 07:17:50
>>917
ちなみに参照の利点。

・普通の変数と同じ様に使える(修飾子要らず)。
・ポインタの変わりに参照を引数として渡せる。
・安全性が高い。


そして欠点。

・書き換えが出来ない。
・ポインタとは違うプログラムを書かなければならない(*を外す)。
919デフォルトの名無しさん:2007/07/01(日) 07:18:44
C++にそんな機能があるとは知らなかった
920デフォルトの名無しさん:2007/07/01(日) 07:20:03
>>917
> 示しただけでは意味が無いんじゃない?
いや、だから・・・(絶句)。ポインタをどう使うか?ではなくて
ポインタそのものが何か?って話なんだが・・・ OTL
921デフォルトの名無しさん:2007/07/01(日) 07:28:21
>>920
目的と手段を混同してない?
ポインタがアドレスです。というのは、解ってるし。
それを利用するのも解るけどね。
一応、なんちゃって高級言語なんだからあまり意識しすぎない方がいいと思うんだが。
922デフォルトの名無しさん:2007/07/01(日) 07:32:01
とりあえず突っ込んでおく。過去ログ嫁。ポインタ変数にはアドレスが入っているってのは
過去ログのソースに参照できるものあり。
923デフォルトの名無しさん:2007/07/01(日) 07:34:15
>>922
解っている人間に言っているのか、解っていない人間に向かって言っているのか解らん。
924デフォルトの名無しさん:2007/07/01(日) 07:34:43
どちらにしろ、言語仕様の実装は俺達は知る必要は無いんだから、適当にやろうぜ?
925デフォルトの名無しさん:2007/07/01(日) 07:37:04
>>924
賛成。一応、ふざけていても高級言語なんだから。
926デフォルトの名無しさん:2007/07/01(日) 07:42:46
ポインタの番地が変わるソースも過去ログにあるやん・・・
927デフォルトの名無しさん:2007/07/01(日) 09:09:42
914 名前:デフォルトの名無しさん 投稿日:2007/07/01(日) 05:33:53
ポインタは、理解出来ているが構造体とか理解出来ていない俺がいる。
ポインタ←間接参照だろう?
アドレス云々じゃなくて。
間違っていたらつっこみよろしく。
↑こいつわかってないだろ?
928デフォルトの名無しさん:2007/07/01(日) 09:10:18
わかってなくてもいいじゃん
929デフォルトの名無しさん:2007/07/01(日) 09:18:27
構造体やクラス理解出来ないのに
ポインタだけ理解できる訳無いじゃん
930デフォルトの名無しさん:2007/07/01(日) 09:28:47
ポインタ=アドレス+型情報だけどな。
931デフォルトの名無しさん:2007/07/01(日) 09:42:07
ねねね、メンバ変数へのポインタのアドレスって
アセンブラだとどうやって表現してるの?
932デフォルトの名無しさん:2007/07/01(日) 10:26:32
thisからの相対アドレスじゃないの
933デフォルトの名無しさん:2007/07/01(日) 10:27:43
that
934デフォルトの名無しさん:2007/07/01(日) 11:01:36
>>927>>929
ん〜>>914だけど、解っているんだから仕方ない。
概念的には、ポインタ内のアドレス先にアクセスする。という事だろう?
それ以上の事は必要な時に覚えればよかんべ。と思っている。
俺の場合、所詮、趣味だしな。
935デフォルトの名無しさん:2007/07/01(日) 11:04:38
お前誰やねん、914は俺だけど。
936デフォルトの名無しさん:2007/07/01(日) 11:05:51
俺が真の914です
937デフォルトの名無しさん:2007/07/01(日) 11:07:23
>>935>>936
じゃあ、>>914トリオでも組むか?
面倒くせー。
938デフォルトの名無しさん:2007/07/01(日) 11:08:13
なんでこの板って ID 出す設定じゃないんだろうな。
出た方が便利だろうに。
939デフォルトの名無しさん:2007/07/01(日) 11:09:07
習得難易度の問題じゃなくて
密接な関係があるのにポインタだけ理解ってのはねーよ。
ベクトル分かんないが数学マスターしたぜ!、みたいな感じ。
昨晩の害吉程度の知識しか持ってないと思う。
940デフォルトの名無しさん:2007/07/01(日) 11:11:55
理解して無いけどポインタを使った処理はまぁまぁ使ってる程度でいいじゃんもう
大体そういう細かいところは躓いた時に必死で調べて理解するもんだし
最初からそんな細かいところまでやってたらすぐに挫折するぜ
941デフォルトの名無しさん:2007/07/01(日) 11:19:05
>>939
>>914のその一だが。
いや、俺C++を理解したとは書いていないから、勘違いされても困る。
勉強中なんだ。
ポインタは解っている。ほかは、おいおい解るかもしらん。
その程度だって。
942デフォルトの名無しさん:2007/07/01(日) 11:22:31
>>914の3ですが参照とかの方をよく使っててポインタあまり使わないから
動的確保した構造体のポインタの動的多次元配列とかされると
頭がパニくってエラー多発させちゃいます
943デフォルトの名無しさん:2007/07/01(日) 11:26:35
ところで、次スレいる?
いや要らないと俺は思っているんだけど。
944デフォルトの名無しさん:2007/07/01(日) 11:27:36
>>1 見れば要らないのはわかるよな?
945デフォルトの名無しさん:2007/07/01(日) 11:32:58
質問スレと合流ってことで話しついたんじゃないの?
946デフォルトの名無しさん:2007/07/01(日) 11:41:54
一応改めて書いておかないと、誰か立ててしまうかもと心配になった。
947デフォルトの名無しさん:2007/07/01(日) 14:47:03
C++でAPIを作成したとして、それをどのように配布したらいいかのガイドラインとかありませんかね?
948デフォルトの名無しさん:2007/07/01(日) 14:48:39
んなもんねぇ。
強いて言えば糞GPLだけは選ぶなってことだけだな。
あとはいくつか公開されてるライブラリ眺めて
ドキュメントの書き方とかまねてみればよし。
949デフォルトの名無しさん:2007/07/01(日) 15:07:34
>>948
どうもです。
いろいろなライブラリを参考にして真似ようと思います。
950デフォルトの名無しさん:2007/07/01(日) 16:51:53
C++を捨ててCに書き直す
951デフォルトの名無しさん:2007/07/01(日) 16:58:29
Cを捨ててC++に生きる
952デフォルトの名無しさん:2007/07/03(火) 15:31:24
書を捨てて街に出る
953デフォルトの名無しさん:2007/07/03(火) 15:39:44
仕事を捨て引き篭もる
954デフォルトの名無しさん:2007/07/03(火) 23:51:18
俺は
ソースコードを右からうけて左にバグつきで受け渡す。
955デフォルトの名無しさん:2007/07/04(水) 06:58:08
>>954
バグは取り除いて右に戻してください、おながいします。
956デフォルトの名無しさん:2007/07/04(水) 15:00:25
客から来た仕様をPGへ受け流すの歌〜
957デフォルトの名無しさん:2007/07/04(水) 15:43:46
出力が変です どうしたらいいですか?? 空白で改行されます

#include <fstream>
#include <string>
using namespace std;

int main(int argc,char *argv[]){
if(argc!=2)return 0;
fstream fp(argv[1],ios::in);
if(!fp)return 0;
string str;
while(!fp.eof()){
fp >> str;
cout << str<<endl;
}
return 0;}

●入力ファイル
(名詞 (普通名詞 ((読み しめきり)(見出し語 〆切 (しめ切 1.6) (しめきり 1.6)))))

●出力
(名詞
(普通名詞
((読み
しめきり)(見出し語
〆切
(しめ切
1.6)
(しめきり
1.6)))))
958デフォルトの名無しさん:2007/07/04(水) 15:45:11
そりゃ fp >> str; は空白で区切られた文字列を読み込む処理だから当たり前じゃ・・・。
getline(fp, str); みたいなことがしたいの?
959957:2007/07/04(水) 15:45:33
fp >> str; のところで既に改行されているようです・・・どうしたら
960957:2007/07/04(水) 15:46:25
>>958
サンクス それでいってみます
961デフォルトの名無しさん:2007/07/04(水) 15:52:12
>>957
cout << str<<endl; < 志村ー endl endl
962デフォルトの名無しさん:2007/07/04(水) 15:58:59
追加質問なんですが・・三行目でエラーになるようです 実行時にです なぜでしょうか

getline(fp, str);
i=str.find( "((読み ");
str=str.substr( i+7 );
cout << str;
963デフォルトの名無しさん:2007/07/04(水) 16:04:39
ファイルとプログラムの文字コードが揃ってないとか?
i が npos になってないかどうか確認とかした?
964デフォルトの名無しさん:2007/07/04(水) 16:09:47
ここへ貼り付けるため簡略化したら動きました どうしたらいいでしようか?

#include <iostream>
#include <string>
using namespace std;

int main(){
string str="(名詞 (普通名詞 ((読み しめきり)(見出し語 〆切 (しめ切 1.6) (しめきり 1.6)))))";
int i=str.find( "((読み ");
str=str.substr( i+7 );
cout << str;
return 0;
}
965デフォルトの名無しさん:2007/07/04(水) 16:13:38
>>963
自己解決しました
出力が何も出ないので、はじめでエラーになっているのかと
おもったら一番最後で-1を返してきてエラーになっていました
966デフォルトの名無しさん:2007/07/04(水) 16:31:34
解決してるのかどうかよく分からないけど、まあいいや。
とりあえず LISP 風の文法解析したいのなら、
もうちょっと真面目に構文解析の勉強した方がいいと思う。
967デフォルトの名無しさん:2007/07/04(水) 16:49:41
追加です

コピペしたファイルだと
(名詞 (普通名詞 ((読み しめきり)(見出し語 〆切 (しめ切 1.6) (しめきり 1.6)))))


読みが検索できるのですが、元々の巨大なファイルだと失敗して-1を返します
文字コードが違うのでしょうか??どう対処したらいいでしょうか??
968デフォルトの名無しさん:2007/07/04(水) 16:53:37
「 ((」をサーチするようにしたら成功しました すみません
969デフォルトの名無しさん:2007/07/04(水) 16:56:22
読みだけ分かりゃいいの?
970デフォルトの名無しさん:2007/07/04(水) 17:23:31
半角カタカナ、全角カタカナのstring型をすべて全角ひらがなへ変換するにはどうしたらいいですか
971デフォルトの名無しさん:2007/07/04(水) 17:36:36
iccインストールしたんですけどvc++2003.netに統合できないんです。
誰かわかる人いたら教えてください。
お願いします。
972デフォルトの名無しさん:2007/07/04(水) 17:37:28
>>970
地道に変換する
973デフォルトの名無しさん:2007/07/04(水) 17:50:37
>>972
ひらがな、カタカナが混じっているやつを一度にひらがなへ変換できるやつはないですか
974デフォルトの名無しさん:2007/07/04(水) 17:57:37
ほかは知らないが、WindowsならLCMapStringがある。
975デフォルトの名無しさん:2007/07/04(水) 18:05:29
>>974
サンクス
976デフォルトの名無しさん:2007/07/04(水) 19:08:46
>>974
サンクス 出来ました!

#include <iostream>
#include <string>
#include <winnls.h>
#pragma comment(lib, "kernel32.lib")
using namespace std;

string henkan(string text){
int size =text.size()*2+1;
char *s = new char[size];
LCMapString(GetUserDefaultLCID(),LCMAP_FULLWIDTH|LCMAP_HIRAGANA,
text.c_str(), text.size()+1,s,size);
string ss=s;return ss;
}

int main(){
string sr="ヘンカンシテミルヨ ドウナッタヨ???";
cout << henkan(sr)<<"\n";
}
977デフォルトの名無しさん:2007/07/04(水) 19:14:28
チェックするなら、半角カナでも濁音半濁音入れた方がいいと思うよ。
978デフォルトの名無しさん:2007/07/04(水) 19:17:31
"ベンキョウシテミルオ ドウナッタヨ???"

べんきょうしてみるお どうなったよ???


979デフォルトの名無しさん:2007/07/04(水) 19:20:58
ヴってどうなるんだ?
980デフォルトの名無しさん:2007/07/04(水) 19:22:34
ヴヴヵヶ
981デフォルトの名無しさん:2007/07/04(水) 19:55:09
たびだひすみません

coutで"あ"を10進数で表示させるにはどうしたらいいのでしょうか??
982デフォルトの名無しさん:2007/07/04(水) 20:06:01
これでいいんでしょうか?値がマイナスになるんですが

string str="あい";
cout << (char)str[0]+((char)str[1]<<8);
983デフォルトの名無しさん:2007/07/04(水) 20:13:25
ヒント: unsigned char
984工房初心者:2007/07/04(水) 20:16:15
えっと、宿題で出たんですけど、まったくわからないんで・・・C言語のプログラムです。
スーパーのレジの処理を行うプログラム。
品物の値段を入力していき、最後に0(ゼロ)を入力すると消費税を加算した金額を表示する。
さらに、預かり金を入力すると、お釣りを表示する。
<出力結果例>
いらっしゃいませ
XXX←値段を入力
小計=XXX円
XXX←値段を入力
小計=XXX円

小計=XXXX円 消費税XX円 合計金額XXXX円
お預かり金額(入力させる)
お釣り XXX円(お釣りは1万円何枚、5000円何枚などを表示させる)
985デフォルトの名無しさん:2007/07/04(水) 20:17:19
>>983

順序どおりのはずなのに値が離れています・・これであっているんでしょうか

string str="ぁあ";
cout << (unsigned char)str[0]+((unsigned char)str[1]<<8)<<"\n";
cout << (unsigned char)str[2]+((unsigned char)str[3]<<8)<<"\n";

40834 
41090
986デフォルトの名無しさん:2007/07/04(水) 20:18:51
>>985
ヒント: ビッグエンディアン的に格納されている
987デフォルトの名無しさん:2007/07/04(水) 20:22:44
>>986
こっちにしたに良い具合になりましたよ サンクス!

cout << (unsigned char)str[1]+((unsigned char)str[0]<<8)<<"\n";
cout << (unsigned char)str[3]+((unsigned char)str[2]<<8)<<"\n";

33439
33440
988デフォルトの名無しさん:2007/07/04(水) 21:02:22
>>984
丸投げするつもりなら
C/C++の宿題を片付けます 92代目
http://pc11.2ch.net/test/read.cgi/tech/1183511364/l50
989デフォルトの名無しさん:2007/07/04(水) 21:03:08
 
990デフォルトの名無しさん:2007/07/04(水) 21:03:48
 
991デフォルトの名無しさん:2007/07/04(水) 21:04:26
 
992デフォルトの名無しさん:2007/07/04(水) 21:04:56
 
993デフォルトの名無しさん:2007/07/04(水) 21:05:26
 
994デフォルトの名無しさん:2007/07/04(水) 21:07:42
 
995デフォルトの名無しさん:2007/07/04(水) 21:08:23
 
996デフォルトの名無しさん:2007/07/04(水) 21:08:54
 
997デフォルトの名無しさん:2007/07/04(水) 21:09:26
 
998デフォルトの名無しさん:2007/07/04(水) 21:10:44
999デフォルトの名無しさん:2007/07/04(水) 21:13:57
荒らしは止めたまえ
1000デフォルトの名無しさん:2007/07/04(水) 21:14:43
埋めるんなら↓の注意書きを

>>943-945
このスレは質問スレと統合されます
次スレはありません
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。