第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例第六讲 类与对象
6.2 对象的使用
6.3 对象成员第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 1,关于日期的类定义及对象的使用
//文件 date.h,由于板面小,没有用 #ifndef……
#include <iostream.h>
class Date {
public:
Date(int d=1,int m=1,int y=2000);//构造函数
void print( ); //打印日期
private:
int day,month,year; };
//文件 date.cpp
Date::Date(int d=1,int m=1,int y=2000)
{ day=d; month=m; year=y;}
void Date::print( )
{ cout << day << "-" << month << "-"<< year; }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 main.cpp
#include <iostream.h>
#include "date.h"
void main( )
{ date d1(1,3,2000),d2; //定义对象
cout << "date 1= ";
d1.print( ); //激活操作 print
cout << "date 2= ";
d2.print( ); //激活操作 print
cout << d1.day; //错误,私有数据不能由
//外部访问
}
结果,date 1= 1-3-2000
date 2= 1-1-2000
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 1 有关内容总结
1,如何知道定义 多少 类的 数据成员 和 成员函数?
根据对现实世界的抽象,可逐步完善
2,如何判断成员是 公有、保护,还是 私有?
成员函数一般为公有或保护;数据成员可为保 护或私有,但不能为公有,为什么?
3,要定义构造函数。并用三个文件存储,如
date.h,date.cpp 和 main.cpp
4,注意对象的定义和使用,私有和保护数据成员是不能从外部直接访问的第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2,定义类“雇员”,
//文件 employ.h,类的定义
#ifndef EMPLOY_H //避免多次定义
#define EMPLOY_H
class Employee {
public:
Employee( ); //构造函数
Employee(char* na,int pid); //构造函数
void print( );
~Employee(); //析构函数,为什么要?
private:
char *name; int ID; } //姓名和身份证号
#endif
注意,由于用到动态存储,必须定义析构函数数据只有姓名和身份证号,;
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 employ.cpp,类的实现
#include<iostream.h>
#include<string.h>
Employee::Employee( ) //缺省构造
{ name= " "; ID=0; }
Employee::Employee(char* na,int pid)
{ name=new char[strlen(na)+1];
strcpy(name,na);
ID=pid; }
#include "employ.h"
void Employee::print( )
{ cout << "name=" << name << "; ID= "
<< ID << endl;}
Employee::~Employee( ) //析构函数,
{ delete [ ] name; //删除数组 }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 main.cpp,对象的定义与使用
#include <employ.h>
void main( )
{
Employee e1; //创建对象 e1
Employee e2( Li Hua,322); //创建对象 e2
e1.print( );
e2.print( );
cout << e2.ID;
}
结果,name= ; ID=0;
name=Li Hua; ID= 322
#include<iostream.h>
" "
// 私有数据不能从外部访问第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2 有关内容总结
1,数据成员具有动态存储时的析构函数的定义与实现,
delete [ ] name; 表示删除数组
2,用三个文件存储,如
employ.h,employ.cpp 和 main.cpp
注意,在访问类的操作程序中要包含类的头文件 employ.h
3,与例 1 一样,要注意对象的定义和使用,
私有和保护数据成员是不能访问的,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例对象成员问题的提出?数据成员的类型可以是整数,如 int ID,可以是指针,如 char *name,
等等。 能否用类作为一个类的数据成员?
答案?可以!
作用?丰富对象数据成员的表示。通过简单的类来定义复杂的类。实现代码的重用和共享,提高代码的可维护性。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 3。对象成员的应用,设类 score 已知,
其头文件定义 score.h 为:
class score {
public,//公有成员
private,//私有成员
}; //类结束标志注意:通常也将 C++的头文件称为 *.hpp
score(float,float,float); //构造函数
score( ); //构造函数
void print( ); //打印成绩
void modify( float,float,float); //修改成绩
float computer;
float english;
float mathematics;
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 score.cpp
#include,score.h” //可否不包含 score.h?
#include <iostream.h>
score::score(float c,float e,float m) //构造函数
{ computer = c;
english = e;
mathematics =m; }
score::score( )
{ computer=english=mathematics=0; }//缺省构造函数
void score::modify(float c,float e,float m)
{ computer=c; english=e; mathematics =m; }
void score::print( )
{ cout << " \n score computer," << computer
<< " \n score english," << english
<< " \n score mathematics," << mathematics; }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例定义类 student,并将类 score作为其成员
//文件 student.h
#include "score.h" //包含类 score
class student { //定义类 student
public,//公有成员
private:
};
student(int,char *,float,float,float);
~student( ); //析构函数
void modify(int,char *,float,float,float)
void print( );
int number; //学号
char *name; //姓名
score s; //成绩,是类 score的对象第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例问题的提出?构造函数如何写?
数据成员 s 如何初始化?
如何访问 s 中的成员函数?
解决的方法?
在构造函数中调用 s 的构造函数,
像对类中常量和引用一样,采用初始化表来初始化类中的成员数据 s.
s 中的成员函数可由对象 s 发送消息激活,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 student.cpp
#include "student.h" //可否包含 score.h?
student::student(int n,char *na,
float s1,float s2,float s3):s(s1,s2,s3)
{ number =n;
name=new char[strlen(na) + 1];
strcpy(name,na); }
student::~student( ) { delete name; }//析构函数
void student::modify(int n,char *na,float s1,
float s2,float3)
{ number = n; name =na;
s.modify(s1,s2,s3); // 调用类 s 的成员函数 }
void student::print( )
{ cout << " \n number," << number << " name,"
<< name;
s.print( ); // 调用类 s 的成员函数 }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 main.cpp
#include " student.h " //包含类 student 的定义
void main ( )
{ student astudent(28," Wu ",78,64,69);
astudent.print( );
astudent.modify(28," Wu ",87,72,70);
astudent.print( ); }
结果,number,28 name,Wu
score computer:78
score English:64
score mathematics:69
number,28 name,Wu
score computer:87
score English:72
score mathematics:70
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 3 有关内容总结
1,类数据成员可以是另一个类的对象:
score s; //以 score 的对象 s 作为成员
2,对对象成员的初始化是通过初始化表来调用原类的构造函数,参数必须由新类指定。
student::student(int n,char *na,
float s1,float s2,float s3):s(s1,s2,s3)
student astudent(28," Wu ",78,64,69);
3,对象成员的构造函数先于新对象的构造函数被执行。
4,对象成员的成员函数可由该对象访问。
s.print( ); s.modify(s1,s2,s3);
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 4:对象成员的应用。我们已定义了类
date 和 employ。现在重新定义 employ,使
date 成为 employ 的对象成员。
//文件 employ.hpp,可以用 *.hpp 为头文件
#include "date.h"
class Employee {
public:
Employee( ); //构造函数
Employee(char* na,int pid); //构造函数
void print( );
~Employee(); //析构函数,为什么要?
private:
char *name; int ID; //姓名和身份证号
Date birthday; //出生日期
};
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
Employee::~Employee( ) //析构函数,
{ delete [ ] name; //删除数组 }
//文件 employ.cpp,类的实现
#include<iostream.h>
#include<string.h>
#include " employ.hpp " //注意:是 *.hpp文件
Employee::Employee( ),//缺省构造
{ name= " "; ID=0; }
Employee::Employee(char* na,int pid,
int d,int m,int y):Date(d,m,y)
{ name=new char[strlen(na)+1];
strcpy(name,na);
ID=pid; }
void Employee::print( )
{ cout << "name=" << name << "; ID= "
<< ID << endl;
birthday.print ( ); }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 employ.cpp,类的实现
#include<iostream.h>
#include " employ.hpp " //注意:是 *.hpp文件
void main.( )
{ Employee e( "Li Hua",322,20,6,1982);
cout << "Birthday,";
e.print( );
}
结果,name=Li Hua; ID= 322
Birthday,20-6-1982
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 5:定义时间类,含时、分、秒及显示时间,
下一个时间、上一个时间的计算。
//文件 time.hpp
#ifndef TIME_H
#define TIME_H
class time {
public:
private:
};
#endif
time( int=0,int=0,int=0) ; //构造函数
void print( ); //显示时间
void NTime( ); //下一个时间
void LTime( ); //上一个时间
int hr; //小时
int min; //分钟
int sec; //秒第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//文件 time.cpp
#include <iostream.h>
#include "time.h"
time::time(int h,int m,int s)
{ hr=h; min=m; sec=s; }
void time::print( )
{ cout << "time:" << hr << "-" << min
<< "-" << sec << endl; }
void time::NTime( )
{ if(sec<=58) sec++;
else {sec=0;
if(min<=58) min++;
else {min=0;
if(hr<=22) hr++;
else hr=0; } } }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
void time::LTime( )
{ if(sec != 0) sec--;
else
{ sec=59;
if(min != 0) min--;
else
{ min=59;
if(hr != 0) hr--;
else hr=23;
}
}
}
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例课 堂 总 结
1 类的定义及实现,公有、保护和私有成员,
函数一般为公有或保护,数据为私有和保护,
2 类的定义、实现和应用可放在一个文件,
通常放在 三个文件 之中,如
student.h,student.cpp 和 main.cpp.
3 类中数据成员的初始化,构造函数 和析构函数,
4 类的成员可以是对象,如 Date birthday;
称为对象成员,由初始化表来初始化,应用对象成员可由简单的类构造复杂的类,
5 注意在复杂结构中编程的正确性,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例作 业
1,设已定义了类“日期”如下:
#include <iostream.h>
class Date {
public:
Date(int d=1,int m=1,int y=2000)
{ day=d; month=m; year=y;};
void print( )
{ cout << day << "-" << month
<< "-"<< year; } ;
private:
int day,month,year; };
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例试定义类 student,它包含:
( 1)私有数据为 name,sid,birthday,分别表示学生姓名、学号和出生日期。
( 2)公有函数为一个带缺省参数的构造函数,一个无返回值的 print()函数打印学生的姓名、学号和出生日期;一个无返回值的函数 modify,用以修改学生的姓名和学号。
( 3)定义一个主函数,且创建两个对象 s1
和 s2,分别调用缺省和非缺省构造函数。并分别调用打印函数。
( 4)写出主函数的打印结果。