类与对象1

合集下载

类与对象的实验报告

类与对象的实验报告

类与对象的实验报告类与对象的实验报告引言:在计算机科学领域,类与对象是面向对象编程(Object-Oriented Programming,简称OOP)的核心概念之一。

类是一种抽象的数据类型,用于描述具有相同属性和行为的对象集合。

对象则是类的实例,具体化了类的属性和行为。

本实验旨在通过编写一个简单的类与对象的程序,深入理解类与对象的概念及其在编程中的应用。

实验过程:1. 定义一个类:在这个实验中,我们以动物为例,定义了一个名为Animal的类。

该类具有以下属性和行为:- 属性:名称、年龄、种类- 行为:吃、睡、叫2. 创建对象:在主程序中,我们创建了两个Animal对象,分别代表一只狗和一只猫。

通过调用构造函数,为对象的属性赋值。

3. 调用对象的方法:我们通过调用对象的方法,模拟了动物的行为。

例如,我们调用了eat()方法,让动物吃东西;调用了sleep()方法,让动物睡觉;调用了make_sound()方法,让动物发出叫声。

4. 修改对象属性:我们还演示了如何修改对象的属性。

通过调用set_age()方法,我们改变了动物的年龄;通过调用set_type()方法,我们改变了动物的种类。

实验结果:通过运行程序,我们观察到以下结果:- 狗的名称是"旺财",年龄是3岁,种类是"狗"。

狗吃骨头,睡觉时打呼噜,发出汪汪的叫声。

- 猫的名称是"咪咪",年龄是2岁,种类是"猫"。

猫吃鱼,睡觉时打呼噜,发出喵喵的叫声。

- 经过修改后,狗的年龄变为5岁,种类变为"藏獒";猫的年龄变为3岁,种类变为"波斯猫"。

讨论与分析:通过这个实验,我们深入理解了类与对象的概念及其在编程中的应用。

类是一种抽象的模板,用于描述具有相似属性和行为的对象集合。

对象是类的实例,具体化了类的属性和行为。

通过定义类和创建对象,我们可以更好地组织和管理程序的代码。

类与对象的关系

类与对象的关系

类与对象的关系参考⽂献:J基础概念1.类简单来说:类是抽象的,是对对象的抽象。

具体来说:类是对现实⽣活中⼀类具有共同特征的事物的抽象,实质是⼀种复杂的数据类型,不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。

2.对象简单来说:对象也是抽象的,是对客观事物的抽象。

⼜是具体的,是类实例化的结果。

具体来说:对象是⼈们要进⾏研究的任何具体事物,它不仅能表⽰具体的事物,还能表⽰抽象的规则、计划或事件。

对象具有状态,⼀个对象⽤数据值来描述它的状态。

对象还有操作,⽤于改变对象的状态,对象及其操作就是对象的⾏为。

对象实现了数据和操作的结合,使数据和操作封装于对象的统⼀体中。

实例参考⼈是类,具体的⼈就是对象,⼩明、⼩红、⼩花都是对象。

车是类,具体的车就是对象,秋名⼭上那辆漂移的车、F1赛车的冠军的车、上班要开的车都是对象。

类与对象的关系抽象来说:类与对象的关系就如模具和铸件的关系,类的实例化的结果就是对象,⽽对对象的抽象就是类,类描述了⼀组有相同特性(属性)和相同⾏为的对象。

具体在Java编程中,类通过使⽤关键字class完成。

class 类名称 {属性 (变量) ;⾏为 (⽅法) ;}对象通过实例化类完成,有以下两种⽅式://格式⼀:声明并实例化对象类名称对象名称 = new 类名称 () ;//格式⼆:先声明对象,然后实例化对象类名称对象名称 = null ;对象名称 = new 类名称 () ;当⼀个实例化对象产⽣之后,可以按照如下的⽅式进⾏类的操作:对象.属性:表⽰调⽤类之中的属性;对象.⽅法():表⽰调⽤类之中的⽅法。

什么是类,什么是对象,类和对象之间的关系

