版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
教学目的与要求:了解对象的综合使用。掌握对象数组和对象指针的使用及对象作为函数参数。教学内容提要:1、对象数组;2、与对象有关指针;3、对象作为函数参数教学重点:对象数组、对象指针。教学难点:对象数组、对象指针。教学进度:P74~P84教学过程:第10
讲对象数组和指针及对象作为函数参数声明:类名数组名[元素个数];访问方法:数组名[下标] .
成员名对象数组的初始化:数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。通过初始化列表赋值。例:Point
A[2]={Point(1,2),Point(3,4)};如果没有为数组元素指定显式初始值,数组元素便使用缺省值初始化(调用缺省构造函数)。【
10.1
对象数组】4.数组元素所属类的构造函数:不声明构造函数,则采用缺省构造函数。各元素对象的初值要求为相同的值时,可以声明具有缺省形参值的构造函数。Point::Point(int
x=0,int
y=0){
X=x;
Y=y;}Point
obj[4];各元素对象的初值要求为不同的值时,需要声明带形参(无缺省值)的构造函数。Point::Point(int
x,int
y){
X=x;
Y=y;}Point
obj[3];//errorPiont
obj[3]={Point(1,2),
Point(3,4),
Point(5,6)}当数组中每一个对象被删除时,系统都要调用一次析构函数。Location::Location(int
xx,int
yy){
X=xx;Y=yy;cout<<
"Constructorcalled."<<endl;}Locatuon::~Location(
){cout<<"Destructor
called.“<<endl;}void
Location::Move(int
x,int
y){X=x;Y=y;}例10.1#include<iostream.h>class
Location{
public:Location(
);Location(int
xx,int
yy);~Location(
);void
Move(int
x,int
y);int
GetX(
)
{return
X;}int
GetY(
)
{return
Y;}private:int
X,Y;};Location::Location(
){
X=Y=0;cout<<"Default
Constructorcalled."<<endl;}5.对象组应用举例:int
main(
){cout<<"Entering
main..."<<endl;Location
A[2]={Location(1,3),Location(4,5)};for(int
i=0;i<2;i++)A[i].Move(i+10,i+20);cout<<"Exiting
main..."<<endl;return
0;}Entering
main...Constructor
called.Constructor
called.Exiting
main...Destructor
called.Destructor
called.指针可以指向任一类型的变量,也可以指向对象。1.对象的指针声明一个指针来保存对象的地址,这个指针就是指向对象的指针,简称对象的指针。对象的指针的声明方法与普通变量的指针相同。形式如下:类名*对象的指针名通过对象的指针间接访问对象成员的方式相应地表示为:(*对象的指针名).数据成员名
//访问数据成员(*对象的指针名).成员函数名(参数表)//访问成员函数注因为间接访问运算符“*”的优先级低于成员选择运算符“.”,所以表达式中对象的指针名两边的圆括号不能省略。【
10.2
与对象有关的指针】例如—-声明的类Cylinder,可做如下声明和访问:Cylinder
cylinder1;Cylinder
*pcylinder=&cylinder1;(*pcylinder).setcylinder(20.0,20.0);(*pcylinder).surfacearea();表述形式如下:对象的指针名->数据成员名;
//访问数据成员对象的指针名->成员函数名(参数表);//访问成员函数“->”也叫做成员选择运算符,该运算符可用于通过对象的指针或结构变量的指针来访问其中的成员。例如—-声明的类Cylinder,也可做如下声明和访问:Cylinder
cylinder1;Cylinder
*pcylinder=&cylinder1;pcylinder
->setcylinder(20.0,20.0);pcylinder->surfacearea();C++语言提供了另一个更常用的方法://声明类class
Date{public:Date(int
y=2001,int
m=1,int
d=1); //带默认值的构造函数//析构函数//用于改变日期的函数//用于输出日期的函数~Date(){}void
setDate(int
y,int
m,int
d);void
showDate()
const;private:int
year,month,day;};Date::Date(int
y,int
m,int
d)//实现构造函数使用对象的指针前也一定要给指针赋一个合法的值。例10.2
对象的指针的声明与访问#include<iostream.h>{
year=y;month=m;day=d;}void
Date::setDate(int
y,int
m,int
d)//实现改变日期的函数{
year=y;month=m;day=d;//实现输出日期的函数}void
Date::showDate()
const{cout<<year<<“年”<<month<<“月”<<day<<“日”<<endl;}void
main(){Date
date;Date
*pdate=&date;//声明对象//声明对象的指针(续)date.showDate();pdate->showDate();//改变日期值date.setDate(2001,6,30);date.showDate();pdate->showDate();pdate->setDate(2001,12,31);date.showDate();pdate->showDate();}2001年1月1日2001年1月1日2001年6月30日2001年6月30日2001年12月31日2001年12月31日(续)//通过对象名访问公有成员函数//通过对象的指针访问公有成员函数由于this指针的隐含性,在一般情况下并不需要显式标明。注调用一个对象的成员函数时,编译系统会首先将这个对象的地址赋给被调用的成员函数中的this指针,然后再调用成员函数。成员函数访问数据成员时就隐含地使用this指针来确保访问到的数据成员属于这个对象。2.
this指针比如:
Date::Date(int
y,int
m,int
d){this->day=d;}this->year=y;this->month=m;说明:显式使用了this指针,明确地表示出成员函数当前所操作的数据成员所属的对象。this指针也是一个指向对象的指针,它隐含在类成员函数中,用来指向成员函数所属类的正在被操作的对象。this指针的使用//声明类#include<iostream.h>class
Date{public:Date(int
y=2001,int
m=1,int
d=1);//带缺省值的构造函数~Date(){} //析构函数void
setDate(int
y,int
m,int
d);//用于改变日期的函数//用于输出日期的函数void
showDate()
const;private:int
year,month,day;};//实现构造函数Date::Date(int
y,int
m,int
d){this->year=y;//显式使用this指针this->month=m;
//this指针指向正在被操作的对象例10.3this->day=d;}void
Date::setDate(int
y,int
m,int
d) //实现改变日期的函数//显式使用this指针//this指针指向正在操作的对象{
this->year=y;this->month=m;this->day=d;}void
Date::showDate()const //实现输出日期的函数{
cout<<this->year<<“年”<<this->month<<“月”<<this->day<<“日”<<endl;}void
main(){Date
date(2001,1,1);Date
*pdate=&date;date.showDate();pdate->showDate();//声明对象//声明对象的指针//通过对象名访问公有成员函数//通过对象的指针访问公有成员函数date.setDate(2001,6,30); //改变日期(续)date.showDate();date.showDate();pdate->showDate();}注静态成员函数没有this指针3.
指向类成员的指针类中的数据成员和成员函数在类实例化后在内存中也有一定的存储地址,可以声明指向类成员的指针。通过这些指针,可以访问对象的成员。指向成员函数的指针(简称成员函数指针)指向类成员的指针指向数据成员的指针(简称数据成员指针)pdate->showDate();pdate->setDate(2001,12,31);说明:显式使用this指针所完的任务都可以由系统隐含完。(续)在这里赋值也就是确定指针指向类中的哪一个成员。对于数据成员指针,赋值的形式如下:数据成员指针名=&类名::数据成员名对于下面声明的类A
比如,
class
A{
public:...int
a;...};数据类型是指数据成员指针所指向的数据成员的类型。类名是数据成员所属类的名称。在使用前必须声明并赋值声明一个数据成员指针的形式如下:数据类型
类名::*数据成员指针名;int
A::*p=&A::a;等价int
A::*p;p=&A::a;由于类本身是一个类型,不是变量,系统并不为类分配内存。在声明
了指向类成员的指针后,还需要指定该类的一个对象来实例化这个类。注在使用时还必须通过指定的对象名或指向这个对象的指针来访问数据成员指针所指向的成员。访问数据成员的表述形式如下:对象名.*类成员指针名对象指针名->*类成员指针名//通过对象名访问//通过对象的指针访问可以用下式声明指向这个类的数据成员a的指针p。数据成员指针的使用//声明类//EXAMPLE4_6.H#include<iostream.h>class
A{public:A(double
x1=0.0,double
y1=0.0);~A(){}void
setxy(double
x1,double
y1);void
outputxy()const;double
x;private:double
y;};//EXAMPLE4_6.CPP#include″EXAMPLE4_6.H″A::A(double
x1,double
y1):x(x1),y(y1){}例10.4void
A::setxy(double
x1,double
y1){x=x1;y=y1;}void
A::outputxy()
const{cout<<″x=\t″<<x<<″\ty=\t″<<y<<endl;}voidmain(){A
a(1.5,2.6),*pa=&a;
//声明类A的对象a及指针pa,并让对象pa
指向adouble
A::*px=&A::x;a.outputxy();//声明指向类A的double型数据成员的指针//并使其指向公有成员x//调用成员函数输出cout<<″a.x=\t″<<a.x<<endl;
//利用对象名直接访问成员xcout<<″a.*px=\t″<<a.*px<<endl;
//利用对象名和数据成员指针//间
接访问xcout<<″pa->*px=\t″<<pa->*px<<endl;
//利用对象的指针和//成员指针间接访问x}(y=2.6x=
1.5a.x=
1.5a.*px=
1.5pa->*px=
1.5例10.5#include<iostream.h>class
Point{
public:Point(
){
X=Y=0;
cout<<"Default
Constructorcalled.\n";}Point(int
xx,int
yy);{ X=xx;
Y=yy;
cout<<
"Constructorcalled.\n";
}~Point(
)
{ cout<<"Destructor
called.\n";
}int
GetX(
)
{return
X;}int
GetY(
)
{return
Y;}void
Move(int
x,int
y){
X=x;
Y=y;
}private:int
X,Y;};void
main(
){ cout<<"Step
One:"<<endl;Point
*Ptr1=new
Point;delete
Ptr1;cout<<"Step
Two:"<<endl;Ptr1=new
Point(1,2);
delete
Ptr1;}运行结果:Step
One:Default
Constructor
called.Destructor
called.Step
Two:Constructor
called.Destructor
called.{
//类的声明同例,略};void
main(
){ Point
*Ptr=new
Point[2];//创建对象数组Ptr[0].Move(5,10);Ptr[1].Move(15,20);//通过指针访问数组元素的成员//通过指针访问数组元素的成员cout<<"Deleting..."<<endl;}delete[]Ptr;
//删除整个对象数组运行结果:Default
Constructor
called.Default
Constructor
called.Deleting...Destructor
called.Destructor
called.例10.6#include<iostream.h>class
Point【10.3
向函数传递对象】10.3.1
使用对象作为函数参数例10.7#include<iostream.h>class
aClass{public:aClass(int
n)
{
i=n;
}void
set(int
n){
i=n;
}int
get(
){
return
i;
}private: int
i;};void
sqr(aClass
ob){
ob.set(ob.get()*ob.get());cout<<"copy
of
obj
has
i
value
of
";cout<<ob.get()<<"\n";}void
main(){
aClass
obj(10);sqr(obj);cout<<"But,
obj.i
isunchanged
in
main:";cout<<obj.get(
);}10.3.2
使用对象指针作为函数参数例10.8#include<iostream.h>class
aClass{
public:aClass(int
n)
{
i=n;
}void
set(int
n){
i=n;
}int
get(){
return
i;}pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024至2030年中国消防通风低噪声柜式离心风机行业投资前景及策略咨询研究报告
- 2024至2030年中国防盗器五金配件行业投资前景及策略咨询研究报告
- 2024年磷化镓晶体(GAP)项目成效分析报告
- 2024至2030年中国蜂房式线绕过滤芯行业投资前景及策略咨询研究报告
- 2024至2030年中国艳古铜色电解着色剂行业投资前景及策略咨询研究报告
- 2024至2030年中国精氨酸数据监测研究报告
- 企业三级安全教育培训
- 2024至2030年中国焦性没食子酸数据监测研究报告
- 2024至2030年中国方型针阀滴量器数据监测研究报告
- 2024至2030年中国对焊式管座数据监测研究报告
- 上海市交大附中附属嘉定德富中学2024-2025学年九年级上学期期中考数学卷
- 人工智能智能制造设备维护与管理手册
- 2024年大学生就业创业知识竞赛题库及答案(共350题)
- 基于SICAS模型的区域农产品品牌直播营销策略研究
- 《算法设计与分析基础》(Python语言描述) 课件 第6章分支限界法
- 2024年福建省残疾人岗位精英职业技能竞赛(美甲师)参考试题库(含答案)
- 2024秋期国家开放大学专科《液压与气压传动》一平台在线形考(形考任务+实验报告)试题及答案
- 田径训练论文开题报告
- 个人健康管理平台使用操作教程
- 新版《铁道概论》考试复习试题库(含答案)
- DB11T 2315-2024消防安全标识及管理规范
评论
0/150
提交评论