補足説明.

Slides:



Advertisements
Similar presentations
Item 1:View C++ as a federation of languages. C++ はただの ”C のクラスがあるバージョン ” ではない → 例外安全 (29 項 ) 、テンプレート (41 項 ) 、オーバーロード等の導入によりデザインや目指すコードが 変化している プログラミング言語はあくまで言語.
Advertisements

プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
~手続き指向からオブジェクト指向へ(Ⅰ)~
第4回 iPhoneアプリ開発勉強会 Objective-C 基礎講座 -クラス- 鷲見政明.
Javaのための暗黙的に型定義される構造体
アルゴリズムとプログラミング (Algorithms and Programming)
情報工学演習I 第13回 C++の演習5(仮想関数).
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
独習Java ・ 10.6  Hashtableクラス ・ 10.7  String Tokenizerクラス  12月12日    小笠原 一恵.
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
アルゴリズムとデータ構造 2011年6月13日
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
プログラミングII 第 7 回 オブジェクトの配列 New, delete 参照 田向.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
インタラクティブ・ゲーム制作 <プログラミングコース>
インタラクティブ・ゲーム制作 <プログラミングコース>
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
暗黙的に型付けされる構造体の Java言語への導入
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
プログラミング 4 記憶の割り付け.
画像処理プログラムの説明.
第7回 プログラミングⅡ 第7回
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
一時的な型 長谷川啓
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
独習Java ・ 5.7  静的変数と静的メソッド ・ 5.8  ローカル変数と変数のスコープ  11月20日    小笠原 一恵.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 3 2 次元配列.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
計算機プログラミングI 第3回 プリミティブ値 クラスメソッド クラス変数 式と演算 変数の利用
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとプログラミング (Algorithms and Programming)
第5回 プログラミングⅡ 第5回
JAVA入門⑥ クラスとインスタンス.
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
cp-3. サブクラス,継承 (C++ オブジェクト指向プログラミング入門)
cp-2. 属性,アクセサ (C++ オブジェクト指向プログラミング入門)
cp-1. クラスとメソッド (C++ オブジェクト指向プログラミング入門)
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
フレンド関数とフレンド演算子.
演算子のオーバーロード.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
プログラミング演習I 2003年6月11日(第9回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
情報処理Ⅱ 2005年11月25日(金).
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

補足説明

サンプルプログラムの構成 str.h str.cpp main.cpp 文字列処理用のモジュール 分割コンパイルができなくなるので、ヘッダファイルには実装は書かない str.h クラスの宣言 を記述 #include “str.h” main.cpp メインルーチン #include “str.h” str.cpp クラスに含まれる メンバ関数の 本体を記述 Stringクラスのメンバ関数にスコープ String:: を書くのを忘れない char& String::getChar(int i) { }

ヘッダファイルの中身 #ifndef __MYSTR__ #define __MYSTR__ class String { char *s; 二重インクルードの防止措置 もし、 __MYSTR__ が定義されていなかったら、以下を定義しますよ。すでに定義されていたら、定義が重複しないように読み飛ばしますよ。 __MYSTR__の部分はプログラムを書く人が決めた文字列 #ifndef __MYSTR__ #define __MYSTR__ class String { char *s; public: String(); String(const char* n); String(const String& ref); ~String(); void printString(); char& getChar(int i); }; #endif

&や*を書く位置について char &getChar(int i); ←教科書準拠書式 String(const char *n); ←教科書準拠書式 String(const char* n); ←これでも同じ String(const char * n); ←これでも同じ スペースの位置の違い

コンストラクタ1 String() { s = new char[1]; *s = '\0'; } a s String a; a s \0 オブジェクトの 初期化を自動で やりたいな String() { s = new char[1]; *s = '\0'; } はい, コンストラクタ a \0 s char1個分 確保している点 に注目 String a; 引数のないコンストラクタを デフォルトコンストラクタという 初期値を入れておかないと a.printString() したときエラーになるな… a s

コンストラクタ2 なぜ,いろいろコンストラクタを用意するの? →状況に応じて初期化の仕方を変えたいから b s b s String b(“hello”); String(const char *n) { s = new char[strlen(n) + 1]; strcpy(s, n); } b s e l o \0 h 指定された文字列を 初期値に設定したい b s e l o \0 h

メンバ変数にポインタ変数が含まれているときなど コピーコンストラクタ メンバ変数にポインタ変数が含まれているときなど 単純にオブジェクトを複製すると問題があるときのために,初期化時の複製の仕方を定義するのがコピーコンストラクタ String c = b; String(const String& ref) { s = new char[strlen(ref.s) + 1]; strcpy(s, ref.s); } b s e l o \0 h c c s 同じところを指さないよう注意しなくちゃ b s e l o \0 h

ちゃんと解放してから終了しないとメモリリークする デストラクタ オブジェクトの 後片付けを自動で やりたいな はい, デストラクタ ~String() { delete [] s; } String a; a s \0 ちゃんと解放してから終了しないとメモリリークする

参照 参照を渡さないと 参照を渡すと a s a s ref val s \0 \0 \0 function(String val); 関数等の内部で一時的にオブジェクトの複製が作られる. →オブジェクトが大きいとき処理 が重くなる 参照を渡すと function(const String& ref); 直接,元のオブジェクトを見に行く a \0 s a \0 s ref val s \0 関数等の内部 関数等の内部