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

このエントリーをはてなブックマークに追加
>>793
ということはこのようなポインタを使用しない場合は特にif文を使用する必要はなく、
仮にobj3 = obj1 = obj2というようなイコールを続けて使うことをしない場合は*thisを返す必要はないのでしょうか?
796786:04/09/03 06:52
>>790-792
御解答ありがとうございます。
doubleの精度が15桁とはいえ、48桁程度までは数字が出てきているため、
意味があるのだろうかと思っていたのですが、信用できない数字なのですね。
797デフォルトの名無しさん:04/09/03 07:18
>>793
もひとつ質問で、obj1 = obj1のような同じオブジェクトを代入した場合はどのようなことが起こるのでしょうか?
予想ではif(this==&original){return *this;}でreturn *thisをするが同じように格納する場所がないから捨てられる・・・と思うのですが。。
>>797
マンドクセからEffectiveC++でも買ってこい。
799デフォルトの名無しさん:04/09/03 08:28
結構高いのにたいした事ない
絶対熊田曜子の写真集のほうがヌケルぞ
>>799
別にヌキたいわけではない
801デフォルトの名無しさん:04/09/03 09:27
たいしたことないのはMoreがつく奴
802デフォルトの名無しさん:04/09/03 09:39
boostのuBLASで行列の乗算A*Bを行うプログラムを
VC++でコンパイル実行すると、結果はちゃんとでるんですが、
エディタ画面に戻って「prod」と入力するとエディタが
ハングアップ状態になってしまいます。
こんな現象にであった人いませんか?

環境 Windows XP Home Edition, VC++ NET 2003 Standard, boost_1_31_0
intが32bitの環境で
int*int=int64で結果を受け取りたいのですが、
何か良い方法無いでしょうか?
804デフォルトの名無しさん:04/09/03 09:42
>>803
intじゃ無理
キャストするなどしてint64にしないと無理。
>>803
VCなら専用の関数があるけどな。
.netのVCでダイアログを作成するとなぜかCDHtmlDialogの派生で勝手に作られてしまいます。
以前はCDialogの派生だったと思いますが、これからはこっちの方が正しいのでしょうか?

あと、作るたびにCDialogの派生に変更するのが面倒なのですが、デフォルトで
CDialogの派生で作るようにすることはできないでしょうか?

.netが以前のVisualStudioに比べてあまりに変わりすぎてるのでどうもわかりません。
教えてください。
>>806
自己解決です。作るときにたまたまリストのトップであるCDHtmlDialogが選ばれてただけでした。
>>795
> ということはこのようなポインタを使用しない場合は特にif文を使用する必要はなく、
メンバにポインタが無くても,他にユーザ定義のクラス(Aとしましょう.)がメンバにあって,
Aが同じ問題を抱えていた場合に問題になります.
Aを変更できるならAを修正するだけですが,
Aが変更できない場合はAを保持してるクラスで対処する必要があります.

> 仮にobj3 = obj1 = obj2というようなイコールを続けて使うことをしない場合は*thisを返す必要はないのでしょうか?
OKです.その場合宣言では返値の型にvoidを指定しましょう.
ただ組み込み型と互換がなくなるのでお薦めしません.

それと,代入演算子の引数(コピーコンストラクタもですが)はconstを付けましょう.788の例だと
Myclass &Myclass::operator=(const Myclass& original) {...}
こんな感じ.
質問があります。

class Vector {
double* data; int n;
public:
Vector(int n0) {
data = new double[n0];
for (int i=0;i<n0;i++){
data[i]=0;
}
n = n0;
}
void put(int i, double d) {
data[i] = d;
}
};
class anime{
public:
static Vector tt(3); //static double m;
};
main(){
anime::tt.put(0,4); //m=10;
}
上記のように、class animeの中でVector classのインスタンスttを、staticにして、それを
別のところで操作しようとしたら、「構文エラー:定数」というエラーがでてしまいます。
double だとエラーがでないのに、上記Vectorでエラーがでる理由とエラーの意味がわかりません。
javaではこういうことはできてて良くやっていたのですが、c++だとできないのでしょうか?