什么是类,什么是对象,类和对象之间的关系

什么是类,什么是对象,类和对象之间的关系类的概念:类是具有相同属性和服务的⼀组对象的集合。

它为属于该类的所有对象提供了统⼀的抽象描述,其内部包括属性和服务两个主要部分。

在⾯向对象的编程语⾔中,类是⼀个独⽴的程序单位,它应该有⼀个类名并包括属性说明和服务说明两个主要部分。

对象的概念:对象是系统中⽤来描述客观事物的⼀个实体,它是构成系统的⼀个基本单位。

⼀个对象由⼀组属性和对这组属性进⾏操作的⼀组服务组成。

从更抽象的⾓度来说,对象是问题域或实现域中某些事物的⼀个抽象,它反映该事物在系统中需要保存的信息和发挥的作⽤;它是⼀组属性和有权对这些属性进⾏操作的⼀组服务的封装体。

客观世界是由对象和对象之间的联系组成的。

类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,⽽对⼀类对象的抽象就是类.类描述了⼀组有相同特性(属性)和相同⾏为(⽅法)的对象。

上⾯⼤概就是它们的定义吧,也许你是刚接触⾯象对象的朋友,不要被概念的东西搞晕了,给你举个列⼦吧,如果你去中关村想买⼏台组装的PC机,到了那⾥你第⼀步要⼲什么,是不是装机的⼯程师和你坐在⼀起,按你提供的信息和你⼀起完成⼀个装机的配置单呀,这个配置单就可以想像成是类,它就是⼀张纸,但是它上⾯记录了你要买的PC机的信息,如果⽤这个配置单买10台机器,那么这10台机⼦,都是按这个配置单组成的,所以说这10台机⼦是⼀个类型的,也可以说是⼀类的。

那么什么是对象呢,类的实例化结果就是对象, ⽤这个配置单配置出来(实例化出来)的机⼦就是对象,是我们可以操作的实体, 10台机⼦, 10个对象。

每台机⼦都是独⽴的,只能说明他们是同⼀类的,对其中⼀个机做任何动作都不会影响其它9台机器,但是我对类修改,也就是在这个配置单上加⼀个或少⼀个配件,那么装出来的9个机⼦都改变了,这是类和对象的关系(类的实例化结果就是对象)。

面向对象程序设计(C++)实验一--类和对象

面向对象程序设计(C++)实验一--类和对象

实验一类和对象一、实验目的:掌握类的设计和对象的创建及相关知识点如对象数组、类聚合、友元函数、静态成员。

二、实验内容:1、设计圆类,求两个圆的位置关系;2、设计圆类和直线类,求直线与圆的位置关系;3、设计学生类,求某班学生成绩的最高分、最低分及平均分;4、设计部门类和教师类,其中部门类成员为教师类的子对象;5、设计家庭银行账户类,其中账户资金为静态数据成员,为家庭成员共享;6、设计复数类,友元函数实现复数的加减。

三、实验过程:1、根据实验题目确定需要设计哪些类、各类中包含哪些数据成员和函数成员,设计各成员的访问权限,设计数据成员的数据类型,设计函数成员的函数原型;2、给出类设计的程序实现,特别要注意重载构造函数的实现;3、在主函数中完成题目中的逻辑,一般情况下需要创建相关类的对象,通过对象对成员函数的调用或者通过对象指针对成员函数的调用完成相应的功能。

