第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete

Slides:



Advertisements
Similar presentations
C++语言程序设计教程 第5章 构造数据类型 第6章 C++程序的结构.
Advertisements

第一單元 建立java 程式.
四資二甲 第三週作業 物件導向程式設計.
程序设计实习 3月份练习解答
組長:黃家逸 組員:殷浩賢、楊煜、吳家朗 毒品的害處.
第九讲 类与对象 (I)面向对象基础.
第5章 指 针 教学目标: 掌握指针定义、初始化方法和基本运算; 掌握利用指针访问一维数组、二维数组的方法;
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
資料大樓 --談指標與陣列 綠園.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
Scope & Lifetime 前言 Local Scope Global Functions & Objects
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第11章 运算符重载 什么是运算符重载 运算符重载的方法 几个特殊的运算符的重载 自定义类型转换运算符 运算符重载实例.
哈夫曼编码.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
西安交通大学 计算机教学实验中心 大学C++程序设计教程 西安交通大学 计算机教学实验中心
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
C#程序设计基础 $3 成员、变量和常量.
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
程式撰寫流程.
類別(class) 類別class與物件object.
Chapter 7 指標.
Methods 靜宜大學資工系 蔡奇偉副教授 ©2011.
第四章 小技巧.
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
Java 程式設計 講師:FrankLin.
JAVA 程式設計與資料結構 第四章 陣列、字串與數學物件.
Instructor Textbook Requirements TAs C++程式設計風格與藝術 (O’Reilly).
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
第一單元 建立java 程式.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第六章 簡介運算子超載 (Operator Overloading)
第10讲 构造函数和析构函数 构造函数 析构函数 This 指针.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
字符串 (String) 字符串是 n (  0 ) 个字符的有限序列, 记作 S = “c1c2c3…cn” 其中,S 是串名字
C qsort.
面向对象技术 练习 ffh.
第二章 类型、对象、运算符和表达式.
C++程序设计基础 主讲人:谢昕 华东交通大学信息工程学院 第十~十二讲 多态性和虚函数 2005年春季学期.
Review 1~3.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
陣列與結構.
第 9 章 建構函式與解構函式.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
第三章 高级函数特性.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
第9章 C++程序设计初步 9.1 C++的特点 9.2 最简单的C++程序 9.3 C++的输入输出 9.4 函数的重载
C++程序语言设计 Chapter 14: Templates.
C語言程式設計 老師:謝孟諺 助教:楊斯竣.
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
方法(Method) 函數.
InputStreamReader Console Scanner
Presentation transcript:

第四章 陣列、指標與參考 4-1 物件陣列 4-2 使用物件指標 4-3 this指標 4-4 new 與 delete 4-6 參考(reference) 4-7 傳遞物件參考 4-8 傳回參考 4-9 獨立參考與其限制

4-1物件陣列: 範例一 class samp { int a ; public: samp() { a = 0 ; } int get_a() { return a ;} } ; void main() { samp ob[4] ; // 生成了?個ob物件 }

範例二: 會呼叫甚麼建構子? class samp { int a ; public: samp(int n) { a = n ; } int get_a() { return a ;} } ; void main() { samp ob[4] = {1, 2, 3, 4} ; cout << ob[0].get_a() <<endl ; }

範例三: 多維陣列的初值 void main() { samp ob[4][2] = {1, 2, 3, 4,5,6,7,8} ; cout << ob[3][0].get_a() <<endl ; }

4-3 this指標 class frac { int q, p ; public: frac() { this->q = 0; this->p = 0 ; } void set(int u, int d) {this->q = u; this->p =d ; } } ; void main() { frac f ; f.set(3, 5) ; // 傳了三個參數&f, 3, 5 } this指標

4-4, 4-5 new 與 delete 動態記憶體配置 frac *f1 = new frac ; frac *f4 = new frac(f3) ; // f1 is an frac object frac *f5 = new frac[20] ; delete f1; delete[] f2; …… delete[] f5;

4-4, 4-5 new 與 delete 以下各行指令,何時有frac物件產生? 1 frac f ; 2 frac *pf ; 3 pf = new frac() ; 4 frac fs[20] ; 5 frac *pfs ; 6 pfs = new frac[20] ;

4-6 參考型態(reference type) 為變數建立別名(alias) int x = 60 ; int& LB = x ; // LB的資料型態是? LB++ ; cout << x ; // 注意: 沒有 * frac f(3,5) ; frac& pratio = f ; pratio.set(7,10); f.show() ; const int &ref = 10 ;

參考型態(reference type) int ival = 1024; int &refval = ival; // ok: refval is a reference to ival int &refval2; // error: reference must be initialized to an object int &refval = &ival; // error: refval is of type int, not int* int *p = &ival // ok: refptr is a reference to a pointer int *&refptr = p;

參考型態(reference type) main(){ main(){ int ival = 1024, ival2 = 2048; int &ri = ival, int &ri2 = ival2; cout<< ri<<" "<<ri2<<endl; ri=ri2; } main(){ int ival = 1024, ival2 = 2048; int *p = &ival, *p2 = &ival2; cout<<*p<<" " <<*p2<<endl; p=p2; }

參考型態(reference type) class frac { int q, p ; public: frac() { this->q = 0; this->p = 0 ; } frac(int a, int b){q=a;p=b;} void set(int u, int d) {this->q = u; this->p =d ; } void show(){cout<<p<<" "<<q<<endl;} } ; void main(){ frac f(3,5) ; f.show() ; frac& pratio = f ; pratio.set(7,10); f.show() ;}

4-6 參考型態(reference type) 使用時機 獨立參考 函數參數傳遞 函數回傳值

範例二: #include <math.h> void round1(double num) ; // void round1(double); void round2(double &num) ; // void round2(double&); void main() { double i = 100.4 ; round1(i) ; cout << i ; round2(i) ; cout << i ; } void round1(double num) { num = num/fabs(num) * int(fabs(num)+0.5) ; }void round2(double &num) {/*四捨五入 同上*/ ….}

範例一: swap(x,y) void swap(int &x, int &y) ; //如果無&? void main() { int i =10, j =19 ; cout << i << “ “ << j <<endl ; swap(i, j) ; //注意呼叫方式,非swap(&i, &j); cout << i << “ “ << j << endl ; } void swap(int &x, int &y) { int temp = x; x = y ; y = temp ;

4-7 傳遞物件參考 class myclass { int data[20] ; Q: fun1()與fun2()哪個較有效率? public: myclass() { ….. } …… } ; void fun1(myclass ob1) {….. } // 被呼叫時是否產生物件 void fun2(myclass& ob2) {……} // 被呼叫時是否產生物件 void main() { myclass ob; fun1(ob) ; fun2(ob) ; } Q: fun1()與fun2()哪個較有效率? 較省空間?

4-8 傳回參考 範例一: 寫在等式右邊函式 int score[50] ; int& last() { return score[49]; } void main() { last() = 0 ; // score[49] = 0 ; cout<<last()<<endl; }

範例二: 不要傳回超過作用範圍的物件 // 以下程式有何錯誤? 範例二: 不要傳回超過作用範圍的物件 // 以下程式有何錯誤? int& last() { int a[50]; return a[49]; } void main() { last() = 0 ; cout<<last()<<endl; }

範例三: safeArray (務必讀懂) class array { char *p; int size; …… } void main() { array a[20] ; //自動檢查錯誤 // 如果你已overload []這個運算符號 a[2] = 10; a[30] = 7;