C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.

Slides:



Advertisements
Similar presentations
第 2 章 初探 C++.
Advertisements

四資二甲 第三週作業 物件導向程式設計.
第一章 C语言概述 计算机公共教学部.
第九讲 类与对象 (I)面向对象基础.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
第八章 类和对象.
第三章 控制结构.
走向C++之路 WindyWinter WindyWinter感谢诸位前来捧场。
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
資料大樓 --談指標與陣列 綠園.
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
第二章 C# 基础知识.
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
Derived Class 前言 衍生類別的定義 單一繼承 public, protected, 和 privated 基底類別
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
程序设计期末复习 黎金宁
第三章 C++中的C 面向对象程序设计(C++).
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第3讲 C++程序控制结构 3.1 顺序结构 3.2 分支结构 3.3 循环结构 3.4 转向控制 3.5 综合案例分析.
C++语言程序设计 第二章 C++简单程序设计.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
二叉树的遍历.
C++大学基础教程 第3章 C++控制语句 北京科技大学 信息基础科学系.
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
潘爱民 C++ Overview 潘爱民
程式結構&語法.
C#程序设计基础 $3 成员、变量和常量.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第三章 C++的语句和简单的程序设计 主要内容:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
Inheritance -II.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
C++程式設計入門 變數與運算子 作者:黃建庭.
第二章 Java语法基础.
第二章 类型、对象、运算符和表达式.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
目标 流程控制 字符串处理 C# 的类和对象 C# 访问修饰符 C# 构造函数和析构函数.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第2章 Java语言基础.
多重條件選擇敘述
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
變數與資料型態  綠園.
資料!你家住哪裏? --談指標 綠園.
第二章 Java基础语法 北京传智播客教育
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计

“ 目录 C++语言程序设计 基本知识 编程技能 刨根问底 类的静态成员 包含内嵌对象的派生类构造 常对象和常成员 类的组合 赋值运算符重载 友元 运算符重载 包含内嵌对象的派生类构造 包含内嵌对象的派生类析构 赋值运算符重载 C++语言程序设计

编程技能 a C++语言程序设计

(一)包含内嵌对象的派生类构造 含内嵌对象的派生类构造函数的形式如下: 派生类名::派生类名(基类所需的形参,本类成员所需的形参): 基类1(基类参数表1),基类2(基类参数表2),…,基类n(基类参数表n), 对象成员1(对象参数表1),对象成员2(对象参数表2),…,对象成员m(对 象参数表m) { 本类基本类型数据成员初始化; } 初始化列表 C++语言程序设计

派生类构造函数的形式参数表应该提供3部分参数 (一)包含内嵌对象的派生类构造 派生类构造函数的形式参数表应该提供3部分参数 基类构造函数形参表所需要的参数 初始化派生类的内嵌对象数据成员所需要的参数 初始化派生类基本数据类型数据成员所需要的参数 C++语言程序设计

