版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象技术第1页,共32页,2023年,2月20日,星期四面向对象技术类和对象成员函数的重载构造函数析构函数继承MFC——简单了解第2页,共32页,2023年,2月20日,星期四1.类和对象类是一组性质相同的对象的程序描述,它由概括了一组对象共同性质的数据和函数组成。对象指的是一个实体的实例,在这个实体中包括了特定的数据和对这些数据进行操作的函数。对象的核心概念就是通常所说的
“封装性”(encapsulation)、
“继承性”(inheritance)、
“多态性”(polymorphism)。第3页,共32页,2023年,2月20日,星期四1.类和对象以下描述更易理解类与对象的关系:类——数据类型对象——类的变量第4页,共32页,2023年,2月20日,星期四类例1:classworker{charname[20];//成员数据intid;floatsalary;floatsumsal;public:voidsal_year()//成员函数{sumsal=salary*12;}voidprint(){cout<<“工号为”<<id<<“的员工”<<name<<“的年度总工资为:”<<sumsal;}};第5页,共32页,2023年,2月20日,星期四类class<类名>{
private://默认权限
<私有数据成员和成员函数>;
protected:
<保护数据成员和成员函数>;
public:
<公有数据成员和成员函数>;};第6页,共32页,2023年,2月20日,星期四类类的成员函数的定义位置1.类中的成员函数在类定义中直接描述,如例1。2.类的成员函数也可以另外定义,而在类定义时给出函数头。classworker{charname[20];//成员数据intid;floatsalary;floatsumsal;public:voidsal_year();//成员函数voidprint();};voidworker::sal_year()//成员函数{sumsal=salary*12;}voidworker::print(){cout<<“工号为”<<id<<“的员工”<<name<<“的年度总工资为:”<<sumsal;}第7页,共32页,2023年,2月20日,星期四类
结构和类的唯一区别是:在未指定访问权限时,结构中的成员被默认为公有的而类中的成员被默认为私有的。在所有其他方面,类和结构等价。例如:structS{
intX;//公有的
...}classC{
intX;//私有的
...}
尽管类和结构是等价的,但一般在描述数据时使用结构,在描述数据及对数据的操作时用类。第8页,共32页,2023年,2月20日,星期四对象在定义类时,系统是不会给类分配存储空间的,只有定义类对象时才会给对象分配相应的内存空间。为对象分配存储空间的大小取决于在定义类时所定义的成员的类型和成员的多少。第9页,共32页,2023年,2月20日,星期四对象对象的说明说明对象的方法与说明结构体变量的方法一样,也有三种:第一种,先定义类的类型,再说明对象;第二种,在定义类的同时说明对象;第三种,直接说明对象,而不定义类的类名。第10页,共32页,2023年,2月20日,星期四例,用三种方法定义对象
classA{public:intr,t;};Ax,y;classB{inti,j;public:voidSetdata(inta,intb){i=a;j=b;}voidPrint(void){cout<<i<<‘\t’<<j<<endl;}}b1,b2;
class{public:intc,d;}t1,t2;第11页,共32页,2023年,2月20日,星期四对象对象的使用对象的使用,我们通过一个例子来说明。例:描述一个矩形对象,设置矩形的坐标,并输出其相应的坐标值。分析:一个矩形可用左上角和右下角的两个坐标点来描述,左上角坐标用(left,top)来表示,右下角的坐标用(right,bottom)来描述。假定这四个数的取值均是大于0的正整数。第12页,共32页,2023年,2月20日,星期四#include<iostream.h>#include<math.h>classCrect{private:intleft,top;public:intright,bottom;voidsetcoord(int,int,int,int);//设置坐标值函数voidgetcoord(int*L,int*R,int*T,int*B)//取坐标值的函数{*L=left;*R=right;*T=top;*B=bottom;}voidPrint(void){cout<<“面积=”<<fabs(right-left)*fabs(bottom-top)<<endl;}};第13页,共32页,2023年,2月20日,星期四voidCrect::setcoord(intL,intR,intT,intB){left=L;right=R;top=T;bottom=B;}voidmain(){Crectr,rr;inta,b,c,d;r.setcoord(100,300,50,200);
cout<<“right=”<<r.right<<endl;cout<<“bottom=”<<r.bottom<<endl;r.getcoord(&a,&b,&c,&d);cout<<“left=”<<a<<endl;cout<<“top=”<<b<<endl;r.Print();rr=r;rr.Print();}第14页,共32页,2023年,2月20日,星期四执行后输出:right=300bottom=200left=100top=50
面积=30000
面积=30000第15页,共32页,2023年,2月20日,星期四结合上例,有关对象的使用说明以下几点:1.要用成员选择运算符“.”来访问对象的成员。如r.right和r.getcoord()。当访问一个成员函数时,也称为向对象发送一个消息。用成员选择运算符“.”,只能访问对象的公有成员,而不能访问对象的私有成员或保护成员。如:a=r.
left;b=r.top;
都是不允许的,因成员left和top都是私有的成员。若要访问对象的私有的数据成员,只能通过对象的公有成员函数来获取。如用r.getcoord(&a,&b,&c,&d)来获取对象r的坐标值。2.同类型的对象之间可以整体赋值。如rr=r;3.对象用作函数的参数时,属于赋值调用;函数可以返回一个对象。第16页,共32页,2023年,2月20日,星期四4.与结构体的变量一样,可以定义类类型的指针、类类型的引用、对象数组、指向类类型的指针数组和指向一维或多维数组的指针变量。例如:CRecta[10],*p,b,&pb=b,*pp[5],(*pa)[4];
定义a为对象数组,p为指向对象的指针变量,pb为对象b的引用,pp为指向对象的指针数组,pa为指向一维数组的指针变量。5.一个类的对象可作为另一个类的成员,如:classA{…};classB{Aa1,a2;…};第17页,共32页,2023年,2月20日,星期四2.成员函数的重载函数重载函数重载指同一个函数名可以对应多个函数的实现它允许一个程序内声明多个名称相同的函数,这些函数可以完成不同的功能,并可以带有不同的类型、不同数目的参数及返回值函数重载能减轻用户的记忆负担,并使程序的结构简单、易懂函数重载时要求编译器能惟一地确定采用哪个函数实现函数重载时,要求函数的参数个数或参数类型不同第18页,共32页,2023年,2月20日,星期四例,下面的程序实现两个不同参数类型的重载。#include<iostream.h>#include<math.h>#include<stdlib.h>classMy_class{
public:intplus(int,int);doubleplus(double,double);};intMy_class::plus(intx,inty){returnx+y;}doubleMy_class::plus(doublex,doubley){returnx-y;}voidmain(){My_classData;cout<<“Theresultforplus(int,int)is:”<<Data.plus(5,10)<<endl;cout<<“Theresultforplus(double,double)is:”<<Data.plus(5.0,10.0)<<endl;}第19页,共32页,2023年,2月20日,星期四3.构造函数构造函数构造函数是一种用于创建对象特殊的成员函数,当创建对象时,系统自动调用构造函数,不能在程序中直接调用。构造函数名与类名相同,一个类可以拥有多个构造函数(重载),构造函数可以有任意类型的参数,但不能具有返回类型。 构造函数的作用是:为对象分配空间;对数据成员赋初值;请求其他资源。
第20页,共32页,2023年,2月20日,星期四例3-1:include<iostream.h> classSample {intx,y; public: Sample(){x=y=0;} Sample(inta,intb){x=a;y=b;} Voiddisp() {cout<<”x=”<<x<<”,y=”<<y<<endl; }};voidmain(){Samples1;Samples2(1,2);s1.disp();s2.disp();}此程序的运行结果为:x=0,y=0x=1,y=2第21页,共32页,2023年,2月20日,星期四例3-2:使用构造函数对新产生的对象初始化#include<iostream.h>classC{inti;public:char*name;protected:floatnum[2];public:C(inta,char*s,floatx,floaty){i=a;name=s;num[0]=x;num[1]=y;}voidPrint(){cout<<i<<‘\t’<<name<<‘\t’;cout<<num[0]<<‘\t’<<num[1]<<‘\n’;}};voidmain(){Cc1(25,”张三”,77.8,99.56);c1.Print();}执行程序后,输出:25张三77.899.56第22页,共32页,2023年,2月20日,星期四注意:1.构造函数的函数名必须与类名相同。2.因构造函数是由系统自动调用的,构造函数与其他成员函数不一样,在定义构造函数时,不能指定函数返回值的类型,也不能指定为void类型。3.构造函数可以带参数也可以不带参数。4.若定义的类要说明该类的对象时,构造函数必须是公有的成员函数。第23页,共32页,2023年,2月20日,星期四4.析构函数 当一个对象消失,或用new创建的对象用delete删除时,由系统自动调用类的析构函数。析构函数名字为符号“~”加类名,析构函数没有参数和返回值。一个类中只可能定义一个析构函数,所以析构函数不能重载。 析构函数是用于取消对象成员函数,当一个对象作用域结束时,系统自动调用析构函数。 析构函数的作用是进行清除对象,释放内存等。 当对象超出其定义范围时(即释放该对象时),编译器自动调用析构函数。在以下情况下,析构函数也会被自动调用。
分析例chapter9-2.cpp。第24页,共32页,2023年,2月20日,星期四5.继承继承是面向对象程序设计的基本特征之一,是从已有的类基础上建立新类。通过C++语言中的继承机制,一个新类既可以共享另一个类的操作和数据,也可以在新类中定义已有类中没有的成员,这样就能大大的节省程序开发的时间和资源。第25页,共32页,2023年,2月20日,星期四B1,B2的派生类(多继承)AB1B2C1C2C3A的派生类(单继承)C3的基类B1,B2的基类A的派生类C1,C2,C3的基类B1的派生类图
类之间的继承与派生关系第26页,共32页,2023年,2月20日,星期四派生类的定义格式 单继承的定义格式如下:class<派生类名>:<继承方式><基类名>{public://派生类新定义成员members;<private:>members;<protected:>members;};第27页,共32页,2023年,2月20日,星期四
其中,<派生类名>是新定义的一个类的名字,它是从<基类名>中派生的,并且按指定的<继承方式>派生的。<继承方式>常作用如下三种关键字给予表示:
public:表示公有继承;
private:表示私有继承,可默认声明;
protected:表示保护继承。第28页,共32页,2023年,2月20日,星期四
多继承的定义格式如下:class<派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…{public://派生类新定义成员members;<private:>members;<protected:>members;
};第29页,共32页,2023年,2月20日,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高职美容美体艺术(化妆造型设计)试题及答案
- 2025年大学大一(地理科学)自然地理学基础理论测试题及答案
- 2025年高职(服装设计与工艺)服装结构设计阶段测试试题及答案
- 2025年大学第二学年(酒店管理)酒店品牌建设试题及答案
- 2026年泳池安全防护网项目公司成立分析报告
- 2025年高职椰韵纹眉(眉形设计与上色技巧)试题及答案
- 2025年大学大四(生物医学工程产业)医疗器械产业发展分析综合测试题及答案
- 2025年中职(皮革制品设计与制作)皮鞋制作工艺阶段测试题及答案
- 2025年大学海洋渔业科学与技术(渔业技术)试题及答案
- 2025年中职(珠宝玉石加工与营销)玉石雕刻工艺阶段测试题及答案
- 2024版装修公司软装合同范本
- IABP主动脉球囊反搏课件
- 加压站清水池建设工程勘察设计招标文件
- 工会制度汇编
- 丧假国家规定
- 2023年医务科工作计划-1
- 乒乓球社团活动记录
- 地基与基础分项工程质量验收记录
- 一文多用作文课公开课课件
- 水运工程施工课程设计指导书
- 惊恐障碍诊治课件
评论
0/150
提交评论