>>809
class anime {
public:
static Vector tt;
anime() : tt(3) {}
};
それよりVectorはoperatorを使えよ。
>>810
それだとC2438
「静的なクラスデータを初期化するのに、コンストラクタが使われています。」
になったぞ。

class anime{
public:
static Vector *tt;
};

Vector *anime:ptt = new Vector(3);

int main()
{
anime::tt->put(0,4);
return 0;
}

俺にはこれしか思いつかない…
812811:04/09/03 22:27
誤記訂正
Vector *anime:tt = new Vector(3);
>>809
-class anime{
-public:
-static Vector tt(3); //static double m;
-};
+class anime{
+public:
+ static Vector tt;
+};
+Vector anime::tt(3); //static double m;
814811:04/09/03 22:47
それで良かったのか…。
ありがとう、勉強になりました。
815デフォルトの名無しさん:04/09/03 23:26
>>808
ありがとうございます
816デフォルトの名無しさん:04/09/04 10:08
Exeファイルを作成できる、コンパイラってありますか?
>>816
あるよ
デフォルトでLinux用のExeファイルを作成するコンパイラってありますか?
819デフォルトの名無しさん:04/09/04 10:44
>>818
リンカならあるけど。
vctkで
do {
 int a = ...;
} while(a);
が通るんだけど、これっておかしくない?
べつに。
おかしくない書き方をこちらがやればいいだけだ。
そりゃーおかしいなw
int a = 0;
do {
int a = 1;
} while (a);
824デフォルトの名無しさん:04/09/04 17:36
テキストデータをリソースに追加してそこから文字を読み込みたいのですがやりかたがわからないです
825デフォルトの名無しさん:04/09/04 17:38
C/C++にはリソースなんて概念はありません
>>824
おとなしく.txtよみこんでろlwkじぇっあwks
LoadString
>>825
FILE*とかメモリとか、リソースじゃないんですか?
FILE*とかメモリにテキストデータを追加するのか?
ぬるぽの出番ですか?
831デフォルトの名無しさん:04/09/04 18:34
いえ
  ___   ガッ
/___|ミ      ガッ
   .||  ヾ ミ 、      ガッ
   ∩_∧/ヾヽ
   | ,| ゚∀゚). .|  |;,      ガッ
  / ⌒二⊃=|  |∵.
 .O   ノ %`ー‐'⊂⌒ヽ  ガッ
   ) ) ) )~ ̄ ̄()__   )  ←>>830
  ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
class A{
:public
static double* a;
};
double* A::a=new double[3];
a[0]=1;

上のコードのように、静的なメンバ定数であるaという配列を初期化する際に
そのaの成分a[0]をある値に初期化したいのですが、a[0]=1の部分でエラーになります
どうしても上のクラスの中でa[0]の成分を設定したいのですが、無理でしょうか?
>>833
class A{
public:
static double* a;
};
double* a_init (){
double* result=new double[3];
result[0]=1;
return result;
}
double* A::a=a_init ();
835デフォルトの名無しさん:04/09/04 23:59
腐れ先輩のコードを保守しなければならないのが会社だが、
class SputterProcess
{
...
public:
virtual SputterProcess operator=(const SputterProcess&);
};
ってのがある。
virtualなoperator=()ってなに?
836デフォルトの名無しさん:04/09/05 00:00
まちがえた
× virtual SputterProcess operator=(const SputterProcess&);
○ virtual SputterProcess& operator=(const SputterProcess&);
>>836
そういう方には
「この腐ったイカめ。私の床に落ちた精液でも舐めてなさいよ」
と、いってやればいい。
838デフォルトの名無しさん:04/09/05 00:40
ヤラナイカって言ってやれば??
>>835
ひょっとして派生側で挙動を変えてるとか
840デフォルトの名無しさん:04/09/05 00:48
>>839
C++の入門書を読み直しましょう
The AMANOJA9さんサイコーです。
>>840
なんで?
843デフォルトの名無しさん:04/09/05 01:49
virtuaなメンバ関数はポインタを通して呼び出されて
はじめて意味があるんだよ
>>843
>virtuaなメンバ関数はポインタを通して呼び出されて
>はじめて意味があるんだよ
?????????