四、参考程序代码:1、设计圆类,求两个圆的位置关系#include <iostream>#include <math.h>using namespace std;class Circle{private:float a,b,r;public:Circle(float c,float d,float e){a=c;b=d; r=e;}friend void position(Circle &,Circle &);};void position(Circle &c1,Circle &c2){float n,m,p;p=sqrt((c1.a-c2.a)*(c1.a-c2.a)+(c1.b-c2.b)*(c1.b-c2.b)); n=fabs(c1.r-c2.r);m=c1.r+c2.r;if(p>m)cout << "相离";if(p==m)cout << "相切";if(p<m)cout << "相交";}int main(){float a,b,c,d,e,f;cin >> a >> b >> c >> d >> e >> f ;Circle c1(a,b,c),c2(d,e,f);position(c1,c2);return 0;}运行结果:2、设计圆类和直线类,求直线与圆的位置关系#include<iostream>#include<math.h>using namespace std;class Circle//圆类{private:float x,y,r;public:Circle(float a,float b,float c) {x=a;y=b;r=c;}float getx(){return x;}float gety(){return y;}float getr(){return r;}};class Line//直线类{private:float a,b,c;public:Line(float x,float y,float z){a=x;b=y;c=z;}void position(Circle c1){float d=fabs(a*c1.getx()+b*c1.gety()+c)/sqrt(a*a+b*b) ;//圆心到直线的距离if(d<c1.getr())cout << "相交";if((d-c1.getr())<0.000001)cout << "相切";cout << "相离";}};int main(){Line l1(3,3,4);//创建直线对象Circle c1(-23,3,7);//创建圆对象l1.position(c1);return 0;}运行结果:3、设计学生类,求某班学生成绩的最高分、最低分及平均分#include <iostream>#include <string.h>using namespace std;class Student{private:char name[20],xuehao[20];float math;public:Student(){}Student(char *na,char *xu,float ma):math(ma) {strcpy(name,na);strcpy(xuehao,xu);}void set(char *na,char *xu,float ma){math=ma;strcpy(name,na);strcpy(xuehao,xu);}char *get_name(){return name;}char *get_xuehao(){return xuehao;float get_math(){return math;}};void max_min(Student stu[],int n){Student max,min;max=min=stu[0];for(int i;i<n;i++){if(stu[i].get_math()>max.get_math())max=stu[i];if(stu[i].get_math()<min.get_math())min=stu[i];}cout << "学生成绩最高:" << max.get_name() << "," << max.get_xuehao() << "," << max.get_math() << endl;cout << "学生成绩最低:" << min.get_name() << "," << min.get_xuehao() << "," << min.get_math() << endl;}void ave(Student stu[],int n){float sum=0;for(int i=0;i<n;i++){sum=sum+stu[i].get_math();cout << "ave=" << sum/n;}int main(){char na[20],xu[20];float ma;Student stu[20];int n;cout << "请输入学生总人数"; cin >> n;for(int i=0;i<n;i++){cin >> na >> xu >> ma ; stu[i].set(na,xu,ma); }max_min(stu,n);ave(stu,n);return 0;}运行结果:4、设计部门类和教师类,其中部门类成员为教师类的子对象#include <iostream>#include <string.h>using namespace std;class Department{private:int dep_num;char dep_master[20];char dep_name[20];public:Department(){}Department(int num,char *ma,char *na){dep_num=num;strcpy(dep_master,ma);strcpy(dep_name,na);}void show(){cout << dep_num << "," << dep_master << "," << dep_name ; }};class Teacher{private:char name[20];char haoma[20];Department dep;public:Teacher(char *n,char *nu,int num,char *ma,char *na):dep(num,ma,na) {strcpy(name,n);strcpy(haoma,nu);}void show(){dep.show();cout << "," << name << "," << haoma << endl;}};int main(){Teacher hp("wanghai","12345",6,"kiki","computer");hp.show();return 0;}运行结果:5、设计家庭银行账户类,其中账户为静态数据成员,为家庭成员共享#include <iostream>#include <string.h>using namespace std;class Familymember//家庭成员类{private:char membername[10];//成员名public:static float account;//共享账户资金 Familymember(char *name);static void save(float money);//存钱 static void pay(float money);//支出 static void show(); //显示账户余额};float Familymember::account=0;Familymember::Familymember(char *name) {strcpy(membername,name);}void Familymember:: save(float money) {account= account+money;}void Familymember:: pay(float money){account= account-money;}void Familymember:: show(){cout<<account<<endl;}int main()//主函数{ Familymember husband("wang"),wife("Li"); husband.save(10000);wife.pay(3000);wife.save(5000);wife.show();husband. show();}运行结果:6、设计复数类,友元函数实现复数的加减#include <iostream>using namespace std;class Fushu{private:float ss,xs;public:Fushu(){}Fushu(float a,float b){ss=a;xs=b;}friend Fushu jiafa(Fushu &f1,Fushu &f2){return Fushu((f1.ss+f2.ss),(f1.xs+f2.xs)); }friend Fushu jian(Fushu &f1,Fushu &f2){return Fushu((f1.ss-f2.ss),(f1.xs-f2.xs)); }void show(){cout << ss << " + " << xs << "i" << endl; }};int main(){Fushu f1(2,3),f2(4,5);Fushu f3,f4;f3=jiafa(f1,f2);f4=jian(f1,f2);f3.show();f4.show();return 0;}运行结果:。

