第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
6.1 类定义与对象声明
6.2 对象的使用第五讲 类与对象第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
6.1 类定义与对象声明为什么定义类? 把现实世界的事物归纳成类,以贴近自然的方式描述现实系统类的组成? 类名,数据成员 (属性、
data member),成员函数 (服务,member
function)
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例类的定义?
class className //以关键字 class 开头
{
public,//类的 公有成员
data members; //公有数据成员
member functions; //公有成员函数
protected,//类的 保护成员
data members; //保护数据成员
member functions; //保护成员函数
private,//类的 私有成员
data members; //私有数据成员
member functions; //私有成员函数
}; //以括号及分号结束,体现封装缺省时为私有成员 (private)
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 1:定义并实现类 student
#include<iostream.h>
class student //定义类
{ public,//类的公有成员
void input(float s) {score=s;}
void modify(float s) {score=s;}
void display( )
{ cout << "\n score,"<< score; }
private,//类私有成员
float score;
};
void main( ) //主函数
{ student ss; //声明对象
ss.input(88.5); //调用成员函数
ss.display( ); }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例问题? 类的定义和实现放在一起好不好?
结论? 不好!
方法? 类的定义放在 student.h
类的实现放在 student.cpp
优点? 1。把类的定义与实现分离开来,
便于文挡管理、维护。
2。可将类的实现隐蔽起来,使软件开发商能独立开发软件。
3。便于团体式的大型软件开发。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2,文件 student.h
#ifndef STUDENT_H //条件编译
#define STUDENT_H
class student //定义类
{ public,//类的公有成员
void input(int n,char *na,float s);
void modify(float s);
void display( );
private,//类私有成员
int number; //学号
char *name; //姓名
float score; //成绩
};
#endif
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2,文件 student.cpp
#include<iostream.h>
#include "student.h" //必须包含类的定义
void student::input(int n,char *na,float s)
{ number=n;
score=s;
name=new char[strlen(na) + 1];
strcpy(name,na); }
void student::modify(float s) {score=s;}
void student::display( )
{ cout << "\n number,"<< number;
cout << "\n name:"<< name;
cout << "\n score,"<< score; }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2,文件 main.cpp
#include "student.h "//要包含类 student的定义
void main( ) //主函数
{
student ss; //声明对象
char na[]= " WANG QIAN ";
ss.input(9901,na,88.5); //调用成员函数
ss.display( );
}
结果,number,9901
name,WANG QIAN
score,88.5
注意,函数
input的作用为初始化。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2 总 结
1。有三个文件:
student.h (类的头文件)
student.cpp (类的实现文件)
main.cpp (主文件,即应用程序)
2。 类的成员函数实现方法是用,,引导。
如:
void student::display( ) {……}
4。 在 Microsoft Visual C++开发环境中的具体应用(实验课内容)
3。 在头文件中应加入 条件编译,以免多次包含,如,#ifndef STUDENT_H …...
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例对象的声明例 3,对象的声明及成员函数调用
#include "student.h "
void main( )
{ student s2;
s2.input(9902,"Li ",90);
s2.display( ); //公用成员函数
s2.modify(95); //公用成员函数
s2.display( ); }
结果,number,9902
name,Li
score,90
number,9902
name,Li
score,95
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例构造函数与析构函数构造函数? 创建并初始化类的数据成员析构函数? 削除对象,释放内存 。
回想一下变量和函数参数的初始化变量? 定义与赋值结合起来,
int number=9902;
函数? 应用缺省参数,
void add(int a=0,int b=0);
目的? 便于编程、保证变量的值不会无意义,减小程序出错的可能性。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例构造函数的定义? 类名(参数表);
析构函数的定义类名( );
注意:没有
input函数文件 student.h 改为
class student
{
public:
student( ); //缺省 构造函数
student(int n,char *na,floar s); //构造函数
student( ); //析构函数
void modify(float s);
void display( );
private:
int number;
char *name;
float score; };
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例构造函数的特点:
1,与类同名,
2,没有返回值,
3,可以定义多个构造函数,
4,在创建对象时被自动调用,
构造函数应用注意点,
1,若自己不定义构造函数,编译程序提供一个缺省构造函数
2,若程序用到指针,则应自定义构造函数,
以减少程序出错机会,
3,构造函数和析构函数应成对定义,以养成良好的编程习惯,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 2(续 ) 文件 student.cpp 加上,
student::student( )
{ number=0;
score=0;
name= " "; }
student::student(int n,char *na,float s)
{ number=n;
score = s;
name=new char[strlen(na)+1];
strcpy(name,na); }
student::~student( )
{ delete name; }
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例文件 main.cpp变为
#include "student.h "
void main( )
{ student s1; //用缺省构造函数初始化
student s2(9902,“Li,,90); //创建时用
//带参数构造函数初始化
s2.display( ); //公用成员函数
s2.modify(95); //公用成员函数
s2.display( ); }
结果,number,9902
name,Li
score,90
number,9902
name,Li
score,95
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例拷贝构造函数和赋值构造函数问题的提出? 声明创建对象时,把一已知的对象初始化该对象即想做到,
student s1(9901,”XU”,88);
student s2=s1; //即为 赋值 构造函数
student s3(s1); //即为 拷贝 构造函数目的? 使编程更为简便、有效、实用。
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 3:平面点类 point
//save as point.h
class point
{ public,//公有成员
point( ); //缺省 构造函数
point(float x1,float y1);//带参 数构造函数
point( const point &p); //拷贝 构造函数
void show( ); //打印 显示点
void move(float x1,float y1); //移动点
private,//私有成员
float x; //点的横坐标
float y; //点的纵坐标
}; //类定义结束第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//save as point.cpp
#include " point.h "
point::point( ) { x=0; y=0; } //缺省构造函数
point::point(float x1,float y1)//参数构造函数
{x=x1; y=y1;}
point::point(const point &p) //拷贝构造函数
{ x=p.x;
y=p.y; }
void point::show( )
{ cout <<?Point(x,y)=(? << x
<<?,? << y <<?)? << endl; }//显示点
void point::move(float x1,float y1)//移动点
{
x=x+x1; y=y+y1;
}
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
//save as main.cpp
#include point.h
void main( )
{ point p1; //调用缺省构造函数,x=0,y=0
point p2(2,2); //调用参数构造函数
point p3(p2); //调用拷贝构造函数
p1.move(5,5);
p1.show( );
p2.show( );
p3.show( ); }
结果,Point(x,y)=(5,5)
Point(x,y)=(2,2)
Point(x,y)=(2,2)
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例类中常量和引用的初始化:初始化表问题的提出? 类中的变量及对象的初始化已学,如何初始化常量和引用?
方法? 应用初始化表,注意在类定义中不能直接用:
class student
{
……
private:
float score;
float &rs=score; // 错!
const float total=100;// 错!
};
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 4:应用初始化表来 初始化 常量和引用
#include<iostream.h>
class initi_data
{ private:
int x; int &rx; const float pi;
public:
initi_data(int x1):rx(x),pi(3.14) { x=x1; }
void display ( )
{ cout << "x= " << x << ",rx= " << rx
<< ",pi= " << pi << endl; }
};
void main( )
{ initi_data ob(100); ob.display( ); }
结果,x= 100,rx=100,pi=3.14
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
6.2 对象的使用对象的创建?
classname ob_name;
classname ob_name(parameterlist);
classname *op_name=new class(parameterlist);
例如:
student s1;
student s2(9904,"Li Hua ",97);
student *ps=new student(9903,"Ma Tao",90);
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例消息驱动对象
s2.modify(98); //间接 访问 modify
s2.display( ); //间接 访问 display
ps->display( ); //直接 访问 display
(*ps).display( ) //间接 访问 display
结果,number,9904
name,Li Hua
score,98
number,9903
name,Ma Tao
score,90
number,9903
name:Ma Tao
score,90
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例数据成员和成员函数引用规则
1,公有成员函数可由 外部 任意调用 。
公有数据成员可由 外部 任意调用,修改
2,保护成员函数可由 继承类 和 友员 调用 。
保护数据成员可由 继承类 和 友员 调用修改,体现了继承的概念,
3,私有成员函数仅可在 类的体内和友员 调用 。
私有数据成员仅可由 类的体内函数和友员调用修改,起到了保护作用,体现了封装的概念,
第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例在例 2中,若在应用程序 (main.cpp)中有:
cout << s2.score; // 错,外部不能访问私有
// 数据
cout << s2.number // 错,外部不能访问私有
// 数据
s2.score=98; //错,外部不能修改私有数据但体内函数可以调用修改,如
void student::modify(float s) {score=s;}
void student::display( )
{ cout << "\n number,"<< number;
cout << "\n name:"<< name;
cout << "\n score,"<< score; }
类的封装体现第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例
This 指针什么是 This 指针?指向对象自己的指针。
是高级编程有力的工具,目前仅作一般了解作用? 运算符重载,函数成员嵌套调用注意点? 不必关心 This 指针的创建和删除由编译程序控制第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例例 5,This 指针的应用
#include<iostream.h>
class test
{public,
test(int x1) {x=x1;} //构造函数
void print( )
{cout << " x = " << x << endl;
cout << " this->x = " << this->x << endl;
cout << "(*this).x= " << (*this).x << endl;}
};
void main ( )
{ test a(12); a.print( ); }
结果,x=12
this->=12
(*this).x=12
第 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 类中常量和引用的初始化,初始化表
5 类的对象初始化,拷贝构造函数
6 类的成员被访问规则,是 OOT的基础
7 This 指针:指向对象自己的指针第 6章 类与对象
6.1 类定义与对象声明
6.2 对象的使用
6.3 对象成员
6.4 友员 friend
6.5 静态成员和对象组织
6.6 模板
6.7 应用举例作 业教材第 204页习题六:第1、8题补充题:改正下列程序中的错误
include <iostrea.h>;
class student
{ public
void student( )
void display( )
{ cin <<?number:? << number << endl
cout << name,<< name << endl;
cout << score,<< score << endl;
private,
int number,char *name,float score;
}