2016-12-08 3 views
-4

私は単純なクラスを持っています。クラスのオブジェクトを作成しました。オブジェクトへのポインタを使用してクラスメンバーにアクセスしたかったのです。 私は利用可能な2つの方法があることを知っています:ptr-> memberと(* ptr).member 私は何をしたいですか? Cのように、structメンバにアクセスできるポインタをインクリメントするだけで、structメンバ名を与える必要はありません。メンバー-1から始まり、ポインタを増やし、メンバー2にアクセスするのと同じです。ポインタを使ってC++でクラスのメモリマップを見る方法

私は知っています:このコードは、< <は演算子がオーバーロードされていてコンパイルしないと考えています。しかし、メンバー名を与えずに - >、(*)を使用して、逆参照を使用してクラスメンバをプリントする方法&ポインタの増分。

#include<iostream> 
using namespace std; 
class base{ 
public: 
    int a 
    char b; 
    base(){a=10;b='a';} 
    void test(base *ptr){ 
     cout<<"Member-1="<<(*ptr); 
     ptr++; 
     cout<<"Member-2="<<(*ptr); 
    } 
}; 
int main(){ 
    base objB; 
    objB.test(&objB); 
} 
+2

コードの書式設定を修正してください。 –

+1

'ptr ++'はあなたに次のメンバーを与えません。次の 'base'に移動します。ちょうどそれがCのように。 –

+0

あなたはこれで成し遂げたいのですか? – MagunRa

答えて

0

ポインタを増分すると、未定義の動作につながる可能性があります。 あるクラスまたは構造体の次のものがそのすぐ隣にあることを保証できないので、ここでのポインタの増分はかなり危険です。あなたのクラス内の変数にも同じことが起こります。 あなたはクラスを使用しているので、あなたは経由メンバーにアクセスする必要があります。

cout<<"Member-1="<<ptr->a; 
cout<<"Member-2="<<ptr->b; 
0
#include <iostream> 

using namespace std; 
    class MyClass{ 
    int i; 
    char c; 
    public: 
     MyClass(int i , char c){ 
      this->i = i; 
      this->c = c; 
     } 
     friend const ostream& operator<<(ostream& out, const MyClass& obj) 
     { 
      out << obj.i <<endl; 
      out << obj.c; 
     return out; 
     } 
    }; 
int main(){ 
    MyClass mClass(50,'C'); 

    cout << mClass; 
    return 0; 
} 

は、あなたが最初にあなたのコードのすべての構文エラーを修正していただけますか? クラスオブジェクトのメンバ変数を反復することはできませんが、オブジェクトの配列を反復処理することはできます。

objectName-> memberVarまたは(* objectName).memberVarを使用せずにメンバ変数の値を出力したい場合は、 "< <"をオーバーロードして、オーバーロードするメソッド内で挿入操作を実行できます。ストリーム挿入演算子。

関連する問題