オブジェクトのポインタ

オブジェクトのポインタ

C言語ではポインタは非常に便利な道具でした。関数に配列情報を送る際に使用しました。このポインタという概念はオブジェクトにも出てきます。オブジェクトでのポインタを利用できるようになるとプログラミングの幅が広がるので、マスターしたいところです。ここでは、オブジェクトのポインタの使い方をコード例を通して解説します。

オブジェクトにおけるポインタ

では、オブジェクトのポインタをプログラムで使いながら学んでいきます。早速、以下のプログラムを組んでみてください。

プログラム

#include <iostream>
using namespace std;

class myclass{
    int i;
  public:
    myclass(int x);
    int show();
};

myclass::myclass(int x){
    i=x;
}

int myclass::show(){
    return i;
}

int main(void){
    myclass ob(10);
    myclass *p;
    p=&ob;
    cout<<"ポインタによる出力:"<<p->show()<<"\n";
    cout<<"オブジェクトの出力:"<<ob.show()<<"\n";
    return 0;
}

実行すると以下のように表示されます。

ポインタによる出力:10
オブジェクトの出力:10

解説

オブジェクトのポインタは

クラス名 *オブジェクト名;

と宣言できます。

ここでは、通常のオブジェクトを

myclass ob(10);

とし、ポインタを

myclass *p

として定義しています。そして、

p=&ob;

よりobのアドレスをポインタに代入しています。

オブジェクトのときは、ob.show()のように「.」を使用していました。一方、ポインタの場合は、

p->show()のように「->」を使ってプロパティやメソッドを指定します。

このように多少記述が異なるので記憶しておきましょう。

thisポインタについて

上記のプログラムで

myclass::myclass(int x){
    i=x;
}

とあります。これだけみるとiが何なのかよくわかりませんね。実はこのコードを厳密に書くと

myclass::myclass(int x){
    this->i=x;
}

となります。ここでthisという見慣れないものが出てきます。これはthisポインタと呼ばれるものです。thisポインタは実行されたオブジェクトのポインタを示しています。今回は

    cout<<"ポインタによる出力:"<<p->show()<<"\n";

なら、thisはpを示し、

    cout<<"オブジェクトの出力:"<<ob.show()<<"\n";

なら、thisはobのポインタ&obを示します。

myclass::myclass(int x){
    i=x;
}

のようにthisポインタは省略してもかまいません。ただ、

thisポインタが省略されているという意識は持つようにしておくといいでしょう。

ちなみに

int myclass::show(){
    return i;
}

も厳密には

int myclass::show(){
    return this->i;
}

です。

 

著者:安井 真人(やすい まさと)