(一)包含内嵌对象的派生类构造 例:派生类的构造函数 类之间的关系图 C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TColor910.h #pragma once //预处理指令,避免重复包含本头文件 #include "GlobalType910.h" enum EColorComponent {RED, GREEN, BLUE}; class TColor{ private: uchar _RED, _GREEN, _BLUE; public: TColor(const uchar R=0x00, const uchar G=0x00, const uchar B=0x00); //普通构造函数 TColor(const TColor& color); //复制构造函数 TColor& operator =(const TColor& color); //重载赋值运算符 void setColor(uchar R, uchar G, uchar B); uchar getComponent(EColorComponent component) const; }; //GlobalType910.h #pragma once typedef unsigned int uint; typedef unsigned char uchar; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TColor910.cpp #include "TColor910.h" TColor::TColor(uchar R/* =0x00 */, //普通构造函数 uchar G/* =0x00 */, //类定义中函数原型是带默认值的 uchar B/* =0x00 */){ //这里不需要重复写默认值 _RED = R; _GREEN = G; _BLUE = B; } TColor::TColor(const TColor& color){ //复制构造函数,即拷贝构造函数 _RED = color._RED; _GREEN = color._GREEN; _BLUE = color._BLUE; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TColor910.cpp TColor& TColor::operator =(const TColor& color){ _RED = color._RED; _GREEN = color._GREEN; _BLUE = color._BLUE; return *this; } void TColor::setColor(uchar R, uchar G, uchar B){ _RED = R; _GREEN = G; _BLUE = B; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TColor910.cpp uchar TColor::getComponent(EColorComponent component) const{ uchar color; switch (component){ case RED: color = _RED; break; case GREEN: color = _GREEN; break; case BLUE: color = _BLUE; break; default: color = 0x00; break; }; return color; } C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TShape910.h #pragma once #include"GlobalType910.h" #include"TColor910.h" class TShape{ private: uint _x, _y; //几何形状的位置 protected: TColor _color; //颜色 public: TShape(uint x, uint y); TShape(uint x, uint y, TColor color); ~TShape(); void Draw(); void getXY(uint& x, uint& y) const; void setXY(uint x, uint y); TColor getColor() const; void setColor(TColor color); }; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TShape910.cpp #include "TShape910.h" #include "TColor910.h" #include <iostream> using namespace std; TShape::TShape(uint x, uint y):_color(){//在初始化列表表初始化内嵌对象 _x = x; _y = y; } TShape::TShape(uint x, uint y, TColor color){ _color=color; //调用TColor类的赋值运算符重载函数 TShape::~TShape(){ cout<<"TShape destructed"<<endl; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TShape910.cpp void TShape::Draw(){ uint R, G, B; //程序将要显示RGB分量的数值,若直接使用cout操作RGB分量, //则显示的是RGB分量的ASCII码。因此需首先将RGB分量转换为整型 R=static_cast<uint>(_color.getComponent(RED)); G=static_cast<uint>(_color.getComponent(GREEN)); B=static_cast<uint>(_color.getComponent(BLUE)); cout<<"Draw a shape with color("<<R<<","<<G<<","<<B; cout<<") at point("<<_x<<","<<_y<<")"<<endl; } C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TShape910.cpp void TShape::getXY(uint& x, uint& y) const{ x = _x; y = _y; } void TShape::setXY(uint x, uint y){ _x = x; _y = y; TColor TShape::getColor() const { return _color; void TShape::setColor(TColor c){ _color = c; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TEllipse910.h #pragma once #include "TShape910.h" #include "GlobalType910.h" class TEllipse: public TShape { protected: uint _longR, _shortR; public: TEllipse(uint longR, uint shortR, uint x, uint y, TColor color); TEllipse(uint longR, uint shortR, uint x, uint y); ~TEllipse(); void Draw(); void getR(uint& longR, uint& shortR) const; void setR(uint longR, uint shortR); }; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TEllipse910.cpp #include "TEllipse910.h" #include <iostream> using namespace std; TEllipse::TEllipse(uint longR, uint shortR,uint x, uint y, TColor color):TShape(x,y){ _longR = longR; _shortR = shortR; //在派生类构造函数中访问基类保护成员 _color=color; } TEllipse::TEllipse(uint longR, uint shortR,uint x, uint y):TShape(x,y){ C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TEllipse910.cpp TEllipse::~TEllipse(){ cout<<"TEllipse destructed"<<endl; } void TEllipse::getR(uint& longR, uint& shortR) const{ longR = _longR; shortR = _shortR; void TEllipse::setR(uint longR, uint shortR){ _longR = longR; _shortR = shortR; C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计 //TEllipse910.cpp void TEllipse::Draw(){ uint x, y; getXY(x, y); //调用基类公有函数访问基类私有成员 uint R, G, B; //以下3行代码直接访问基类保护成员_color R=static_cast<uint>(_color.getComponent(RED)); G=static_cast<uint>(_color.getComponent(GREEN)); B=static_cast<uint>(_color.getComponent(BLUE)); cout<<"Draw an ellipse with color("; cout<<R<<“,”<<G<<“,”<<B<<“) \nat point("; //下行代码错误!在派生类中不能访问基类私有成员 //cout<<_x<<","<<_y<<")"; cout<< x<<","<< y<<")"; cout<<" , longR: "<<_longR<<" and shortR: "<<_shortR<<endl; } C++语言程序设计

(一)包含内嵌对象的派生类构造 C++语言程序设计

(一)包含内嵌对象的派生类构造 派生类构造函数总结 派生类构造函数的职责: 派生类构造函数初始化数据的方式: 初始化基类 初始化内嵌对象成员 初始化基本数据类型的成员 派生类构造函数初始化数据的方式: 构造函数初始化列表:基类构造函数,内嵌对象成员构造函数 构造函数函数体:基本数据类型的成员 特殊情况:const成员和reference成员只能通过初始化列表获得初值 若不需要做上述初始化工作,则可不定义构造函数,而使用系统提供的默认构造函数 C++语言程序设计

(一)包含内嵌对象的派生类构造 派生类构造函数总结 派生类构造函数的执行次序:初始化列表构造函数函数体 基类的构造函数。 内嵌对象的构造函数。 派生类的构造函数(即函数体中的代码) 若派生类构造函数没有显式初始化基类或内嵌对象成员,则编译器会在初始化列表中自动插入基类无参构造函数或内嵌对象的默认构造函数 多继承时,基类构造函数的调用顺序: 按照定义派生类时这些基类被继承的顺序 与他们在初始化列表的次序无关 派生类的多个对象成员的构造函数的调用顺序 按照这些对象成员在派生类中声明的顺序 与他们在初始化列表中的先后次序无关 C++语言程序设计