1.什么是类?什么是对象?对象和类是什么关系?

1.什么是类?什么是对象?对象和类是什么关系?

1.什么是类?什么是对象?对象和类是什么关系?答:类是抽取了同类对象的共同属性和行为形成的对象或实体的“模板”。

对象是现实世界中实体的描述,是其自身所具有的状态特征及可以对这些状态施加的操作结合在一起所构成的独立实体。

类和对象之间的关系是抽象和具体的关系:类表达的是一种抽象的概念,它描述了该类对象的共同特征;而对象是具体事物,以类为模板来生成,它具有自己的状态。

举例:类与对象的关系犹如零件的图纸与按图纸制造出的零件关系一样;图纸(类)描述了零件(对象)的共同特征,每个零件(对象)又有自己的个性,如加工精度的不同等等2、什么是方法?方法的结构是怎样的?设计方法应考虑哪些因素?答:方法是Java类的一个组成部分,通过类的方法改变对象的状态。

方法的结构:[方法修饰符] 返回值类型方法名([形参列表])[throws异常列表] {方法体;}设计方法应考虑因素有:(1) 方法名是Java中任意的标识符,按照命名的约定,方法名应该是有意义的动词或动词短语,它的第一个字母一般要小写,其他有意义的单词的首字母要大写,其余字母小写。

(2) 返回值类型可以是任意的Java类型,甚至可以是定义此方法的类。

如果方法没有返回值,则用void表示。

(3) 形式参数列表是可选的。

如果方法没有形式参数,就用一对小括号“()”表示。

形式参数列表的形式如下:(类型形参名,类型形参名,……)(4) throws异常列表规定了在方法执行中可能导致的异常。

3.创建一个有两个方法的类,,第一个使用this,第二个不使用this。

class Rectangle //矩形类{int width; // 矩形的宽int usethis(int width) //返回宽度的函数{this. width= width; //指自己这个对象return width;}int unusethis(int width){ int w=width;return w;}public static void main(String args[]){Rectangle r=new Rectangle(); //类对象的实例化System.out.println("It is about the node of this."); //输出语句System.out.println(ethis(1));System.out.println(r.unusethis(2));运行结果:It is about the node of this.124、创建一个类,该类还有int和char类型的成员变量且未被初始化,然后编程输出这些成员变量的值,查看java是否执行了默认的初始化操作。

第7章-类和对象-1

第7章-类和对象-1

