c++类与对象基础(2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、对象数组
A aa1[2]={A(2,3),A(6,7)};
aa1[0]=A(2,3); aa1[1]=A(6,7);
20
#include <iostream.h> class M 执行结果:0,7 {public: 2,3 M(int i,int j) { m=i;n=j; } 5,6 M( ) { m=n=0; } 7,8 void Setxy(int i,int j) {x=i;y=j;} 2,5 int Getm( ) { return m ;} int Getn( ) { return n ;} private: int m,n; }; M mm1[3]; void main( ) { M mm2[4]={M(2,3), M(5,6), M(7,8), M(2,5)}; mm1[1]= M(5,9); mm1[2]= M(2,7); cout<<mm1[0].Getm( )<<“,”<<mm1[2].Getn( )<<endl; for(int i=0;i<4;i++) 21} cout<<mm2[i].Getm( )<<“,”<<mm2[i].Getn( )<<endl;
25
常量成员
常 类 型
常类型主要用于对数据保护,防止程序对数 据的修改。
26
常量成员
一、基本常数据类型
常 类 型
以int类型为例: 1.const int r=100; //标准const变量声明加初始化,初始化 是必须的,编译器经过类型检查后直接用100在编译时替 换. 2.extend const int r=100; //将const改为外部连接,作用于扩大至全局,编译时会分 配内存,并且可以不进行 初始化,仅仅作为声明,编译器认 为在程序其他地方进行了定义. 3.const int r[]={1,2,3,4}; struct S {int a,b;}; const S s[]={(1,2),(3.4)}; //以上两种都是常量集合,编译器会为其分配内存
3
goto next_year; else return girl.goto( another_boy); } return girl.goto( another_boy); } •该程序的特点:接近生活,容易表达和理解 •面向对象的程序设计思想
4
本章主要内容
对象指针和对象引 用 友元 类模板
常类型和数据保护
对 象 程序中常常使用指向对象的指针来做函数 指 参数,其优点是: 针 和 ①实现传址调用 对 ②对象指针作函数形参时,要求实参是对 象 象的地址值,不进行副本的拷贝,从而 引 减少开销,提高运行效率。 用
二、指向对象的指针和对象引用
13
#include <iostream.h> class M {public: M(int i,int j) { x=i;y=j; } M( ) { x=y=0; } void Setxy(int i,int j) {x=i;y=j;} void Copy(M *m); void Print( ) { cout<<x<<“,”<<y<<endl; private: int x,y; }; void fun(M m1,M *m2) { m1.Setxy(20,45); m2->Setxy(30,40); }
void M::Copy(M &m) { x=m.x; y=m.y; } void main( ) { M p(8,10),q; q.Copy(p); fun(p, q); p.Print( ); q.Print( ); }
16
二、指向对象的指针和对象引用
对 象 3. this指针 指 针 this指针指向一个当前正在被某个成员函 和 数操作的对象。 对 每次成员函数访问对象成员时,则隐含使 象 用this指针。 引 用
类和对象基础(2)
1
一个有趣的软件工程作业
#define AND && RESULT love(boy, girl) { if( boy.有房() AND boy.有车() ) { boy.Set(Nothing); return girl.嫁给(boy); } else if( girl.愿意等() ) { next_year: for( day=1; day<=365; day++) { if( day == 情人节 ) if( boy.GiveGirl(玫瑰) ) girl.感情++;
17
#include <iostream.h> void A::Copy(A &aa) class A { {public: if(this= =&aa) A(int i,int j) { a=i;b=j; } return; A( ) { a=b=0; } *this=aa; void Copy(A &aa); } int Rerurna( ) { return a ;} int Rerurnb( ) { return b ;} 第一次使用this指针 private: 判断对象a1的地址是否 int a,b; 与&aa相等。第二次将 }; 实参给定的对象值a2赋 给对象a1。 void main( ) { A a1,a2(3,4); a1.Copy(a2); cout<<a1. Rerurna( )-a2. Rerurna( )<<“,”; cout<<a1. Rerurnb( )+a2. Rerurnb( )<<endl; }
18
对 该数组中的元素必须是同一个类的对象。 象 指 针 1. 对象数组的定义 和 格式:<类名> <对象数组名>[<大小>]… 对 象 例如:Tdate date1[5]; 引 Tdate date2[3][5]; 用
一、对象数组:是指数组元素为对象的数组。
19
对 象 2. 对象数组的赋值 指 class A 针 { public: 和 A(int i,int j) {a=i;b=j;} 对 private: 象 int a,b; 引 用 }
7
一、指向类的成员的指针
对 象 2. 指向成员函数的指针 指 针 指向一般函数(函数不属于类)的指针的 和 定义: 对 存储类型 数据类型 (*函数指针名)(); 象 引 例 void (*p)( )=fun;//fun为某函数 用
(*p)( );//调用fun函数
8
一、指向类的成员的指针
对 象 2. 指向成员函数的指针 指 针 <类型说明符> (<类名>::*<指针名>)(<参数表>); 和 对 例如:一个类A有一个int fun( ) 成员函数,则 int (A::*pf)( )=A::fun; 象 引 用 成员函数 定义成员 参数表 赋初值
或p->成员名
11
#include <iostream.h> class Sample {public: Sample(int i) { a=i; } int fun(int b) {return a*c+b;} int c; private: int a; }; void main( ) { Sample A(2); //定义对象A,有A.a=2 int *pc; //定义数据成员指针变量 pc=&A.c; *pc=3; //语句等价于A.c=3 int (Sample::*pfun)(int); //定义成员函数指针变量 pfun=Sample::fun; Sample *p=&A; //定义对象指针 cout<<“(p->*pfun)(4)=”<<(p->*pfun)(4)<<endl;//等价于A.fun(4) 12 }
的类型 函数指针
9
一、指向类的成员的指针
对 象 2. 指向成员函数的指针 指 针 可以通过对象来调用指向成员函数的指针 和 对 例 int (A::*pf)( )=A::fun; 象 A a; 引 (a.*pf)(<实参表>); 用
10
二、指向对象的指针和对象引用
对 象 1. 指向对象的指针:即对象指针 指 针 例 A a; 和 A *p=&a; 对 用对象指针来对指向对象的成员(数据成员或函数成 象 员)进行操作: 引 用 ( *p).成员名;
15
#include <iostream.h> class M {public: M(int i,int j) { x=i;y=j; } M( ) { x=y=0; } void Setxy(int i,int j) {x=i;y=j;} void Copy(M &m); void Print( ) { cout<<x<<“,”<<y<<endl;} private: int x,y; }; void fun(M m1,M &m2) { m1.Setxy(20,45); m2.Setxy(30,40); }
23
对 象 指 针 和 对 象 引 用
三、对象指针数组:数组元素为指向对象的指针
该数组中的元素必须是指向同类对象的指针
格式:<类名> *<数组名>[<大小>]… 对象指针数组与一般数组相似,只是 数组的元素不同。
24
#include <iostream.h> class A {public: A(int i,int j) { a=i;b=j; } void Print( ) 执行结果:0,0 {cout<<a<<“,”<<b<<endl;} 8,9 private: 7,8 int a,b; 3,6 }; void main( ) { A a1,a2(8,9),a3(7,8),a4(3,6); A *m[4]={&a1,&a2,&a3,&a4};//定义对象指针数组m for(int i=0;i<2;i++) m[i]->Print( ); }
对象的赋值和拷贝
类的静态成员
5
一、指向类的成员的指针
对 象 1. 指向数据成员的指针 指 格式:<类型说明符> *<指针名>; 针 和 例如:一个对象A有一个int x数据成员,则 对 int *p=&A.x; 象 引 用 数据成员 定义p为 赋初值
的类型 指针变量
6
一、指向类的成员的指针
对 象 1. 指向数据成员的指针 指 针 可以通过对象来引用指向数据成员的指针 和 对 例 A a; 象 a.*p=8;// 运算符“.*” 引 用
void M::Copy(M *m) { x=m->x; y=m->y; } int main( ) { M p(8,10),q; q.Copy(&p); fun(p,&q); p.Print( ); q.Print( ); retrun 0; }
14
二、指向对象的指针和对象引用
对 象 指 2. 对象引用 针 和 使用对பைடு நூலகம்引用作函数参数比起使用对象 对 指针作函数参数更为直观和方便。 象 引 用
对二、指向对象数组的指针 象 指 格式:<类名> (*<指针名>)[<大小>]… 针 和 例如:A (*pAa)[10]; 对 象 //pAa是一个指向一维对象数组的指针名 引 用
22
#include <iostream.h> class A void main( ) {public: { A aa[2][3]; A(int i,int j) { a=i;b=j; } int m=5,n=10; A( ) { a=b=0; } for(int i=0;i<2;i++) void Print( ) for(int j=0;j<2;j++) {cout<<a<<“,”<<b<<endl;} aa[i][j]=A(m+=2,n+=5); private: A (*pAaa)[3]=aa; int a,b; for(i=0;i<2;i++) }; { cout<<endl; for(j=0;j<2;j++) (*(*(pAaa+i)+j).Print( ); } 执行结果: cout<<endl; 7,15 9,20 11,25 } 13,30 15,35 17,40
2
else girl.感情--; if( day == girl.生日) if( boy.GiveGirl(玫瑰) ) girl.感情++; else girl.感情--; boy.拼命赚钱(); } 年龄++; girl.感情--; if( boy.有房() AND boy.有车 () ) { boy.Set(Nothing); return girl.嫁给(boy); } else if( boy.赚钱 > 100,000 AND girl.感情 > 8 )
相关文档
最新文档