第八章 类和对象.

Slides:



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

第 2 章 初探 C++.
第一章 面向对象程序设计.
第九讲 类与对象 (I)面向对象基础.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
C程序设计 第9章 自定义数据类型 主讲教师: 鲁 萍 西安建筑科技大学 理学院.
struct 可以在同一個名稱下擁有多種資料型態。使用struct能讓資料的存取和處理更為靈活。
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
資料大樓 --談指標與陣列 綠園.
内容提要 对象的生命周期 构造函数 析构函数 拷贝构造函数. 常宝宝 北京大学计算机科学与技术系
C++语言程序设计 第四章 类与对象 成都信息工程学院计算机系.
函數(一) 自訂函數、遞迴函數 綠園.
Chap 18 類別與物件 夫有土者,有大物也。有大物者,不可以物。 物而不物,故能物物。 明乎物物者之非物也,豈獨治天下百姓而已哉!
4.1 概述 4.2 类与对象的实现 4.3 对象的初始化和析构 4.4 类的包含 4.5 类模板
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
教材 《C++程序设计》.谭浩强. 清华大学出版社 王雪晶
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
第3章 继承和派生.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九章 结构体和共用体 结构体的定义 结构体的使用 共用体的定义 共用体的使用 主讲:李祥 时间:2015年10月.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
C 程式設計— 結構 台大資訊工程學系 資訊系統訓練班.
C++语言程序设计教程 第7章 类与对象 第7章 类与对象.
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
类类型 C++支持的内置类型和操作,如 int i=10; i=i%6; i=i+4;
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
第13章 结构体的应用 13.1 了解由用户构造的数据类型 13.2 结构体类型说明及结构体变量 13.3 结构体数组
谭浩强 编著 中国高等院校计算机基础教育课程体系规划教材 C++程序设计.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第十章 用户自定义数据类型 目录 学生信息管理系统的开发 结构体数据类型的概述 结构体变量的使用 结构体数组
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
C++语言程序设计 C++语言程序设计 第五章 函数 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第三章 控制语句 第十一组 C++语言程序设计.
C++复习2----类与对象.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
Inheritance -II.
第三章 数据抽象.
Object-Oriented Programming in C++ 第二章 类和对象
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
C++程式設計入門 變數與運算子 作者:黃建庭.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
#include <iostream.h>
C++语言程序设计 C++语言程序设计 第八章 继承 C++语言程序设计.
第 5 章 继承、多态和虚函数 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
C++语言程序设计(第4版) 第七章 继承与派生 数学与统计科学学院 胡凤珠.
變數與資料型態  綠園.
資料結構與C++程式設計進階 C++與資料結構 講師:林業峻 CSIE, NTU 7/ 5, 2010.
安排座位.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Presentation transcript:

第八章 类和对象

序 数据类型 变量 整型 int 整型变量 int x; 结构体类型 结构体变量 [struct] stu john; struct stu 数据类型 变量 整型 int 整型变量 int x; 结构体类型 结构体变量 [struct] stu john; struct stu { char name[20]; int age; int score[3]; }; 如何求每个人的三门课的平均成绩?

既包含数据,又有对这些数据的处理(函数)! 结构数据类型分析 只含有数据成员,而无数据处理(操作) 输出学生的平均成绩; 包含有不同信息项; 但无数据处理功能;(课程平均分) 能否构造一个新的数据类型, 既包含数据,又有对这些数据的处理(函数)!

8.1 面向对象程序设计方法概述 任何一个对象都应当具有这两个要素, 即属性(attribute)和行为(behavior), 对象(object):客观世界中任何一个事物都可以看成一个对象。 抽象(abstraction):抽象的过程是将有关事物的共性归纳、集中的过程。 任何一个对象都应当具有这两个要素, 即属性(attribute)和行为(behavior), 对象太多->抽象

