第三讲 类的实例化

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public: { public:
…… Y
公有段数据成员和成员函数 ; };
protected: protected: class private:X private: } ;
保护段数据成员和成员函数 ; { 私有数据成员和成员函数 ; ……
dataMember ; // 声象有三种形式
(3)不出现类名,直接定义对象 )不出现类名,
class { private: ┆ public: ┆ }d1, }d1,d2; //无类名 //无类名 //声明以下部分为私有的 //声明以下部分为私有的 //声明以下部分为公用的 //声明以下部分为公用的 //定义了两个无类名的类 //定义了两个无类名的类 对象
对象的使用
注意:
允许已定义类名出现在类的说明中
错误
例:
class {
无穷递归结构
X dataMember ; // 错误
X
…… };
对象的使用
一个对象可以是另一个类的成员。 一个对象可以是另一个类的成员。
class Date { public: void set( int, int, int); void print(); int get_y(); private: int month; int day; int year; }; class Time_date{ public: void set() void print(); private: int hour; int minute; int second; Date dd; };
类声明和成员函数定义的分离
1. 自定义类库头文件.h 自定义类库头文件.h
文件中有用户自行设计的类的定义,包括类的外部接口 (公有成员函数的原型)。任何需要使用这些类的源程 序,只要在文件中包含这些头文件即可。 // date.h class Date{ public: y); void Set(int m,int d,int y); ); int IsLeapYear( ); ); void Print( ); private: int month, day, year; };
对象的使用
(3)可以说明指向对象的指针, )可以说明指向对象的指针, 但不能取私有数据成员的指针或成员函数的地址。 但不能取私有数据成员的指针或成员函数的地址。
Location location[10]; Location *pointLoc = &location[0]; 被加1后 它将指向下一个Location对象 当pointLoc被加 后,它将指向下一个 被加 对象
类声明和成员函数定义的分离
3. 唯一包含主函数的源文件 包括所有相关头文件及main() 包括所有相关头文件及main()。
# include<iostream.h> # include“date.h” void main( ) { Date a; a.Set(2,4,1998); a.Print( ); }
2. 用户自定义类库的内部实现源文件 包括相关头文件包含和类中成员函数的定义。 这就形成类的实现方法。 //date.cpp # include<iostream.h> # include“date.h” void Date ::Set(int m,int d,int y) { month=m; day=d; year=y; } int Date :: IsLeapYear( ) 类的 { return (year%4==0&&year%100!=0) 内部实现 ||(year%400==0); } void Date :: Print( ) { cout <<month <<"/" <<day <<"/" <<year <<endl; }
成员函数必须由对象句柄调用 成员函数和数据成员封装成一体
类的封装性和信息隐蔽
1. 公用接口与私有实现的分离
类中被操作的数据是私有的,实现的细节对用户是隐蔽的 类中被操作的数据是私有的,实现的细节对用户是隐蔽的 隐蔽 这种实现称为私有实现。 ,这种实现称为私有实现。 在声明了一个类以后, 在声明了一个类以后,用户主要是通过调用公用的成员 函数来实现类提供的功能。因此, 函数来实现类提供的功能。因此,公用成员函数是用户使 用类的公用接口 或者说是类的对外接口。 公用接口, 用类的公用接口,或者说是类的对外接口。 软件工程的一个最基本的原则就是将接口与实现分离, 软件工程的一个最基本的原则就是将接口与实现分离, 信息隐蔽是软件工程中一个非常重要的概念。 信息隐蔽是软件工程中一个非常重要的概念。
//student.h class Student { public: void display( ); private: int num; char name[20]; char sex; }; //main.cpp #include <iostream> #include ″student.h″ int main( ) {Student stud; stud.display( ); return 0; }
编译系统会为这个对象分配存储空间, 编译系统会为这个对象分配存储空间, 以存放对象中的成员。 以存放对象中的成员。
对象的使用
由于类和结构是等价的, 由于类和结构是等价的,对类的五种操作对结构也同 样适用: 样适用: (1)对象之间可以相互赋值。 )对象之间可以相互赋值。 Location locationA, locationB; locationA.set (5,6); locationB = locationA; (2)对象可以作为数组的元素。 )对象可以作为数组的元素。 Location arrayloc[100];
(4)对象可以作为函数的参数, )对象可以作为函数的参数,
既可作值参也可以作引用参数。 既可作值参也可以作引用参数。
void display(Location &location) { ... };
对象的使用
一个对象可以是另一个类的成员。 (5)一个对象可以是另一个类的成员。
注意:
允许已定义类名出现在类的说明中 类说明的一般形式为: 例: class X class 类名 {
课堂练习(分离,实例) 课堂练习(分离,实例)
实现表示学生的类 Student, 属性包括名字,学号, 性别和三门课的成绩, 行为包括: 行为包括:属性的设置 和显示等,编程实现。 建立完整的工程,包括 多个源文件和头文件。 多个源文件和头文件。 Student
char name[10] int no char sex Date birthday void set( ); void set(char*, int, char); char* getName(); int print();
2. 成员的访问
一般对象的成员引用形式 成员访问运算符 运算符“ 成员访问运算符“.” 和“->” 数据成员 对象名. 对象名. 成员名 对象指针名或 对象指针名->成员名 成员函数 对象名. 成员名(参数表) 对象名. 成员名(参数表) 或 对象指针名- 成员名(参数表) 对象指针名->成员名(参数表)
Date d1,d2; // 直接用类名定义对象(常用) 直接用类名定义对象(常用)。
定义对象有三种形式
(2) 在声明类类型的同时定义对象
class Date { public: void Set(int m, int d, int y ){…} int IsLeapYear(){…} void Print( ){…} private: int month; int day; int year; } d1, d2;
2. 成员的访问
2访问对象中的成员可以有 种方法: 访问对象中的成员可以有3种方法 访问对象中的成员可以有 种方法:
通过对象名和成员运算符访问对象中的成员; 通过对象名和成员运算符访问对象中的成员 class A 通过指向对象的指针访问对象中的成员; { 通过指向对象的指针访问对象中的成员 A a; private : / / private说明符在首次出现时可以省略 说明符在首次出现时可以省略 a.m_a; int m_a; 通过对象的引用变量访问对象中的成员。 通过对象的引用变量访问对象中的成员。 public: / / 切换到 切换到public说明符 a.m_b; 说明符 int m_b; a.print(); void print( ){ cout<<m_a<<m_b}; int getA( ){ return m_a ; } }
成员函数属于一个类的成员出现在类体中成员函数成员访问说明符限制privatepublic注意调用它的权限以及它的作用域成员函数必须由对象句柄调用成员函数和数据成员封装成一体类的封装性和信息隐蔽?类中被操作的数据是私有的实现的细节对用户是隐蔽的这种实现称为私有实现
第三讲 类的实例化
定义对象 成员引用 对象的操作 代码分离
1.类的实例化1.类的实例化-对象 类的实例化
类的实例化即定义类的对象, 类的实例化即定义类的对象,类似于定义任何类 即定义类的对象 型的变量(类名称为一个新的类型说明符) 型的变量(类名称为一个新的类型说明符)
定义对象有三种形式
(1)先声明类类型,后定义对象 )先声明类类型,
class Date d1,d2; // 把class和Tdate合起来作为一个类名 class和Tdate合起来作为一个类名
cout<<sizeof(Time)<<endl;
成员函数
成员函数 vs. 一般函数
都有函数体,返回值和函数类型。 都有函数体,返回值和函数类型。 成员函数属于一个类的成员, 成员函数属于一个类的成员,出现在类体中 成员访问说明符限制private、public 、 成员访问说明符限制
注意调用它的权限以及它的作用域
2. 成员的访问
通过指向对象的指针访问对象中的成员; 通过指向对象的指针访问对象中的成员
Time t, *pTime; //定义对象 和指针变量 定义对象t和指针变量 定义对象 和指针变量p pTime =&t; //使p指向对象 指向对象t 使 指向对象 cout << pTime ->hour << (*pTime).hour << t.hour ;
通过对象的引用变量访问对象中的成员。 通过对象的引用变量访问对象中的成员。
Time t1; Time &t2=t1; cout<<t2.hour; void Fuction( Time& t);
成员的存储方式
用类去定义对象时,系统会为每一个对象分配存储空间。 用类去定义对象时,系统会为每一个对象分配存储空间。 如果一个类包括了数据和函数,要分别为数据和函数的代 如果一个类包括了数据和函数, 码分配存储空间。 码分配存储空间。
类声明和成员函数定义的分离
在面向对象的程序开发中,一般做法是将类的声明放 在面向对象的程序开发中,一般做法是将类的声明放 在指定的头文件中,用户如果想用该类, 在指定的头文件中,用户如果想用该类,只要把有关的头 文件包含进来即可,不必在程序中重复书写类的声明, 文件包含进来即可,不必在程序中重复书写类的声明,以 减少工作量,节省篇幅,提高编程的效率。 减少工作量,节省篇幅,提高编程的效率。 由于在头文件中包含了类的声明, 由于在头文件中包含了类的声明,因此在程序中就可 以用该类来定义对象。 以用该类来定义对象。由于在类体中包含了对成员函数的 声明,在程序中就可以调用这些对象的公用成员函数。 声明,在程序中就可以调用这些对象的公用成员函数。为 了实现上一节所叙述的信息隐蔽, 类成员函数的定义一 了实现上一节所叙述的信息隐蔽,对类成员函数的定义一 般不放在头文件中,而另外放在一个文件中 外放在一个文件中。 般不放在头文件中,而另外放在一个文件中。
//student.cpp #include <iostream> #include ″student.h″ void Student∷display( ) {cout<<″num:″<<num<<endl; cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; } 主函数模块 //将类声明头文件包含进来 //将类声明头文件包含进来 //定义对象 //定义对象 //执行 //执行stud对象的display函数 执行stud对象的 对象的display函数
相关文档
最新文档