C++ 基礎. 目次 C++ とは? C++ におけるオブジェクト指向 課題 C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの.

Slides:



Advertisements
Similar presentations
1 C++ における OOP を用いた 書き方講座 H 山崎貴英. 2 今回の内容 OOP とは? C++ の超基礎 注釈 書いてあるコードはすべて一部抜粋。 コピペだと動かないよ!
Advertisements

オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
ソフトウェア工学 理工学部 情報システム工学科 新田直也. 演習問題 1 の解答例  入庫処理の DFD 酒屋の在庫問題の DFD( 入庫処理 ) 更新情報 在庫ファイル 更新処理 倉庫係 在庫不足リスト 在庫ファイル 出庫指示書 新規出庫 判定 出庫指示書 作成処理 出庫依頼 積荷票.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
プログラミング基礎I(再) 山元進.
Javaのための暗黙的に型定義される構造体
第13回構造体.
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
情報工学演習I 第13回 C++の演習5(仮想関数).
オブジェクト指向プログラミング(2) OOPの三大要素 「クラス」「ポリモーフィズム」「継承」
CHAPTER1 UMLとオブジェクト指向の基本概念(2)
構造体.
社会人学習講座 「Javaプログラミング概論」
C#とC++とオブジェクト指向 上甲 健史.
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
第10回 プログラミングⅡ 第10回
補足説明.
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
アルゴリズムとプログラミング (Algorithms and Programming)
情報工学演習I 第12回 C++の演習4(インライン展開).
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
第11回 プログラミングⅡ 第11回
C#言語ソースプログラムの原型 C言語 C#言語 Hello World! Hello Students! オマジナイ! 適当なクラス名
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第九回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
ソフトウェア制作論 平成30年11月28日.
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
メンバとメソッド C言語の構造体 変数の集まり C#言語のクラス + それを処理する関数の集まり フィールド または メンバ変数 メンバ
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向 プログラミング 第四回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
ソフトウェア工学 知能情報学部 新田直也.
フレンド関数とフレンド演算子.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
C言語講座第5回 2017 構造体.
Presentation transcript:

C++ 基礎

目次 C++ とは? C++ におけるオブジェクト指向 課題

C++ とは? Cには足りなかったものが付与されて出来た物 具体的には、 情報の隠蔽(カプセル化) 共通の名前付け(関数のオーバーロード) 再利用の仕組み クラスの導入 など オブジェクト指向 C++ では大規模なプログラミングの 修正、追加、保 守が可能に。

C++ におけるオブジェクト指向 オブジェクト クラス 属性とメソッド コンストラクタ デストラクタ カプセル化 多相性 継承

C++ の基本的な雛形 //hello.cpp( ファイル名 ) #include using namespace std: int main(){ int a; cout<<“hello”<<endl; cin>>a; cout<<a<<endl ; return 0; } 拡張子は cpp iostream は C でいう stdio.h cout 出力 endl 改行 cin 入力 << 出力演算子 >> 入力演算子

オブジェクト オブジェクトとは簡単に言うと、実体が ある物 具体的には、教員、学生、車といった物

クラス 個々のオブジェクトに対して、共通の性 質を求めて一緒にした単位。 「車1」「車2」「車3」は「車」とい うクラスで まとめることが出来る。 オブジェクトを抽象化した物がクラス

属性とメソッド クラス内で定義される物 属性(フィールド) クラスの持つ性質。 車でたとえると、「名前」「定員」など メソッド オブジェクトが持つ機能、振る舞いのこと。 車でたとえると、「走行する」「停車する」な ど