对象和类 具体  对象 类是对象的抽象,而对象则是类的特例,或者说是类的具体表现形式。 抽象  类 数字 整数 具体  对象 抽象  类 利用数字来解释具体和抽象。 1.1 2 33 6.89 数字 11 22 33 66 整数 数字 整数 1.1 2.2 36 45 20.09 11 22 33 44 55 66

8.2 类的声明和对象的定义 变量 数据类型 结构体变量 结构体类型 类变量 类类型 对象 类

8.2.2 声明类类型 声明结构体类型的方法: //声明了一个名为Student的结构体类型 //定义了两个结构体变量stud1和stud2

结构体变量成员的引用(访问) 引用结构体变量中成员的一般方式为 结构体变量名.成员名 成员运算符 .

类的声明 类头 先声明 类体

对象成员的引用? 成员访问权限? 'num' : cannot access private member declared in class 'Student‘ 'name' : cannot access private member declared in class 'Student‘ 'sex' : cannot access private member declared in class 'Student' error C2248: 'display' : cannot access private member declared in class 'Student'

如果在类的定义中既不指定private,也不指定public, 成员访问限定符 用来声明各个成员的访问属性。 public(公用的): 既可被本类中成员函数引用,也可被类的作用域内的类外的其他函数引用; private(私有的):只能被本类中的成员函数调用,类外不能调用; protected(受保护的):不能被类外访问,但可以被派生类的成员函数访问; 一般是把数据隐蔽起来,把成员函数作为对外界的接口。 如果在类的定义中既不指定private,也不指定public, 则系统就默认为是私有的。

访问属性的详细解读 #include <string> #include <iostream> using namespace std; class Student //类定义 { public: void display( ); //公用成员函数原型声明 private: int num; char name[20]; char sex ; }; void Student::display( ) { //在类外定义display类函数 //类内 成员函数访问类内私有成员 cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } void printInfo() { //类外普通函数访问类内私有成员 cout<<num<<' '<<name<<' '<<sex<<endl; int main() Student stud; cout<<stud.num<<endl; //通过对象访问私有数据成员 cout<<stud.name<<endl; //通过对象访问私有数据成员 cout<<stud.sex<<endl; //通过对象访问私有数据成员 stud.display(); //通过对象访问公有成员函数 pringInfo(); return 0;

类类型声明的一般形式

8.2.3 定义对象的方法 1. 先声明类类型,然后再定义对象 (1) class 类名 对象名 如 class Student stud1,stud2; (2) 类名 对象名 Student stud1,stud2;

2. 在声明类类型的同时定义对象

3. 不出现类名,直接定义对象

8.2.4 类和结构体类型的异同 声明的类类型改为用关键字struct:

区别 用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。如果想分别指定私有成员和公用成员,则应用private或public作显式声明。 而用class定义的类,如果不作private或public声明,系统将其成员默认为private,在需要时也可以自己用显式声明改变。 默认情况下,成员访问的区别

8.3 类的成员函数 8.3.1 成员函数的性质 与一般函数的区别只是: 它是属于一个类的成员,出现在类体中。它可以被指定为private(私有的)、 public(公用的)或 protected(受保护的)。

成员函数可以访问本类中任何成员 一般的做法是将需要被外界调用的成员函数指定为public,它们是类的对外接口。

练习 声明一个学生类类型,数据成员包括姓名、学号、三门课程的成绩,成员函数的功能为求三门课程的平均成绩。 并定义两个对象stu1,stu2。

8.3.2 在类外定义成员函数 作用域限定符

课后习题1 ??? #include <iostream> using namespace std; class Time { 课后习题1 ??? #include <iostream> using namespace std; class Time { public: void set_time( ); //公用成员函数 void show_time( ); //公用成员函数 private: //数据成员为私有 int hour; int minute; int sec; }; Time t1; //定义对象t1 int main( ) t1.set_time( ); //调用对象t1的成员函数set_time,向t1的数据成员输入数据 t1.show_time( ); //调用对象t1的成员函数show_time,输出t1的数据成员的值 return 0; } void Time::set_time( ) //在类外定义set_time函数 cin>>hour; cin>>minute; cin>>sec; void Time::show_time( ) //在类外定义show_time函数 cout<<hour<<':'<<minute<<':'<<sec<<endl;