成员变量
Strpinugblnicacmlaes;s Ini/t/ia姓lV名istor {
int agep;ublic/s/t年at龄ic void main(String[] args) { //显示信息Sc方an法ner input = new Scanner(S成yst员em方.i法n);
public voidVsishiotowr(v){= new Visitor();
center.classNumber = 10;
bNumber = 10;
System.out.println("\n***初始化成员变量后***");
center.
演示示例:创建和使用对象
第22页/共45页
创建和使用对象示例5-2
问题
编写学员类,输出学员相关信息
编写教员类,输出教员相关信息
分析
学员类
姓名 年龄 班级 爱好 显示学员个人信息
教员类
姓名 专业方向 教授课程
教龄 显示教员个人信息
第23页/共45页
创建和使用对象示例5-3
示例
public class SIntuitdiaelnStu{dent { Spturbinligcnstaamtiec;void//m姓a名in(String args[]成){ 员变量
实现积分回馈功能
金卡客户积分大于1000分或普卡客户积分大于 5000,获得回馈积分500分
创建客户对象输出他得到的回馈积分
完成时间:20分钟 共性问题集中讲解
第35页/共45页
按此按钮, 狮子开始跑
按此按钮, 狮子开始叫
类的方法
电动玩具狮子 属性: 颜色:黄色
行为: 跑 叫

类和对象的区别

类和对象的区别

类和对象的区别
其中,类是对某⼀类事物的抽象描述,⽽对象⽤于表⽰现实中该类事物的个体。

在上图中,可以将玩具模型看作是⼀个类,将⼀个个玩具看作对象,从玩具模型和玩具之间的关系便可以看出类与对象之间的关系。

类⽤于描述多个对象的共同特征,它是对象的模板。

对象⽤于描述现实中的个体,它是类的实例。

1. 类是具有相同的属性和功能的事物的抽象的集合,在⾯向对象程序设计中,⼈们把⼀类事物的静态属性和动态可以执⾏的操作组合在⼀起就得到类这个概念。

2. 类是个抽象的概念,⽤来模拟⼀类事物,⼀旦定义了⼀个类,这个类就永远存在。

⽐如:⼈,⼈有男⼈和⼥⼈,他们都有⾝⾼,体重等相同的属性,他们都具有⾛路,吃饭,⼯作等这些相同的,可动态执⾏的操作,所以可以定义“⼈类”这样⼀个类来包含他们相同的属性和功能。

1. 对象是类的⼀个个体,是具体的,实实在在存在的事物,它有⾃⼰的⽣命周期,由类可以创建出对象,对象也会消亡。

2. 类⼀旦被建⽴后,就可以⽤这个类创建出任意个对象,然后去操作这些对象,类是抽象的,对象是具体的。

3. 对象也叫实例,是⼀个真实的实体。

关系: 1. 如果把对象⽐作是实实在在存在⼀辆汽车,那么类就是这辆汽车的设计图纸,当然通过设计图纸(类)还可以制造第⼆辆,第三辆这样的汽车(对象)。

2. 如上,通过Person类可以创建出⼀个叫“⼩明”的对象,也可以创建出另⼀个叫“阿黄”的对象。

创建⼀个对象的过程也叫类的实例化,使⽤new关键字来创建对象。

模块6 类与对象(1)

模块6 类与对象(1)

一、选择1. 以下不属于类存取权限是_______B___。

A. publicB. staticC. protectedD. private2. _____D___是不可以作为该类的成员。

A.自身类对象的指针B.自身类的对象C.自身类对象的引用D.另一个类的对象3. 有关类的说法不正确的是___D____。

A. 类是一个用户自定义的数据类型B. 只有类中的成员函数才能存取类中的私有数据C. 在类中,如果不作特别说明,所有的数据均为私有类型D. 在类中,如果不作特别说明,所有的成员函数均为公有类型4. 有关类和对象的说法下列不正确的有__________。

A. 对象是类的一个实例B. 任何一个对象只能属于一个具体的类C. 一个类只能有一个对象D. 类与对象和关系和数据类型和变量的关系相似5. 若Queue是类,aQueue 是它的一个对象,p1是类对象aQueue的一个指针,那么对象aQueue可以通过_________ 类访问类的成员,类对象aQueue的指针p1可以通过________来访问类的成员。

A. ::B. .C. ;D. ->6. 关于成员函数特征,_______是错误的。

A. 成员函数一定是内联函数B. 成员函数可以重载C. 成员函数可以设置参数的默认值D. 成员函数可以是静态的7. 下列关键字中用以说明类中公有成员的是_____。

A. publicB. privateC. protectedD. friend8. 有关构造函数的说法不正确的是___________。

A. 构造函数的名字和类的名字一样;B. 构造函数在说明类的对象时自动执行;C. 构造函数无任何函数类型;D. 构造函数有且仅有一个;9. 在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用___________合适。

A. 内联函数B. 重载函数C. 递归函数D. 嵌套调用10. 关于引用,下列的说法中错误的是__________。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C++ 2- 10
3.1.4 使用默认参数的构造函数
则下述定义对象的方式都是正确的。 Box box1(8, 10, 20); Box box2(8, 10); Box box3(8); Box box4(8);
C++
2- 11
3.1.5未定义构造函数
用户定义的类中,可以没有构造函数。 编译器会自动给该类类型生成一个没有参数的构造函数,
3.3.2对象数组初始化
#include <iostream> #include <string> using namespace std; class Personal { char name[20]; public : Personal(char * n) { strcpy(name , n); cout << name << " says hello !"<<endl; } ~Personal(void) { cout << name << " says goodbye !"<<endl; } }; int main( ) { cout << "创建对象数组,调用构造函数 :"<<endl; Personal people[3] = {"Wang", "Li", "Zhang"}; cout << "撤消对象数组,调用析构函数 :"; return 0; }
(3) (4)
(5)
C++
2- 5
3.1.2 构造函数的定义
构造函数的定义一般有 2种格式,即带参数的格式和参数化列 表格式。 1)带参数的构造函数 构造函数的一般格式: 构造函数名(类型1 形参1,类型2 Date::Date(int y, int m, int d) { year = y; month = m; day = d; } 【例3.2】
C++ 26 2- 26
3.4.3 this指针
(1)C++为每个类的成员函数都隐含定义了一个特殊的指针 this指针,其格式 为: 类名 *const this; this 指针是作为隐含的参数自动传递给成员函数,哪一个对象调用成员函数, this指针就指向那个对象,因此,所有成员函数都拥有this指针。这是因为每当 对象调用成员函数时,编译系统就初始化 this 指针把对象的地址赋给它,即将 this指针指向调用成员函数的对象。
第三章 深入类和对象

构造函数 析构函数 对象数组 对象和指针 对象的动态建立和释放 对象的复制


静态成员
友元函数
C++
2- 0
3.1 构造函数
C++
2- 1
3.1.1 构造函数作用
class Date
{
int day = 0; int month = 0; int year = 0; }; …
这是否正确?
// 错误,这里仅仅是声明,并没有为数据成员 开辟内存空间
【例2.3】
C++ 2- 2
3.1.1 构造函数作用
class Date {
int day, month, year; public: void InitDate(int d, int m, int y); //初始化?? 解决方案1
初始化方法1:当对象数组所属类含有带参数的构造函数时,可用初 始化列表按顺序调用构造函数初始化对象数组的每个元素。如: Point Triangle[3] = {Point(0, 0), Point(5, 5),Point(10, 0)}; Point Rectangle[2][2] = {Point(0, 0), Point(0, 6),Point(16,6),Point(16,0)};
【例3.5】
C++ 14 2- 14
3.2.2析构函数的使用
析构函数的特殊说明: (1) 可以显示地调用析构函数,如果没有显示调用,在一个 对象的作用域结束时,系统自动调用析构函数 (2)系统自动调用构造函数和自动调用析构函数的顺序是相 反的; (3)函数中创建对象时,函数调用结束,对象即被释放;函 数多次被调用,则每次调用时都调用构造函数,结束时调用 析构函数; (4)如果用static定义静态局部变量,则只在程序第一次调 用此函数建立对象应用构造函数,调用结束时并不释放对象, 即不调用析构函数;只有main函数结束时调用。 (5)如果用 new运算符动态创建一个对象,用 delete 运算符 释放该对象时,先调用析构函数;
[例3.1]
C++
4
2- 4
3.1.1 构造函数作用
构造函数的特点如下:
(1) (2)
构造函数是成员函数,函数体可写在类体内,也可写在类体外。 构造函数是一个特殊的成员函数,1)函数的名字与类名相同,2) 构造函数不指定类型说明,3)构造函数可以没有参数,也可以有 参数。 构造函数可以重载,即可定义多个参数个数不同的函数。 程序中一般不直接调用构造函数,在创建对象时系统自动调用构 造函数 在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包 含其他语句。但一般不这么做。

};
程序员有的时候会忘记了调用初始化函数或者调用了多次。这都是不 好的现象。 Date day1={12,23,33} 但是:数据成员是私有,或者对象有多个的时候我们怎么办呢?
C++
3
2- 3
3.1.1 构造函数作用
C++为类设计了构造函数(constructor)机制,它可以达到初始化数据成 员的目的。 类的构造函数是类的一个特殊成员函数,它没有返回类型(void也不 行),可以有参数,函数名和类名一样。 当创建类的一个新对象时,自动调用构造函数,完成初始化工作(需 要注意构造函数是否有参数,以及参数的个数、类型)。
2- 9


C++
3.1.4 使用默认参数的构造函数
特别注意: 1.声明构造函数时指定默认值,不能定义时指定默认值; 2.声明构造函数时形参名可以省略; 3.如果构造函数的全部参数都使用默认值,则在定义不同 对象时可以给出一个或几个实参,也可以不给实参; 4.类中定义了全部是默认参数的构造函数后,不能再定义重 载构造函数; 思考:默认构造函数和使用默认参数的构造函数的区别。 【例3.4】
C++ 6 2- 6
形参2,..)
3.1.2 构造函数的定义
2)构造函数的初始化列表的方式
Date::Date(int y,int m,int d):year(y), month(m),day (d)
{} 用形参y的值初始化year,……
C++
7
2- 7
3.1.3 构造函数的重载

