![C-第十三周2类与构造函数1_第1页](http://file4.renrendoc.com/view12/M04/31/0F/wKhkGWXujIyANgNBAACM8hzWvwA272.jpg)
![C-第十三周2类与构造函数1_第2页](http://file4.renrendoc.com/view12/M04/31/0F/wKhkGWXujIyANgNBAACM8hzWvwA2722.jpg)
![C-第十三周2类与构造函数1_第3页](http://file4.renrendoc.com/view12/M04/31/0F/wKhkGWXujIyANgNBAACM8hzWvwA2723.jpg)
![C-第十三周2类与构造函数1_第4页](http://file4.renrendoc.com/view12/M04/31/0F/wKhkGWXujIyANgNBAACM8hzWvwA2724.jpg)
![C-第十三周2类与构造函数1_第5页](http://file4.renrendoc.com/view12/M04/31/0F/wKhkGWXujIyANgNBAACM8hzWvwA2725.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11三月2024C第十三周2类与构造函数11.结构体类型和结构体变量的定义方法2.结构体变量的初始化3.结构体变量的引用回顾:结构体23请声明一个结构体结构体名为Student,数据成员为学号,姓名,年龄,成绩。34请声明一个结构体结构体名为Student,数据成员为学号,姓名,年龄,成绩。structStudent{charnumber[10];charname[20];intage;floatscore;};4定义结构体变量5在C语言中说明结构体对象的方法为:structstudenta;在C++中,说明方法为studenta;C结构中不包含成员函数,C++的类能包含数据成员,又能包含函数成员或者成员函数。6structStudent{charnumber[10];charname[20];intage;floatscore;voidprint(){cout<<“成绩为”<<score<<endl;}};71、若程序中有以下的说明和定义:structabc{intx;chary;}structabcs1,s2;则会发生的情况是______。 A)编译时错 B)程序将顺序编译、连接、执行C)能顺序通过编译、连接、但不能执行 D)能顺序通过编译、但连接出错A82、有以下说明和定义语句structstudent{intage;charnum[8];};structstudentstu[3]={{20,"200401"},{21,"200402"},{19,"200403"}};structstudent*p=stu;以下引用结构体变量成员的表达式错误的是
。(p++)->num B)p->numC)(*p).num D)stu[3].ageD9主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数10一、面向对象编程设计什么叫面向过程程序设计?什么叫面向对象编程设计?程序=算法+数据结构程序=算法+数据结构11程序设计方法的发展过程面向过程的程序设计方法面向过程的结构化程序设计方法面向对象的程序设计方法1213面向过程的设计方法重点:如何实现的细节和过程,将数据与函数分开。形式:主模块+若干个子模块(main()+子函数)。特点:自顶向下,逐步求精——功能分解。缺点:效率低,程序的可重用性差。1314面向对象的方法目的:实现软件设计的产业化。观点:自然界是由实体(对象)所组成。程序设计方法:使用面向对象的观点来描述模仿并处理现实问题。要求:高度概括、分类、和抽象。14结构化和面向对象程序设计结构化程序设计—数据与程序分离,在处理数据发生变化时,程序将处于不可用状态。而面向对象将数据和处理数据的函数封装在一起,构成一个整体即对象。我们用来定义对象的数据类型即是类。类代表着对同类型对象进行抽象所得到的共性。15对象与类之间的关系:
对象是类的实例,类是对不同对象共同属性的抽象!
类与对象可以视为模板与实例之间的关系!16基本概念对象类封装继承多态171.类与对象概念和实体特征:静态特征可以用某种数据来描述动态特征对象所表现的行为或具有的功能183.封装把对象的属性和服务封装在一个独立的系统单位。尽可能屏蔽对象的内部细节。对外形成一个边界(或者说一道屏蔽),只保留有限的对外接口使之与外部发生联系。194.继承定义:特殊类的对象拥有其一般类的全部属性与服务,成为特殊类对一般类的继承。优点:软件复用20车子行走,载重,速度,、、、汽车燃烧油料,有轮子,自行,、、、奔驰车型,标志、、、、215.多态多态性是指在一般类中定义的属性和行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或行为在一般类及各个特殊类中具有不同的语义。22主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数23从结构体到类结构体
结构体变量类
对象24结构的演化结构由若干个元素组成,C语言中称这些结构元素为结构成员,C++中成为数据成员。C++的结构中可以有函数,类确实是从结构演变而来,开始称为“带类的C”,这场革命就是从结构含有函数开始的。25结构发生质的演变1.函数与数据共存
C结构中不包含成员函数,C++的类能包含数据成员,又能包含函数成员或者成员函数。可以用如下形式描述:struct结构名{数据成员成员函数};262.封装性在定义结构时,将数据成员使用private关键字,则产生封装性。例:struct结构名{public:成员函数private:
数据成员};私有的数据成员,必须通过成员函数才能使用,这就称为数据的封装性。结构发生质的演变27从一个结构演变一个简单的类其实,使用关键字class代替struct,就是一个标准的类。例:定义类:class结构名{public:成员函数private:数据成员};28类是一种用户自定义类型,声明形式:class类名称{public:公有成员(外部接口)private:私有成员protected:保护型成员};2930类成员访问控制—公有类型成员在关键字public后面声明,它们是类与外部的接口,任何外部函数都可以访问公有类型数据和函数。3031私有类型成员在关键字private后面声明,只允许本类中的函数访问,而类外部的任何函数都不能访问。如果紧跟在类名称的后面声明私有成员,则关键字private可以省略。3132保护类型与private类似,其差别表现在继承与派生时对派生类的影响不同,后面讲。32类的声明举例classClock{public:
voidSetTime(intNewH,intNewM,intNewS);
voidShowTime();private:intHour,Minute,Second;};数据成员成员函数33类与结构体的区别:C++中,类(class)定义中默认情况下的成员是private的;而结构(struct)定义中默认情况下的成员是public的。34主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数35什么叫成员函数?根据位置分类:在类内部定义在类外部定义二、定义成员函数36什么叫成员函数?为了实现对象的行为,我们把完成特定功能的语句组织成小块程序,并注明相应的名称,这种组织形式的组合就构成了成员函数。定义成员函数37定义成员函数必须具备的4个条件:1.有返回值类型2.有函数名3.有形参列表4.有函数体其中1、2、3是构成函数的原型381.返回值类型函数名(类型形参1,类型形参2,…)2.返回值类型函数名(类型,类型,…)说明一个函数原型的一般形式有两种:关于成员函数定义位置的说明:1.代码比较少的函数的定义,可以在类中进行;2.代码比较多的函数的定义,我们通常在类中进行函数原型的说明,在类外对函数进行定义。39在类体内定义函数classLocation{public:intGetX(){returnx;}};
在类中声明,在类外定义classLocation{public:intGetX()};intLocation::GetX(){returnx;}40
Location::GetX()是成员函数的全限定名,表示GetX()是隶属于Location类的成员函数。双冒号::是作用域区分符,::可以不跟类名,表示全局数据或者全局函数。
Location::GetX()视为一个整体,类名加在成员函数名前,函数的返回类型加在成员函数的全限定名之前。4142回顾43结构化和面向对象程序设计结构化程序设计—数据与程序?而面向对象将数据和处理数据的函数?44对象与类之间的关系:
类与对象的关系?45主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数46从结构体到类结构体
结构体变量类
对象47结构发生质的演变1.函数与数据共存
2.封装性3.使用关键字?代替?,就是把一个结构变成一个类48类是一种用户自定义类型,声明形式:class类名称{public:公有成员(外部接口)private:私有成员protected:保护型成员};49类与结构体的区别:C++中,类(class)定义中默认情况下的成员是?的;而结构(struct)定义中默认情况下的成员是?的。50主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数51定义成员函数必须具备的4个条件:1.有返回值类型2.有函数名3.有形参列表4.有函数体其中1、2、3是构成函数的原型521.返回值类型函数名(类型形参1,类型形参2,…)2.返回值类型函数名(类型,类型,…)说明一个函数原型的一般形式有两种:关于成员函数定义位置的说明:1.代码比较少的函数的定义,可以在类中进行;2.代码比较多的函数的定义,我们通常在类中进行函数原型的说明,在类外对函数进行定义。53在类体内定义函数classLocation{public:intGetX(){returnx;}};
在类中声明,在类外定义classLocation{public:intGetX()};intLocation::GetX(){returnx;}54
Location::GetX()是成员函数的全限定名,表示GetX()是隶属于Location类的成员函数。双冒号::是作用域区分符,::可以不跟类名,表示全局数据或者全局函数。
Location::GetX()视为一个整体,类名加在成员函数名前,函数的返回类型加在成员函数的全限定名之前。55主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数56三、成员函数的调用一般有两种:对象名.函数名(实参1,实参2,…);对象指针函数名(实参1,实参2,…);57585960内联成员函数为了提高运行时的效率,对于较简单的函数可以声明为内联形式。内联函数体中不要有复杂结构(如循环语句和switch语句)。定义方法:直接在类的内部在类声明中给出内联成员函数声明,在类的外部提供内联函数的定义。60定义内联函数的格式如下:inlineintf_add(intx,inty){returnx+y;}关于内联函数的说明:
1.不允许在内联函数内使用循环和分支语句;2.内联函数的定义必须出现在第一次调用它之前;3.所有在类体内定义的函数都是内联函数6162内联成员函数举例(隐式)classPoint{public:voidinit(intinitX,intinitY)
{X=initX;Y=initY;}intGetX(){returnX;}intGetY(){returnY;}private:intX,Y;};6263内联成员函数举例(显式)classPoint{public:voidInit(intinitX,intinitY);intGetX();intGetY();private:intX,Y;};inlinevoidPoint::
init(intinitX,intinitY){X=initX;Y=initY;}inlineintPoint::GetX(){returnX;}inlineintPoint::GetY(){returnY;}63显式隐式64主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数65四、对象的定义对象的定义方法类的作用域(对象的作用域)66对象类的对象是该类的某一特定实体,即类类型的变量。声明形式:
类名对象名;例:
ClockmyClock;67类中成员的访问方式类中成员互访直接使用成员名类外访问使用“对象名.成员名”方式访问public属性的成员6869类的作用域类是面向对象的体现,它具有一定的数据保护功能。类的作用域就是类的保护功能的机制。类的作用域是指类的声明部分中的一对花括号所形成的作用域。一个类的所有成员都在该类的作用域内。70类的私有成员变量不可以在类的外部访问,因此需要定义一个公有成员函数间接访问类的私有成员。71voidmain()
{
intnum=9;//定义变量
numberA;
A.num=3;//错误,类的私有成员A.fun(3);
num=10;/*访问主函数中定义的变量num*/
}
#include<iostream.h>
classnumber//声明类number
{
private:
intnum;
public:
voidfun(inti);//类的成员函数
};
voidnumber::fun(inti)
{
num=i;//访问类的私有成员
}
72分析:上面的number类中定义了一个私有成员变量num,在main()函数中对该变量进行访问是错误的。因为超出了类的变量作用域。
而在fun()函数中,虽然该函数的定义在类的外部实现,但它本身还是类的一部分。num仍然在作用域内。在后面主程序num赋值时,访问的是主函数中定义的变量,不是成员变量73主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数74五、构造函数和析构函数1、构造函数的相关概念2、构造函数的定义方法3、构造函数的重载4、析构函数5、构造类成员6、构造对象的顺序7576由于类的封装性,不能像普通变量一样初始化,因此引入构造函数。构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个默认形式的构造函数。允许为内联函数、重载函数、带默认形参值的函数。1、构造函数的相关概念7677782、构造函数的定义方法与类名同名有参,无参默认构造函数
构造函数是一种特殊的成员函数,它主要进行一些初始化工作。构造函数有以下基本性质。
*构造函数和类的名字相同。
*构造函数不具有返回值。
*定义对象时,系统自动调用构造函数。79classpoint //声明类
{
public:
point(inta,intb)//类的构造函数
{
x=a;y=b;
}
private:
intx;inty;
};
80创建对象时,构造函数会自动被调用。构造函数可以带参数,也可以不带参数。当构造函数有参数时,创建对象必须指定构造函数的参数,否则,由于构造函数得不到实参,系统会报错。81构造函数没执行吧?82838485回顾86四、对象的定义对象的定义方法类的作用域(对象的作用域)8788主要内容一、面向对象编程设计二、类的声明(1)数据成员(2)成员函数三、成员函数的调用四、对象的定义五、构造函数和析构函数8990由于类的封装性,不能像普通变量一样初始化,因此引入构造函数。构造函数的作用是在对象被创建时使用特定的值构造对象,或者说将对象初始化为一个特定的状态。在对象创建时由系统自动调用。如果程序中未声明,则系统自动产生出一个默认形式的构造函数。允许为内联函数、重载函数、带默认形参值的函数。1、构造函数的相关概念902、构造函数的定义方法与类名同名有参,无参默认构造函数
构造函数是一种特殊的成员函数,它主要进行一些初始化工作。构造函数有以下基本性质。
*构造函数和类的名字相同。
*构造函数不具有返回值。
*定义对象时,系统自动调用构造函数。91classpoint //声明类
{
public:
point(inta,intb)//类的构造函数
{
x=a;y=b;
}
private:
intx;inty;
};
92构造函数没执行吧?939495默认构造函数默认构造只是系统给添加的,按编译器默认方式去初始化对象!只要你显示的声明定义了无参构造就不存在默认之说了,系统优先调用你定义的无参构造!96比如定义了一个classA类,里面没有写任何构造函数,则系统会自动给你生成一个默认构造函数该函数是A(),该默认构造函数是没有参数的,所以他同时是一个无参构造函数。97默认构造函数98默认参数的构造函数对于有参数的构造函数,在定义对象时必须给构造函数传递参数。实际情况中,虽然有些构造函数有参数,但其参数是不变的,这就是默认参数的构造函数。此时构造函数的形式如下:类名(函数名)(参数1=默认值,参数2=默认值,…)构造函数中的参数与普通函数的参数是一样的,所谓的默认参数即为该参数设置一个默认的取值。可以为全部或者部分参数设置默认值。
99classpoint
{
private:
intx;inty;
public:
floatdistance() //类的成员函数
{
returnsqrt(x*x+y*y);
}
point(inta=2,intb=3)//默认参数的构造函数
{
x=a;y=b;
}
};
100五、构造函数和析构函数1、构造函数的基本概念2、构造函数的定义方法3、构造函数的重载4、析构函数5、构造类成员6、构造对象的顺序101102103104五、构造函数和析构函数1、构造函数的基本概念2、构造函数的定义方法3、构造函数的重载4、析构函数5、构造类成员6、构造对象的顺序1054、析构函数析构函数的作用~类名()无参数,无返回值完成对象被删除前的一些清理工作。在对象的生存期结束的时刻系统自动调用它,然后再释放此对象所属的空间。如果程序中未声明析构函数,编译器将自动产生一个默认的析构函数。106107构造函数和析构函数举例#include<iostream>usingnamespacestd;classPoint{public:Point(intxx,intyy);~Point();//...其他函数原型private:intX,intY;};107108Point::Point(intxx,intyy){X=xx;Y=yy;}Point::~Point(){}//...其他函数的实现略108108没执行吧?109110课本269页
例题111112五、构造函数和析构函数1、构造函数的基本概念2、构造函数的定义方法3、构造函数的重载4、析构函数5、构造类成员6、构造对象的顺序113114115五、构造函数和析构函数1、构造函数的基本概念2、构造函数的定义方法3、构造函数的重载4、析构函数5、构造类成员6、构造对象的顺序1166、构造对象的顺序局部和静态对象,以声明的顺序构造静态对象只被构造一次所有的全局对象都在主函数main()之前被构造全局对象构造时无特殊顺序成员以其在类
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衡阳2025年湖南衡阳市中心医院高层次和急需紧缺专业技术人才引进60人笔试历年参考题库附带答案详解
- 漯河2024年河南漯河市教育局所属事业单位人才引进笔试历年参考题库附带答案详解
- 深圳2025年广东深圳博物馆劳务派遣工作人员招聘6人笔试历年参考题库附带答案详解
- 2025届湘豫名校联考高三上学期一轮复习质量检测物理试卷
- 2025年中国制证系统市场调查研究报告
- 2025至2031年中国高速晒图机行业投资前景及策略咨询研究报告
- 2025年花色电脑威尔顿羊毛地毯项目可行性研究报告
- 2025年纸制包装品项目可行性研究报告
- 2025至2031年中国石墨-铁基粉末冶金制品行业投资前景及策略咨询研究报告
- 2025至2031年中国烟碱原液行业投资前景及策略咨询研究报告
- 酒店长包房租赁协议书范本
- 2 找春天 公开课一等奖创新教学设计
- 2025年江苏护理职业学院高职单招语文2018-2024历年参考题库频考点含答案解析
- 2025年江苏南京水务集团有限公司招聘笔试参考题库含答案解析
- 【道法】开学第一课 课件-2024-2025学年统编版道德与法治七年级下册
- 建筑工程施工安全管理课件
- 人教版(2024)英语七年级上册单词表
- 2024年江西电力职业技术学院单招职业技能测试题库及答案解析
- 【真题】2023年常州市中考道德与法治试卷(含答案解析)
- 高考语文古诗词必背重点提纲
- 超星尔雅学习通《大学生心理健康教育(兰州大学版)》章节测试含答案
评论
0/150
提交评论