Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

17 例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; }

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

19 例 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);

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

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

22 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; }

23 例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);

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

25 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;

26 例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(); };

27 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;}

28 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; }

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

30 // 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

31 // 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 << ']';}

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

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

34 // 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;

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

36 // 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);

37 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; }

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


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

Similar presentations


Ads by Google