8.4 对象成员的引用 在程序中经常需要访问对象中的成员。访问对象中的成员可以有3种方法: 通过对象名和成员运算符访问对象中的成员; 通过指向对象的指针访问对象中的成员; 通过对象的引用变量访问对象中的成员。

class Student { public: void display( ); //公用成员函数原型声明 private: int num; char name[20]; char sex; //以上3行是私有数据成员 }; void Student::display( ) //在类外定义display类函数 cout<<"num:"<<num<<endl; //函数体 cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } Student stud1,stud2; //定义两个类对象

8.4.1 通过对象名和成员运算符访问对象中的成员 stud1.num=1001; //假设num已定义为公用的整型数据成员

8.4.2 通过指向对象的指针访问对象中的成员 在p指向t的前提下,p->hour,(*p).hour和t.hour三者等价。

引用reference 引用:某一对象的别名; 不是独立的数据类型 声明的同时必须初始化,声明它代表哪个对象 &:引用声明符

如果已声明了Time类,并有以下定义语句: Time t1; //定义对象t1 Time &t2=t1; //定义Time类引用变量t2,并使之初始 //化为t1 cout<<t2.hour; //输出对象t1中的成员hour 由于t2与t1共占同一段存储单元 (即t2是t1的别名),因此t2.hour就是t1.hour。

8.6 类和对象的简单应用举例

多个对象成员的处理 #include <iostream> using namespace std; class Time { public: int hour; int minute; int sec; }; int main( ) Time t1; //定义对象t1 cin>>t1.hour; //向t1的数据成员输入数据 cin>>t1.minute; cin>>t1.sec; //输出t1中数据成员的值 cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl; Time t2; //定义对象t2 cin>>t2.hour; //向t2的数据成员输入数据 cin>>t2.minute; cin>>t2.sec; //输出t2中数据成员的值 cout<<t2.hour<<":"<<t2.minute<<":"<<t2.sec<<endl; return 0; }

通过函数实现输入和输出

通过函数实现输入和输出 成员 没有体现出类的优越性

练习 声明一个圆柱体类,然后定义一个该类的对象,通过键盘输入对象的底面半径和高,利用普通函数计算盖圆柱体的体积并输出到屏幕上。

#include <iostream> using namespace std; class Cylinder //定义Time类 { public: //数据成员为公用的 float r; float h; }; int main() Cylinder c1; cout<<"输入圆柱体的半径和高"<<endl; cin>>c1.r>>c1.h; cout<<"圆柱体的体积为:"<<3.14*c1.r*c1.r*c1.h<<endl; return 0; }

练习 设计一个长方形类,数据成员包括长len和宽wid,要求用成员函数实现以下功能: 由键盘输入长方形的长和宽; 计算长方形的面积; 修改长方形的长和宽为原来数值的2倍;

#include <iostream> using namespace std; class Rectangle { public: void setValue( ); //公用成员函数 float area( ); //公用成员函数 void resize(); //公用成员函数 private: //数据成员为私有 float len; float wid; }; int main( ) Rectangle r1; r1.setValue(); cout<<"矩形面积为:"<<r1.area()<<endl; r1.resize(); return 0; } void Rectangle::setValue() cout<<"输入长方形的长和宽"<<endl; cin>>len>>wid; float Rectangle::area() return len*wid; void Rectangle::resize() len = 2*len; wid *= 2; cout<<"变更后的矩形的长和宽为:"<<len<<' '<<wid<<endl;

8.6 类的封装性和信息隐蔽 数据私有,函数开放 接口与实现分离 名词解释: 详细说明!!(结合实验题目) 成员函数:方法method 公用方法才能被外界通过消息(message)激活 stud.display(); 详细说明!!(结合实验题目)