定义一个类可以提供多个构造函数,用于在不同场合进 行类对象的初始化工作,这称为构造函数的重载。 class Date { int year, month, day; public: Date(int d, int m, int y); Date(int d, int m); Date(int d); Date(); 【例3.3】
该函数不作任何初始化工作。
注意:
一个类如果有显式定义的构造函数,编译器就不 会生成缺省构造函数了。
C++
2- 12
3.2 析构函数
C++
2- 13
3.2.1析构函数的定义
定义:与构造函数对应的是析构函数。 C++ 通过析构函数来 处理对象的善后工作。 特别注意: 析构函数没有返回类型; 没有参数; 函数名是类名前加“~”。 析构函数除了完成善后工作外,可以做任何程序员想完成 的工作,但一般不这么做。

delete 运算符动态释放内存
[例3.3]
C++
2- 28
3.6 对象的赋值与复制
C++
2- 29
3.6.1 对象赋值
对象之间的赋值也是通过赋值运算符“=”进行。 一般形式:
对象1=对象2
[例3.9] 注意: 对象的赋值只对其中的数据成员赋值,而不对成员函数赋值;
C++
2- 30
3.6.2 对象复制
C++
2- 19
3.3.2对象数组初始化
③对象数组创建时若没有初始化列表,其所属类中必须定义无参 数的构造函数,在创建对象数组的每个元素时自动调用它。 ④如果对象数组所属类含有析构函数,那么当建立对象数组时, 按每个元素的排列顺序调用构造函数;当撤消数组时,按相反的 顺序调用析构函数。
C++
2- 20
C++
25
2- 25
3.4.2 指向对象成员的指针
2)指向类的成员函数的指针 指向类的成员函数的指针定义的格式为: 类型名 (类名::*指针)(参数表); 指针变量类型必须与赋值号右侧函数在3方面匹配:1)函数 参数类型和个数;2)返回值类型;3)所属类。 【例3.7】 特别说明: 函数指针并不属于类,而是只能指向类的指定原型的函 数。
C++
8
2- 8
3.1.3 构造函数的重载
特别注意:

重载的构造函数之间的参数表必须互不相同。 在调用构造函数时不必给出实参的构造函数,称为默认构造 函数,或称为缺省构造函数,一个类中只能有1个默认构造 函数 如果建立对象时选用的是无参构造函数,应注意定义对象的 语句;比如 box box()这种形式是错误的。 尽管一个类中可以有多个构造函数,但建立对象时,每个对 象只执行其中一个构造函数。
相关文档
最新文档