類別樣板 Class Template 類似函式樣板 由類別樣板產生的類別稱為類別樣版的實體(instance)

Slides:



Advertisements
Similar presentations
JAVA 编 程 技 术 主编 贾振华 2010年1月.
Advertisements

问题一:这些帖子你感兴趣吗? 1. 打美国我捐一个月工资,打日本我捐一条命 2. 中国人团结起来,抵制家乐福 3
设计模式可以帮助我们改善系统的设计,增强 系统的健壮性、可扩展性,为以后铺平道路。
類別與物件 Class & Object.
第15章 繼承與多重繼承 15-1 繼承的基礎 15-2 覆寫與隱藏父類別的成員 15-3 子類別的建構與解構子 15-4 多重繼承
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
Classes Lecturer: 曾學文.
CHAPTER 9 建構方法 ROBERT.
Scope & Lifetime 前言 Local Scope Global Functions & Objects
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
本單元介紹何謂變數,及說明變數的宣告方式。
哈夫曼编码.
Classes: A Deeper Look, Part 1
第六章 继承性和派生类 胡昊 南京大学计算机系软件所.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
Object-Oriented Programming:
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第三章 C++中的C 面向对象程序设计(C++).
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
SPOTO TM JAVA课程 JAVA中的OO语法
第四章 小技巧.
预防流感保健康 学校 老师.
Ch02-基礎語法.
愛的奇蹟™ 幫您替寶貝 打造一個純淨的家!.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
第十三讲 文件流与 输出输入重载.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
Chapter 2 & Chapter 3.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
top b top a a top 空栈 a 进栈 b 进栈 top top e e e top d d d c c c b b b a a
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
Object-Oriented Programming in C++ 第二章 类和对象
第二章 Java语法基础.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
面向对象技术 练习 ffh.
本节内容 对象拷贝 视频提供:昆山爱达人信息技术有限公司.
Review 1~3.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第 9 章 建構函式與解構函式.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
第 5 章 继承、多态和虚函数 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
Class 2005/05/25.
JAVA 程式設計與資料結構 第三章 物件的設計.
第2章 Java语言基础.
對於成員(member)存取權的限制 成員的資料被毫無限制的存取,任誰都可以指定任意值給成員,Java語言為了防止這種現象的產生,規定:有一種成員的資料不能任由類別外部的任何人隨意存取。
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
C++程序语言设计 Chapter 14: Templates.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
Presentation transcript:

類別樣板 Class Template 類似函式樣板 由類別樣板產生的類別稱為類別樣版的實體(instance) 此建立過程稱為instantiating

T是一個變數用來設定型態, 根據不同型態建立新類別 Example template <class T> Class Cexample { T m_value; } Class Cexample { int m_value; } CBox m_value; T是一個變數用來設定型態, 根據不同型態建立新類別

定義類別樣板 p350

說明 參數T是變數型態 宣到類別物件時, T會被指定的型態取代

樣版的成員函式 如何放在定義外 template <class T> T Csamples<T>::Max() const { T theMax = m_Values[0]; for (int i=1; i<m_Free, i++) if…. } 用來辨別函式屬於哪個樣版所產生

建構子定義在類別樣板之外 template<class T> Csamples<T>::Csamples(T values[], int count) { m_Free = count < 100 ? Cpunt:100; for(int i=0; i<m_Free; i++) m_Values[i]=Values[i]; }

從類別樣板建立物件 Csamples <double> myData(10.0) Example 9_07.cpp

多個參數的類別樣板 template<class T1, class T2> class Cexample { private: T1 m_value1; T2 m_Value2; }

Chapter 10 類別繼承

目標 由已存在類別定義新的類別 類別成員存取屬性關鍵字protected 夥伴類別 虛擬函式 純虛擬函式 抽象類別 虛擬建構子 多重繼承

類別 用來表示某種抽象事物 真實世界的物件的資料型態定義

Example p384 Box Carton, CandyBox, Crate, BeerCrate Length, Breadth, Height Carton, CandyBox, Crate, BeerCrate

類別繼承 衍生類別(derived) 基礎類別(base class) 類別以一個或多個類別為基礎來定義 衍生類別繼承(inherit)基礎類別的資料成員和函式成員

類別繼承 (cont.) 解構子、建構子、覆載的指定運算子等不會被繼承 衍生類別有自己的解構子及建構子

何為基礎類別 放在另一個類別定義中的類別 Ex: B類別的定義中含A類別 A是B的直接基礎類別(direct base class) Ex: p384 CBox是CBeerCrate的間接基礎類別(indirect base class)

Figure p385

Example class Cbox { public: double m_Length; double m_Breadth; double m_Height; Cbox(…..) } class CCandyBox: CBox { public: char* m_Contents; CCandyBox(char* str = "Candy") { m_Contents = new char[ strlen(str) + 1 ]; strcpy(m_Contents, str);} ~CCandyBox() { delete[] m_Contents; }; };

Ex10_01.cpp

說明 CBox:24bytes CCandyBox:32bytes 被繼承的基礎類別內定存取屬性private class CCandyBox: private CBox class CCandyBox: public CBox 基礎類別一定要有存取屬性, 用來決定被衍生類別繼承後的成員存取狀態 若省略, 則編譯器假設為private

繼承下的存取控制 基礎類別的private資料成員也是衍生類別的成員 在衍生類別中將維持private屬性 p389

存取基礎類別的private成員 Ex10_02.cpp class CBox { public: CBox(double lv = 1.0, double bv = 1.0, double hv = 1.0): m_Length(lv), m_Breadth(bv), m_Height(hv){} //Function to calculate the volume of a CBox object double Volume() const { return m_Length*m_Breadth*m_Height; } private: double m_Length; double m_Breadth; double m_Height; };

衍生類別建構子的運作 建立衍生類別的基礎類別部份, 會呼叫基礎類別的建構子而非衍生類別的建構子 Ex10_03.cpp 從衍生類別的建構子去呼叫基礎類別的某個建構子, 即可利用基礎類別的建構子將衍生類別的資料成員初始化 或用衍生類別建構子的資料去改變基礎類別建構子的內容

呼叫基礎類別的建構子 class CCandyBox: public CBox { public: char* m_Contents; // Constructor to set dimensions and contents // with explicit call of CBox constructor CCandyBox(double lv, double bv, double hv, char* str= "Candy") :CBox(lv, bv, hv) cout << endl <<"CCandyBox constructor2 called"; m_Contents = new char[ strlen(str) + 1 ]; strcpy(m_Contents, str); } // Constructor to set contents // calls default CBox constructor automatically CCandyBox(char* str= "Candy") cout << endl << "CCandyBox constructor1 called"; ~CCandyBox() // Destructor { delete[] m_Contents; } };