クラスの書き方 Cでは構造体 C++ ではクラ ス struct car{ string name;/* 車の名前 */ int price;/* 値段 */ int capacity;/* 定員 */ }; class cardata{ public: string name;// 車の名前 int price;// 値段 int capacity;/* 定員 */ }; 属性

クラスの使い方 #include using namespace std: class cardata{ public: string name;// 車の名前 int price;// 値段 int capacity;/* 定員 */ void ShowData(); // メンバ関数 // クラスないではメンバ関数の // プロトタイプだけが記述でき る }; void cardata::ShowData(){// メンバ関数の実装 // 関数の前にクラス名と2つのコロンをつける、 // これをスコープ演算子と呼ぶ cout<<“ 車種名 :”<<name<<endl; cout<<“ 値段 :”<<price<<endl; cout<<“ 定員人数 :”<<capacity<< endl; return 0; } main(){ cardata car1; //cardata 型の変数宣言 strcpy(car1.name,” イプサム ”); car1.price= ; car1.capacity=6; return 0; }

コンストラクタ(1) クラスの中で定義出来る特殊なメンバ関 数 オブジェクトが構築されるときに 自動的に呼び出されるメンバ関数 メンバ変数に初期値を代入するのが 一般的な使い方

コンストラクタ(2) class cardata{ public: string name; int price; int capacity; cardata(); }; コンストラ クタ // コンストラクタの実 装 cardata::cardata(){ strcpy(name," 未設定 "); price = ; capacity = 0 ; } // クラスを // 使う側のコード main(){ cardata someone; return 0; } 初期化

デストラクタ コンストラクタと対で呼び出されるもの オブジェクトがメモリから破棄されると きに 自動的に呼び出される

カプセル化(1) オブジェクト(属性とメソッドのセッ ト)の外部からアクセス出来るのは振る 舞いだけにし、直接属性をアクセス出来 ないようにすること カプセル化により、オブジェクト内部属 性が隠蔽化され、外部にはメソッドだけ が公開される

カプセル化(2) アクセス演算子には private > protected > public がある。 アクセス演算子により、クラスの利用者に とって必要のないメンバを隠すこと 具体例:リモコン 内部機能 ボタン機能 private: メンバ変数; メンバ関数; public : メンバ変数; メンバ関数;

カプセル化の使い方 #include using namespace std: // クラスの定義 class Book { private: int page; // 内部で用いる変数 public: int GetPage();// ページ数の獲得 void SetPage(int p); // ページ数の設 定 }; // メンバ関数の実装 Int Book::GetPage(){ return page; } void Book::SetPage(int p){ if ((p >=1) && (p <= 1000)){ page = p;}else{cout<< " ページ 数は 1 ~ 1000 で設定して下さい !" << endl; } return; } // クラスを使う側のコード main(){ Book bk; // 適切な値の代入 bk.SetPage(123);// メンバ変数の値の表示 cout<< bk.GetPage() << endl; // 不適切な値の代入 bk.SetPage(3000); // メンバ変数の値の表示 cout<< bk.GetPage() << endl; return 0; }

多相性 複数の異なるオブジェクトに同じ名前の 送信をしても、それぞれのオブジェクト が固有の振る舞いを実行して結果を戻す。 今回は多相性を実現する機能の うちの1つのオーバーロードについて勉 強

オーバーロード(多相性) オーバーロードを 使わないと // クラスの定義 class Calculation { public: int Inttwice(int a); // int 型のメンバ関数 double Dbltwice(double a); // double 型のメンバ関数 }; // メンバ関数の実装 int Calculation::Inttwice(int a){ return a*2; } double Calculation::Dbltwice(double a){ return a * 2; } Calculation obj; int a; double b; a = obj.Inttwice(123); b = obj.Dbltwice(1.23); クラスを使う側は、覚え る メンバ関数が多くなる

オーバーロード(多相性) オーバーロードを使う と // クラスの定義 class Calculation{ public: int twice(int a); // int 型のメンバ関数 double twice(double a); // double 型のメンバ関数 }; int Calculation::twice(int a){ return a * 2; } double Calculation::twice(double a){ return a * 2; } Calculation obj; int n; double m; n = obj.twice(314); m = obj.twice(3.14); メンバ関数が同じです む

オーバーロードの活用のパター ン #include using namespace std: class Messages{ public: void ShowMessage(); // 引数のないメンバ関数 void ShowMessage(char* s); // 引数1個のメンバ関数 void ShowMessage(char* a, int n); // 引数2個のメンバ関数 }; // メンバ関数の実装 void Messages::ShowMessage(){ cout<< “ 引数ゼロです ” << endl; return; } void Messages::ShowMessage(char*s){ cout<< s << endl; return; } void Messages::ShowMessage(char* s, int n){ int i; for (i=0; i < n; i++){ cout<< s <<endl; } return; } // クラス側を使う側のコード main(){ Messages obj; obj.ShowMessage(); obj.ShowMessage(" これは1回 "); obj.ShowMessage(“ これは5回入力 ", 5); return 0; }

継承(1) ある性質を引き継ぐこと スーパークラス(親クラス)で定義した性質は サブクラス(子クラス)に継承することが出来 る。 これによってサブクラスでは追加すべき性質だ けを定義すればよくなる 継承の利点 性質の再利用が可能となった。

継承(2) 図で表すとこんな感じ cardata クラス + name + price + capacity Normal クラ ス + carry Light クラス + navi Sports クラ ス + wheel スーパークラスの cardata には3つのクラスの共通する属 性が書かれており、 normal クラス、 light クラス、 sports クラスでは、それぞれ、そのクラス特有の属性が記述さ れている。

継承(3) class cardata{ public: string name; int price; int capacity; }; スーパークラス class Normal:public cardata{ public: string carry; }; class Light:public cardata{ public: string navi; }; class Sports:public cardata{ public: char wheel; }; サブクラスサブクラス

継承(4) メインではどのように書 くか Normal car1;// 変数宣言 strcpy(car1.name,“ イプサム ”); car1.price= ; car1.capacity=6; strcpy(car1.carry,” スキー用キャリー ”);

課題 課題 (0) Hello World と表示するプログラムの作成 課題(1) 名前を入力し、 それを出力するプログラムの作成 課題(2) Person クラスで「名前」、「年齢」を宣言し、 Person クラスを継承し、 Teacher クラスでは、 「給料」、 Student クラスでは、「 GPA 」の属性を 加えて、それぞれ値を入力し出力するプログラムの 作成

ご清聴ありがとうございました