第9章 类和对象(一) 9.1 面向对象的基本概念 9.2 类与对象的声明和定义 9.3 成员函数 9.4 对象的访问 9.5 对象的存储.

Slides:



Advertisements
Similar presentations
课程 要求 参考 书目 课程 内容 课程 练习.
Advertisements

第 2 章 初探 C++.
第九讲 类与对象 (I)面向对象基础.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
7.2 访问控制 —— 公有继承 公有继承练习 //Point.h #ifndef _POINT_H #define _POINT_H class Point { //基类Point类的定义 public: //公有函数成员 void initPoint(float x = 0, float.
第14章 c++中的代码重用.
第八章 类和对象.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
Using C++ The Weird Way Something about c++11 & OOP tricks
类和对象 潘荣江 山东大学计算机科学与技术学院
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
Object-Oriented Programming in C++ 第一章 C++的初步知识
授课老师:龚涛 信息科学与技术学院 2018年4月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
前處理指令可以要求前處理器 (preprocessor) 在程式編譯之前,先進行加入其它檔案的內容、文字取代以及選擇性編譯等工作。
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
第七章 操作符重载 胡昊 南京大学计算机系软件所.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
$9 泛型基础.
C++复习3 ----类的继承与派生.
C#面向对象程序设计 $6 深入理解类.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第13讲 多态 友员函数 多态性与虚函数 纯虚函数和抽象类.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++复习2----类与对象.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
授课老师:龚涛 信息科学与技术学院 2016年3月 教材:《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
第三章 数据抽象.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 类成员的访问控制 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Object-Oriented Programming in C++ 第二章 类和对象
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C++大学基础教程 第10章 运算符重载 北京科技大学 2019/5/7 北京科技大学.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第 5 章 继承、多态和虚函数 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
變數與資料型態  綠園.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
第十二章 C与C C转入C++时不需改变的内容 12.2 C转入C++的一些与类无关的 新特性
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

国家级精品课程网站 (本书配套教学网站) http://programming.xjtu.edu.cn

第9章 类和对象(一) 9.1 面向对象的基本概念 9.2 类与对象的声明和定义 9.3 成员函数 9.4 对象的访问 9.5 对象的存储

9.1、面向对象的基本概念 一、对象和面向对象 1、客观世界是由各种各样的实体组成的,这些实体就是面向对象方法中的对象。 2、消息是向某对象请求服务的一种表达方式 3、对象之间的交互通过发送消息来实现。 4、消息包括:目标对象 ,请求的方法 ,参数

二、面向对象程序设计的特征 抽象:数据抽象+代码抽象 封装:过程和数据封藏起来 继承:基类和派生类 多态性:虚函数、函数重载

1. 抽象 抽象(abstraction)是将有关事物的共性归纳、集中的过程 抽象是形成概念的必要手段,它是从许多事物中舍弃个别的、非本质性的特征,抽取共同及本质性的特征。 通过舍弃个体事物在细节上的差异,抽取其共同特征而得到一批事物的抽象概念。OOA中的类就是这样得到的。 抽象是面向对象方法中使用最为广泛的原则,例如系统中的对象是对现实世界中事物的抽象;

2. 封装 封装就是将数据成员和成员函数结合为一个不可分的系统单位,并尽可能地隐蔽对象的内部细节。 封装的信息隐蔽作用反映了事物的相对独立性。它实际上也是抽象原则的一种具体应用,它既体现了过程抽象,也体现了数据抽象。

3. 继承 继承避免了对基类和派生类之间共同特征进行重复描述。 继承简化了人们对事物的认识和描述,对软件复用是很有用的。

4.多态性 是指允许不同的对象对同一消息做出不同的响应,执行不同的操作。 多态性通过函数重载和虚函数等技术实现

9.2 类与对象的声明和定义 9.2.1. 类的定义 1、类的定义 成员函数的定义 数据成员的定义

2、声明类的一般形式为 class 类名 { private: 私有数据和函数 public: 公有数据和函数 protected: 保护数据和函数 };

3、说明 (1)类声明以关键字class开始,其后跟类名。 (2)类所声明的内容用花括号括起来,这一对花括号“{ }”之间的内容称为类体。 (3)类中定义的数据和函数分别是数据成员和成员函数

4、访问权限 (3)所有成员默认声明为private权限。 (1)用于控制对象的某个成员在程序中的可访问性 (2)关键字private 、public和protected 定义的成员访问权限分别是私有、公有和保护的,把这些成员分别叫做私有成员、公有成员和保护成员 (3)所有成员默认声明为private权限。

例9-1 定义一个Person类 class Person {private: char Name[20]; int Age; char Sex; public: void Register(char *name, int age, char sex); void ShowMe(); };

