SlideShare uma empresa Scribd logo
1 de 14
co-3. サブクラス,継承
1
金子邦彦
(C++ オブジェクト指向プログラミング入門)(全3回)
URL: https://www.kkaneko.jp/pro/cpp/index.html
クラス階層
クラス階層とは,複数のクラスが親子
関係をなすこと
2
クラスA
クラスB
親
子
クラスD
親
子
クラスC
親
子
継承
• 継承とは,親クラスの属性とメソッドを子クラスが
受け継ぐこと
• 親クラスのことを「スーパークラス」,子クラスの
ことを「サブクラス」ともいう
3
オブジェクトの生成
• 次のオブジェクトを生成
4
• オブジェクト生成を行うプログラム
b1 3 4 0
_x _y _color
クラスの類似性
• 類似した2つのクラス
Ball ColorBall
属性 属性
_x _x
_y _y
_color
メソッド
distance_to_0 distance_to_0
5
メソッドの名前も
中身も全く同じとする
_color の有り
無しが違う
_x, _y は同じ
クラスの親子関係
• クラス①が親,クラス②が子であるとき
• クラス②は,クラス①の属性とメソッドをすべて持つ
• クラス②で,クラス①にない属性やメソッドが追加さ
れることがある
6
クラス①
クラス②
親
子
クラスBall
クラスColorBall
親
子
属性 _color を追加
派生クラス
• あるクラスを継承して作成したクラス
Ball ←元となるクラス(基本クラス)
ColorBall ←継承したクラス(派生クラス)
7
ソースコード
8
#pragma once
class Ball {
protected:
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
アクセサ
protected 指定により,サブクラスから属性アクセス可能
ソースコード
9
#include "Ball.h"
#include <math.h>
Ball::Ball( const double x, const double y, const int color ) : _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
ソースコード
10
#pragma once
#include "Ball.h"
class ColorBall : public Ball {
protected:
int _color;
public:
ColorBall( const double x, const double y, const int color );
ColorBall( const ColorBall& ball );
ColorBall& operator= ( const ColorBall& ball );
~ColorBall();
int color() const { return this->_color; };
};
ファイル名: ColorBall.h
ソースコード
11
#include "ColorBall.h"
ColorBall::ColorBall( const double x, const double y , const int color ) : Ball( x, y ),
_color( color )
{
/* do nothing */
}
ColorBall::ColorBall( const ColorBall& ball ) : Ball( ball.x(), ball.y() ), _color( ball.color() )
{
/* do nothing */
}
ColorBall& ColorBall::operator= (const ColorBall& ball )
{
this->_x = ball.x();
this->_y = ball.y();
this->_color = ball.color();
return *this;
}
ColorBall::~ColorBall()
{
/* do nothing */
}
ファイル名: ColorBall.cpp
ソースコード
12
#include <stdio.h>
#include "ball.h"
#include "ColorBall.h"
int main( int argc, char** argv )
{
ColorBall* b1 = new ColorBall( 3, 4, 0 );
fprintf( stderr, "b1: %f, %f, %dn", b1->x(), b1->y(), b1->color() );
delete b1;
}
ファイル名: main.cpp
アクセサによる
属性アクセス
Visual Studio 2019 C++ での実行結果例
13
プログラムの実行結果が
表示されている
まとめ
• クラス階層とは,複数のクラスが親子関係をなす
こと
• クラス①が親,クラス②が子であるとき
• クラス②は,クラス①の属性とメソッドをすべて持つ
• クラス②で,クラス①にない属性やメソッドが追加され
ることがある
• 親子関係の指定は,「 class ColorBall : public Ball」
のように書く.ColorBall が子,Ball が親.
• 継承とは,親クラスの属性とメソッドを子クラス
が受け継ぐこと
• 親クラスのことを「スーパークラス」,子クラス
のことを「サブクラス」ともいう
14

Mais conteúdo relacionado

Mais de 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
 
cp-15. 疑似乱数とシミュレーション
cp-15. 疑似乱数とシミュレーションcp-15. 疑似乱数とシミュレーション
cp-15. 疑似乱数とシミュレーションkunihikokaneko1
 
cp-14. ファイル処理
cp-14. ファイル処理cp-14. ファイル処理
cp-14. ファイル処理kunihikokaneko1
 

Mais de kunihikokaneko1 (20)

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 の意味
 
cp-15. 疑似乱数とシミュレーション
cp-15. 疑似乱数とシミュレーションcp-15. 疑似乱数とシミュレーション
cp-15. 疑似乱数とシミュレーション
 
cp-14. ファイル処理
cp-14. ファイル処理cp-14. ファイル処理
cp-14. ファイル処理
 
cp-13. 構造体
cp-13. 構造体cp-13. 構造体
cp-13. 構造体
 

co-3. サブクラス、継承