cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.
オブジェクト指向プログラミング(4) 静的分析(2)
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
Step-by-Step Guide on How to Start ALICE Analysis
アルゴリズムとプログラミング (Algorithms and Programming)
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
アルゴリズムとデータ構造 2011年6月13日
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
プログラミングII 第 7 回 オブジェクトの配列 New, delete 参照 田向.
構造体 構造体, 構造体とポインタの組み合わせ,.
補足説明.
第2回 Microsoft Visual Studio C++ を使ってみよう
~手続き指向からオブジェクト指向へ[Ⅱ]~
C言語講座 第3回 ポインタ、配列.
ソフトウェア工学 知能情報学部 新田直也.
プログラミング言語入門 手続き型言語としてのJava
Microsoft Visual Studio 2005 の使い方
Cプログラミング演習 第6回 ファイル処理と配列.
アルゴリズムとプログラミング (Algorithms and Programming)
情報工学演習I 第12回 C++の演習4(インライン展開).
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
コンパイラの解析 (3) クラスとインスタンスの初期化.
Cプログラミング演習.
Cプログラミング演習 第7回 メモリ内でのデータの配置.
第11週:super/subクラス、継承性、メソッド再定義
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
Cの実行モデル.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
2013年度 プログラミングⅡ ~ はじめてのプログラミング ~.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
第8回放送授業.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造 2012年6月11日
ファイルの読み込み, ファイルからのデータの取り出し, ファイルの書き出し
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
Chapter 5 5.5 thisキーワード 5.6 インスタンス変数とインスタンスメソッド 結城 隆
さまざまなプログラミング言語, オンライン開発環境
JAVA入門⑥ クラスとインスタンス.
Visual Studio 2013 の起動と プロジェクトの新規作成 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
extern の意味 (C プログラミング演習,Visual Studio 2019 対応)
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
cp-3. 計算 (C プログラミング演習,Visual Studio 2019 対応)
フレンド関数とフレンド演算子.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
演算子のオーバーロード.
Cp-1. Microsoft Visual Studio 2019 C++ の使い方 (C プログラミング演習,Visual Studio 2019 対応) 金子邦彦.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
四則演算,変数 入力文,出力文,代入文, ライブラリ関数
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門) https://www.kkaneko.jp/cc/cpp/index.html 金子邦彦

クラスとオブジェクト ball-2 ball-1 1 3 4 ball-4 2 5 ball-3 3 4 Ball クラス

例題1.オブジェクトのメモリアドレス表示 Ball クラスのオブジェクトを3個生成し,それぞれ のメモリアドレスの表示を行う オブジェクトを生成したら,オブジェクトアドレス は,ポインタ変数に格納する

ソースコード ファイル名: Ball.h #pragma once class Ball { public: double x, y; Ball( const double x, const double y ); Ball( const Ball& ball ); Ball& operator= ( const Ball& ball ); ~Ball(); double distance_to_0() const; }; 属性(メンバ変数ともいう) コンストラクタ, デストラクタ (第1回資料の例題2をもとに,  属性を public に変更)

ソースコード ファイル名: Ball.cpp (第1回資料の例題2と同じ) #include "Ball.h" #include <math.h> Ball::Ball( const double x, const double y ) : x( x ), y( y ) { /* do nothing */ } Ball::Ball( const Ball& ball ) : x( ball.x ), y( ball.y ) Ball& Ball::operator= (const Ball& ball ) this->x = ball.x; this->y = ball.y; return *this; Ball::~Ball() double Ball::distance_to_0() const return sqrt( ( this->x * this->x ) + ( this->y * this->y ) ); (第1回資料の例題2と同じ)

ソースコード ファイル名: main.cpp -> による属性アクセス #include <stdio.h> #include "ball.h" int main( int argc, char** argv ) { Ball* b1 = new Ball( 3, 4 ); Ball* b2 = new Ball( 1, 1 ); Ball* b3 = new Ball( 3, 4 ); fprintf( stderr, "b1: %f, %f\n", b1->x, b1->y ); fprintf( stderr, "b2: %f, %f\n", b2->x, b2->y ); fprintf( stderr, "b3: %f, %f\n", b3->x, b3->y ); delete b1; delete b2; delete b3; } -> による属性アクセス

Visual Studio 2019 C++ での実行結果例

ソースコード ファイル名: Ball.h #pragma once class Ball { private: double _x, _y; public: Ball( const double x, const double y ); Ball( const Ball& ball ); Ball& operator= ( const Ball& ball ); ~Ball(); double distance_to_0() const; double x() const { return this->_x; }; double y() const { return this->_y; }; }; 属性(メンバ変数ともいう) コンストラクタ, デストラクタ アクセサ アクセサを定義.属性の読み出しは可能

ソースコード ファイル名: Ball.cpp メソッド本体内ではアクセサを使用 #include "Ball.h" #include <math.h> Ball::Ball( const double x, const double y ) : _x( x ), _y( y ) { /* do nothing */ } Ball::Ball( const Ball& ball ) : _x( ball.x() ), _y( ball.y() ) Ball& Ball::operator= (const Ball& ball ) this->_x = ball.x(); this->_y = ball.y(); return *this; Ball::~Ball() double Ball::distance_to_0() const return sqrt( ( this->x() * this->x() ) + ( this->y() * this->y() ) ); メソッド本体内ではアクセサを使用

ソースコード ファイル名: main.cpp アクセサによる 属性アクセス #include <stdio.h> #include "ball.h" int main( int argc, char** argv ) { Ball* b1 = new Ball( 3, 4 ); Ball* b2 = new Ball( 1, 1 ); Ball* b3 = new Ball( 3, 4 ); fprintf( stderr, "b1: %f, %f\n", b1->x(), b1->y() ); fprintf( stderr, "b2: %f, %f\n", b2->x(), b2->y() ); fprintf( stderr, "b3: %f, %f\n", b3->x(), b3->y() ); delete b1; delete b2; delete b3; } アクセサによる 属性アクセス

Visual Studio 2019 C++ での実行結果例

属性を public にする場合   属性値を意図せず書き換えるリスク アクセサを作る場合   アクセサでは,属性値の書き換え不可.   属性値を意図せず書き換えるリスクを抑制.