new演算子を用いてクラスの型のデータ格納容量分メモリを確保し確保したメモリにデータを代入してみます

ソーラー「さて、さて それでは


クラスの型のデータ格納容量の意味が分かったところで


new演算子を用いて


次のようにクラス宣言された


クラスSuutiの型のデータ格納容量分のメモリ


を動的に確保してみたいと思います」


👇

class Suuti{


public:


int x;

float y;


public:


void suutidisplay();


};



void Suuti::suutidisplay() {


cout << x << "\n";

cout << y << "\n";

}


ソーラー「そのプログラムは


new演算子をクラスSuutiの型に用いた


次のようになります


#include <iostream>


using namespace std;


class Suuti{


public:


int x;

float y;


public:


void suutidisplay();


};


void Suuti::suutidisplay() {


cout << x << "\n";

cout << y << "\n";

}


int main() {


Suuti* a;


a = new Suuti;


a->x = 100;

a->y = 1.11;


cout << a->x << "\n";

cout << a->y << "\n";


return 0;


}


プログラムの実行結果


100

1.11


マックス「??


俺達なにやってるんだったけ?」


ソーラー「このプログラムでは


まず


aのクラスSuuti*型のポインタ変数宣言


Suuti* a;


により


クラスSuuti*型のポインタ変数aを生成しています。


そして


a = new Suuti;


の命令文が実行されていますね


まず


new Suuti


により


クラスSuutiの型に対応する8バイト分のメモリが


動的に確保されています


このとき


new Suutiには


動的に確保されたメモリのアドレスが戻り値として返されることになります


ですので


a = new Suuti;


が実行されると


Suuti*型のポインタ変数aに


動的に確保されたメモリの(メモリを代表する)アドレスが代入されることになります。


このとき動的に確保されたメモリには


ポインタ変数aにアロー演算子を用いた


a->x

a->y


を用いてアクセスし


数値データを代入することができます。


このプログラムでは


a->x = 100;

a->y = 1.11;


のように


数値データ


100

1.11


が代入されています


そして


cout << a->x << "\n";

cout << a->y << "\n";


の実行により


コマンドプロンプト画面に


100

1.11


が表示されています」



マックス「わかった


a->x のデータを格納する型はint型で

a->y のデータを格納する型はfloat型なので


a->x

には

100


a->y

には

1.11


を代入しているというわけだ」


ソーラー「そうなんです


そして


動的に確保されたメモリに


格納されたデータは


自分の好きなタイミングで


動的に確保されたメモリを解放し


動的に確保されたメモリに


格納されたデータを消去することができるのでした


好きなタイミングで


動的に確保されたメモリを解放するために


クラスSuuti型に対応する8バイト分のメモリを


動的に確保したというわけですね😊」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る