SlideShare a Scribd company logo
1 of 15
co-2. 属性,アクセサ
1
金子邦彦
(C++ オブジェクト指向プログラミング入門)(全3回)
URL: https://www.kkaneko.jp/pro/cpp/index.html
メソッド
• メソッドは,オブジェクトに属
する操作や処理のこと
• 引数(ひきすう)とは,メソッ
ドに渡す値のこと
• メソッドは,クラスに属する
• 属性やメソッドにアクセスするとき
は「.」や「->」を用いる
2
アクセサ
• アクセサは,属性値の取得,属
性値の更新を行うためのメソッ
ド
3
例題1
• Ball クラスのオブジェクトを3
個生成し,それぞれのメモリア
ドレスの表示を行う
• オブジェクトを生成したら,オ
ブジェクトアドレスは,ポイン
タ変数に格納する
4
クラスとオブジェクト
5
ball-1
ball-2
ball-3
3
4
1
1
3
4
Ball クラス
ソースコード
6
#pragma once
class Ball {
public:
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;
};
コンストラクタ,
デストラクタ
属性(メンバ変数ともいう)
ファイル名: Ball.h
ソースコード
7
#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 )
{
/* do nothing */
}
Ball& Ball::operator= (const Ball& ball )
{
this->x = ball.x;
this->y = ball.y;
return *this;
}
Ball::~Ball()
{
/* do nothing */
}
double Ball::distance_to_0() const
{
return sqrt( ( this->x * this->x ) + ( this->y * this->y ) );
}
ファイル名: Ball.cpp
ソースコード
8
#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, %fn", b1->x, b1->y );
fprintf( stderr, "b2: %f, %fn", b2->x, b2->y );
fprintf( stderr, "b3: %f, %fn", b3->x, b3->y );
delete b1;
delete b2;
delete b3;
}
ファイル名: main.cpp
-> による属性アクセス
Visual Studio 2019 C++ での実行結果例
9
例題2
• アクセサを定義し使用する
10
ソースコード
11
#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.h
アクセサ
アクセサを定義.属性の読み出しは可能
ソースコード
12
#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() )
{
/* do nothing */
}
Ball& Ball::operator= (const Ball& ball )
{
this->_x = ball.x();
this->_y = ball.y();
return *this;
}
Ball::~Ball()
{
/* do nothing */
}
double Ball::distance_to_0() const
{
return sqrt( ( this->x() * this->x() ) + ( this->y() * this->y() ) );
}
ファイル名: Ball.cpp
メソッド本体内ではアクセサを使用
ソースコード
13
#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, %fn", b1->x(), b1->y() );
fprintf( stderr, "b2: %f, %fn", b2->x(), b2->y() );
fprintf( stderr, "b3: %f, %fn", b3->x(), b3->y() );
delete b1;
delete b2;
delete b3;
}
ファイル名: main.cpp
アクセサによる
属性アクセス
Visual Studio 2019 C++ での実行結果例
14
• 属性を public にする場合
属性値を意図せず書き換えるリスク
• アクセサを作る場合
アクセサでは,属性値の書き換え不可.
属性値を意図せず書き換えるリスクを抑制.
15

More Related Content

Similar to co-2. メソッド定義と呼び出し

C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
po-8. クラス,メソッド,オブジェクト生成
po-8. クラス,メソッド,オブジェクト生成po-8. クラス,メソッド,オブジェクト生成
po-8. クラス,メソッド,オブジェクト生成kunihikokaneko1
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことdcubeio
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch dbEiji Kuroda
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryAkira Takahashi
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料時響 逢坂
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクトアシアル株式会社
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5Nishida Kansuke
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest informationSony Network Communications Inc.
 

Similar to co-2. メソッド定義と呼び出し (12)

Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
po-8. クラス,メソッド,オブジェクト生成
po-8. クラス,メソッド,オブジェクト生成po-8. クラス,メソッド,オブジェクト生成
po-8. クラス,メソッド,オブジェクト生成
 
