C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.

Slides:



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

認識食品標示 東吳大學衛生保健組製作.
颞下颌关节常见病.
經歷復活的愛 約翰福音廿一1-23.
第 2 章 初探 C++.
第九讲 类与对象 (I)面向对象基础.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
民法第四章:權利主體 法人 楊智傑.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
資料大樓 --談指標與陣列 綠園.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
函數(一) 自訂函數、遞迴函數 綠園.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
Scope & Lifetime 前言 Local Scope Global Functions & Objects
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
程式撰寫流程.
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
第四章 小技巧.
C++程序设计 string(字符串类) vector(容器类).
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 第十一章 流类库与输入/输出.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
Name1..hour //加班時數 name2..hour //請假時數
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
第九章 物件導向-進階.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 第十章 C++标准模板库 成都信息工程学院计算机系.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计

“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 类和对象的定义 对象数组 this指针 构造函数 对象作为普通函数的参数与返回值 析构函数 面向对象程序设计 对象数组 对象作为普通函数的参数与返回值 对象指针和堆对象 this指针 复制构造函数 内部类和命名空间 C++语言程序设计

刨根问底 c C++语言程序设计

成员函数又是如何识别Hour、Minute和Second属于哪个对象呢? (I) this指针 在类的外部访问类成员必须通过对象来调用。 在成员函数内部,访问数据成员或成员函数时并没有看到这些成员属于哪个对象。 void main() { Clock s; Clock t; s.SetTime(12, 5, 0); t.SetTime(10, 30, 30); s.ShowTime(); t.ShowTime(); } void Clock::SetTime(int H, int M, int S) { Hour=H; Minute=M; Second=S; } 成员函数又是如何识别Hour、Minute和Second属于哪个对象呢? C++语言程序设计

void SetTime(Clock * this, int H, int M, int S) (I) this指针 在对象调用s.SetTime(12, 5, 0)时,成员函数除了接收3个实参外,还接收了一个对象s的地址。 虽然我们看到的只有3个参数,但真正的参数是4个,其中第一个参数是隐含的,这个参数的数据类型为Clock *,形式参数的名称为this。 因此,类Clock的成员函数SetTime()的原型实际上是: void SetTime(Clock * this, int H, int M, int S) 隐含参数 C++语言程序设计

this指针保存了调用此成员函数的对象地址 (I) this指针 类Clock的成员函数SetTime()的实现也可以如下: 一般我们编写代码时省去了this-> void Clock::SetTime( int H, int M, int S) { this-> Hour=H; this-> Minute=M; this-> Second=S; } this指针保存了调用此成员函数的对象地址 C++语言程序设计

(II) 复制构造函数 复制构造函数是否可有可无? 复制构造函数何时执行? 若类中含有指针成员,执行默认复制构造函数时(浅拷贝): 有些情况下,可以不写,使用默认的复制构造函数 但有些情况下,必须要编写——深拷贝 复制构造函数何时执行? 通过一个对象初始化新对象时(用“=”赋值) 对象作为函数的参数,函数调用时 函数返回对象时 若类中含有指针成员,执行默认复制构造函数时(浅拷贝): 会将一个原对象的指针成员复制到新对象的指针成员 若指针成员指向堆内存,在原对象生存期结束时,析构函数将堆内存释放,则新对象的指针成员会变为悬挂指针,新对象生存期结束时,析构函数将出现错误! C++语言程序设计

(II) 复制构造函数 #include <iostream> using namespace std; class student { public: student(char*); ~student(); void printstu(); private: char* name; }; student::student(char* c) { cout<<"Constructing..."<<endl; name = new char[strlen(c)+1]; strcpy(name, c); } student::~student() { cout<<"Destructing..."<<endl; delete []name; void student::printstu() { cout<<"姓名:"<< name <<endl; } C++语言程序设计

(II) 复制构造函数 void main() { student stu("wang"); stu.printstu(); 没有错误! } student sss=stu; stu.printstu(); sss.printstu(); } 有错误! 如何修改程序? C++语言程序设计

(II) 复制构造函数 #include <iostream> using namespace std; class student { public: student(char*); student(const student & ); ~student(); void printstu(); private: char* name; }; student::student(const student& s) { cout<<"Copy Constructing..."<<endl; name = new char[strlen(s.name)+1]; strcpy(name, s.name); } C++语言程序设计

(III)内部类和命名空间 C++语言程序设计 把一个类的定义写在另一个类的内部,就称其为内部类。 内部类在使用上与普通类几乎没有区别。 外部类AAA不能自由访问内部类的成员,内部类Inner也不能自由访问外部类的成员,相当于把Inner写在外面。 内部类的用途主要是为了避免类名的冲突。 class AAA { public: class Inner//定义内部类 char name[20]; };  }; void main() { AAA::Inner a; strcpy(a.name, "xuexi"); cout<<a.name<<endl; } C++语言程序设计

命名空间(namespace)是解决名字冲突的终极解决方案。 (III)内部类和命名空间 命名空间(namespace)是解决名字冲突的终极解决方案。 可以把很多名字:类名、函数名、全局变量名,定义在一个命名空间ID里,以后使用ID作为前缀。ID要在整个项目里全局唯一。 namespace ID { } C++语言程序设计

(III)内部类和命名空间 C++语言程序设计 //头文件tinyxml.h namespace tinyxml { class Element { }; class Document public: Document(char*); int AddElement(const Element&); private: char filename[80]; }; }  //源文件tinyxml.cpp #include "tinyxml.h" namespace tinyxml { Document::Document(char* filename) { } int Document::AddElement(const Element&e) {return 0; } }  C++语言程序设计

(III)内部类和命名空间 //主程序li7-12.cpp #include "tinyxml.h" using namespace tinyxml; void main() { Document doc("test.xml"); Element elem; doc.AddElement(elem); } //主程序li7-12.cpp #include "tinyxml.h" void main() { tinyxml::Document doc("test.xml"); tinyxml::Element elem; doc.AddElement(elem); } C++语言程序设计