成员函数的定义 返回类型 类名∷成员函数名(参数列表) { 成员函数的函数体//内部实现 } 其中“∷”是作用域运算符,“类名”是成员函数所属类的名字,“∷”用于表明其后的成员函数是属于这个特定的类。换言之,“类名∷成员函数名”的意思就是对属于“类名”的成员函数进行定义,而“返回类型”则是这个成员函数返回值的类型。余下的工作就是定义成员函数的函数体。

二、对象的定义 定义格式: <类名> <对象1>,<对象2>,… ; 例如:Person person1,person2;

9.3 成员函数 一、成员函数的定义 二、内联成员函数 使用关键字inline将成员函数定义为内联函数 例如: 格式:<类型> <类名>::<函数名>(<参数表>) { <函数体> } 二、内联成员函数 使用关键字inline将成员函数定义为内联函数 例如: inline void Person:: Register(char *name, int age, char sex) {……;}

例9-2 Person类成员函数的定义 void Person:: Register(char *name, int age, char sex) { strcpy(Name, name); Age = age; Sex = (sex == 'm'? 'm':‘f'); } void Person:: ShowMe() { cout << Name << '\t' << Age << '\t' << Sex << endl; }

9.4 对象的访问 1、在类的作用域内,成员函数直接访问同类中的数据成员 2、在类的作用域外,对象访问其数据成员或成员函数需使用运算符“.” 3、在类的作用域外,禁止直接访问一个对象中的私有成员 4、同类对象之间可以整体赋值 5、对象用作函数的参数时属于赋值调用;函数可以返回一个对象

例 9-3完整的人事资料输入输出程序 int main() { char name[20], sex; int age; Person person1, person2; cout << "Enter a person's name, age and sex:"; cin >> name >> age >> sex; person1.Register(name, age, sex);

cout << "person1: \t"; person1.ShowMe(); //调用类的成员函数输出 person1.Register("Zhang3", 19, 'm'); person2 = person1; //对象之间的赋值 cout << "person2: \t"; person2.ShowMe(); //调用类的成员函数输出 return 0; }

例9-4 简单的日期类 定义一个最简单的日期类,仅包含说明日期的数据成员。 // Example 9-4 最简单的日期类 例9-4 简单的日期类 定义一个最简单的日期类,仅包含说明日期的数据成员。 // Example 9-4 最简单的日期类 #include <iostream> using namespace std; class Date { public: int day, month, year; };

int main() { Date date1, date2; //声明2个日期对象 cin >> date1.day >> date1.month >> date1.year; cout << date1.month << “-“ << date1.day << “-“ << date1.year << endl; cin >> date2.day >> date2.month >> date2.year; cout << date2.month << “-“ << date2.day << “-“ << date2.year << endl; return 0; }

例9-5 定义最简单的日期类,用函数实现对象的输入输出操作。 例9-5 定义最简单的日期类,用函数实现对象的输入输出操作。 #include <iostream> using namespace std; class Date { public: int day, month, year; }; void set_date(Date& d); void show_date(Date d);

int main() { Date date1, date2; //声明2个日期对象 set_date(date1); //使用成员函数操作数据成员 show_date(date1); set_date(date2); show_date(date2); return 0; }

void set_date(Date& d) { cin >> d.day >> d.month >> d.year; } void show_date(Date d) cout << d.month << "-" << d.day << "-" << d.year << endl;

例9-6 定义简单的完整意义上的日期类 #include <iostream> using namespace std; 例9-6 定义简单的完整意义上的日期类 #include <iostream> using namespace std; class Date { int day, month, year; public: void init(int,int,int); //初始化数据成员 void print_ymd(); void print_mdy(); };

void Date::init(int yy, int mm, int dd) { month = ( mm >= 1 && mm <= 12 ) ? mm : 1; year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900; day = ( dd >= 1 && dd <= 31 ) ? dd : 1; } void Date::print_ymd() { cout << year << "-" << month << "-" << day << endl;} void Date::print_mdy() { cout << month << "-" << day << "-" << year << endl;}

int main() { Date date1,date2; date1.print_ymd(); //未初始化时的情况 date1.init(2006,3,28); //正确的初始化数据 date1.print_ymd(); date1.print_mdy(); date2.init(2006,13,38); //错误的初始化数据 date2.print_ymd(); date2.print_mdy(); return 0; }

程序设计举例 9-8 点类和圆类 在二维平面空间上,使用x-y坐标可以确定一个点,确定了圆心坐标和半径可以确定一个圆。声明一个点类,并使用这个点类的对象为数据成员声明圆类。

// Point.h文件 Point类的声明 #ifndef POINT_H #define POINT_H class Point { int x, y; //点的x和y坐标 public: void SetPoint( int, int ); // 设置坐标 int GetX() { return x; } // 取x坐标 int GetY() { return y; } // 取y坐标 void Print(); //输出点的坐标 }; #endif

// Point.cpp文件 Point类的成员函数定义 #include <iostream> using namespace std; #include "point.h" void Point::SetPoint( int a, int b ) { x = a; y = b; } void Point::Print() { cout << '[' << x << ", " << y << ']';}

// Circle.h文件 Circle类的声明 #ifndef CIRCLE_H #define CIRCLE_H #include <iostream> using namespace std; #include "point.h" class Circle { double Radius; Point Center;

public: void SetRadius(double); //设置半径 void SetCenter(Point); //设置圆心坐标 double GetRadius(); //取半径 Point GetCenter(); //取圆心 double Area(); //计算面积 void Print(); //输出圆心坐标和半径 }; #endif

// Circle.cpp文件 Circle类的成员函数定义 #include <iostream> using namespace std; #include "circle.h" void Circle::SetRadius(double r) { Radius = ( r >= 0 ? r : 0 ); } void Circle::SetCenter(Point p) { Center = p; Point Circle::GetCenter() { return Center;

double Circle::GetRadius() { return Radius; } double Circle::Area() return 3.14159 * Radius * Radius; void Circle::Print() cout << "Center = "; Center.Print(); cout << "; Radius = " << Radius << endl;

// Example9-8.cpp文件: Circle Demo #include <iostream> using namespace std;#include "point.h" #include "circle.h" int main() { Point p,center; p.SetPoint(30,50); center.SetPoint(120,80); Circle c; c.SetCenter(center); c.SetRadius(10.0);

cout << "Point p: "; p.Print(); cout << "\nCircle c: "; c.Print(); cout << "The centre of circle c: "; c.GetCenter().Print(); cout << "\nThe area of circle c: " << c.Area() << endl; return 0; }

结 束 语 学好计算机的唯一途径是 你的编程能力与你在计算机上投入的时间成 上机练习 正比