Play2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだことPlay2 scalaを2年やって学んだこと
Play2 scalaを2年やって学んだこと
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
Learning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.GeomtryLearning Template Library Design using Boost.Geomtry
Learning Template Library Design using Boost.Geomtry
 
Ekmett勉強会発表資料
Ekmett勉強会発表資料Ekmett勉強会発表資料
Ekmett勉強会発表資料
 
Python opt
Python optPython opt
Python opt
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5⑲jQueryをおぼえよう!その5
⑲jQueryをおぼえよう!その5
 
2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information2018/06/23 Sony"s deep learning software and the latest information
2018/06/23 Sony"s deep learning software and the latest information
 

More from kunihikokaneko1

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い kunihikokaneko1
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション kunihikokaneko1
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスkunihikokaneko1
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要 kunihikokaneko1
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門kunihikokaneko1
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスkunihikokaneko1
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 kunihikokaneko1
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタkunihikokaneko1
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンkunihikokaneko1
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線kunihikokaneko1
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システムkunihikokaneko1
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニングkunihikokaneko1
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習kunihikokaneko1
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例kunihikokaneko1
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要kunihikokaneko1
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について kunihikokaneko1
 
Visual Studio 2013 の起動とプロジェクトの新規作成
Visual Studio 2013 の起動とプロジェクトの新規作成Visual Studio 2013 の起動とプロジェクトの新規作成
Visual Studio 2013 の起動とプロジェクトの新規作成kunihikokaneko1
 

More from kunihikokaneko1 (20)

cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い cs-8. 表計算ソフトウエアを用いたデータの扱い
cs-8. 表計算ソフトウエアを用いたデータの扱い
 
cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション  cs-7. 乱数,シミュレーション
cs-7. 乱数,シミュレーション
 
cs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンスcs-6. データベースとデータサイエンス
cs-6. データベースとデータサイエンス
 
cs-5. 人工知能の概要
cs-5. 人工知能の概要 cs-5. 人工知能の概要
cs-5. 人工知能の概要
 
cs-4. プログラミング入門
cs-4. プログラミング入門cs-4. プログラミング入門
cs-4. プログラミング入門
 
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックスcs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
cs-3. パノラマ画像,ストリートビュー,3次元コンピュータグラフィックス
 
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素 cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
cs-2. コンピュータによる画像制作,人工知能でできること,情報のコード化,デジタル画像,画素
 
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタcs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
cs-1. 無料ソフトウエア,無料データ,エコシステム,Scratch プログラミング,Scratch のキャラクタ
 
mi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョンmi-8. 人工知能とコンピュータビジョン
mi-8. 人工知能とコンピュータビジョン
 
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
mi-7. 学習と検証, 学習不足, 過学習, 学習曲線
 
mi-6. 画像分類システム
mi-6. 画像分類システムmi-6. 画像分類システム
mi-6. 画像分類システム
 
mi-5. ディープラーニング
mi-5. ディープラーニングmi-5. ディープラーニング
mi-5. ディープラーニング
 
mi-4. 機械学習
mi-4. 機械学習mi-4. 機械学習
mi-4. 機械学習
 
mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習mi-3. データサイエンス・AIの演習
mi-3. データサイエンス・AIの演習
 
mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例mi-2. データサイエンス・AIの事例
mi-2. データサイエンス・AIの事例
 
mi-1. 人工知能の概要
mi-1. 人工知能の概要mi-1. 人工知能の概要
mi-1. 人工知能の概要
 
kaneko202304.pptx
kaneko202304.pptxkaneko202304.pptx
kaneko202304.pptx
 
Coding Standards of C++ について
 Coding Standards of C++ について  Coding Standards of C++ について
Coding Standards of C++ について
 
Visual Studio 2013 の起動とプロジェクトの新規作成
Visual Studio 2013 の起動とプロジェクトの新規作成Visual Studio 2013 の起動とプロジェクトの新規作成
Visual Studio 2013 の起動とプロジェクトの新規作成
 
extern の意味
extern の意味extern の意味
extern の意味
 

co-2. メソッド定義と呼び出し