オブジェクトポインタについて – プログラミング – Home

オブジェクトポインタについて
 
通知
すべてクリア

[解決済] オブジェクトポインタについて


あかめ
 あかめ
(@あかめ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

C++の学習をしているのですが疑問点が発生しました。
ご存知の方どうぞご教授くださいませ。
内容はPG1ではアロー演算子で参照するのにPG2ではどうしてドット演算子で参照するのか
ということが分らないです。
どうぞよろしくお願いします。

PG1:
class samp{
int i, j;
public:
void set_ij(int a, int b) { i = a; j = b; }
int get_product() { return i * j; }};
int main(){
samp *p;
p = new samp; // オブジェクトを割り当てる
if(!p) {
cout << メモリ割り当てエラー\n;
return 1; }
p->set_ij(4, 5);   // ここの個所
cout << 積は: << p->get_product() << \n;  // ここの個所
return 0;
}

PG2:
class samp {
int i, j;
public:
void set_ij(int a, int b) { i = a; j = b; }
int get_product() { return i * j; }
};
int main() {
samp *p;
int i;
p = new samp [10]; // オブジェクト配列を割り当てる
if(!p) {
cout << メモリ割り当てエラー\n;
return 1; }
for(i = 0; i < 10; i++) p[i].set_ij(i, i); //ここの個所
for(i = 0; i < 10; i++) {
cout << 積 [ << i << ] は:;
cout << p[i].get_product() << \n;} // ここの個所
delete [] p;
return 0;


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

p[i] はポインタではなく、ポインタが示す要素 *(p+i) だからです。

あえてアロー演算子で参照するなら:
(p+i)->get_product()
あるいは
(&p[i])->get_product()


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

επιστημηさんが既に回答してますが、表現をかえたらこんな感じでしょうか。

class Csamp
{
public:
int a ;
};

int main()
{
Csamp samp ;
Csamp* pSamp = &samp ;

// 下記は結局同じ変数の表示を行っている
printf( オブジェクトの実体を用いてメンバ変数を指定 %d, samp.a ) ;
printf( オブジェクトのポインタを用いてメンバ変数を指定 %d, pSamp->a ) ;
}


返信引用
あかめ
 あかめ
(@あかめ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

επιστημηさん、んさんご返答どうもありがとうございます。

PG1の p = new samp; がオブジェクトポインタになって
PG2の p = new samp [10]; がオブジェクトになるのは
どうして


返信引用
あかめ
 あかめ
(@あかめ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

επιστημηさん、んさんご返答どうもありがとうございます。

上記の文途中で書き込みを行ってしまし申し訳ありません。
PG1の p = new samp; がオブジェクトポインタになって
PG2の p = new samp [10]; がオブジェクトになるのは
どうしてなのでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> PG1の p = new samp; がオブジェクトポインタになって
> PG2の p = new samp [10]; がオブジェクトになるのは

違います。どちらもポインタです。

char* str に対し str[i] の型は(*が取れて) char となります。それと同じ。

# p[i] は *(p+i) の簡略形と思えばいいでしょう。


返信引用
あかめ
 あかめ
(@あかめ)
ゲスト
結合: 22年前
投稿: 11
Topic starter  

επιστημηさんありがとうございます。

これは決まり事として覚えないといけないですね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

> これは決まり事として覚えないといけないですね。

'カッコつけたら星が取れる' と、そんだけ覚えれば十分。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました