版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 为什么要引入构造函数和析构函数?对象的初始化是指对象数据成员的初始化,在使用对象前,一定要初始化。由于数据成员一般为私有的(private),所以不能直接赋值。对对象初始化有以下两种方法:类中提供一个普通成员函数来初始化,但是会造成使用上的不便(使用对象前必须显式调用该函数)和不安全(未调用初始化函数就使用对象)。当定义对象时,编译程序自动调用构造函数。析构函数的功能是当对象被撤消时,释放该对象占用的内存空间。析构函数的作用与构造函数正好相反,一般情况下,析构函数执行构造函数的逆操作。在对象消亡时,系统将自动调用析构函数,执行一些在对象撤消前必须执行的清理任务。2. 类的公有、私有和保护成
2、员之间的区别是什么? 私有成员private: 私有成员是在类中被隐藏的部分,它往往是用来描述该类对象属性的一些数据成员,私有成员只能由本类的成员函数或某些特殊说明的函数(如第4章讲到的友员函数)访问,而类的外部根本就无法访问,实现了访问权限的有效控制,使数据得到有效的保护,有利于数据的隐藏,使内部数据不能被任意的访问和修改,也不会对该类以外的其余部分造成影响,使模块之间的相互作用被降低到最小。private成员若处于类声明中的第一部分,可省略关键字private。 公有成员public:公有成员对外是完全开放的,公有成员一般是成员函数,它提供了外部程序与类的接口功能,用户通过公有成员访问该类
3、对象中的数据。 保护成员protected: 只能由该类的成员函数,友元,公有派生类成员函数访问的成员。保护成员与私有成员在一般情况下含义相同,它们的区别体现在类的继承中对产生的新类的影响不同,具体内容将在第5章中介绍。缺省访问控制(未指定private、protected、public访问权限)时,系统认为是私有private成员。3. 什么是拷贝构造函数,它何时被调用?拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同类对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象时系统自动调用它;其形参是本类对象的引用,它的特殊功能是将参数代表的对象逐域拷贝到新创建的对
4、象中。在以下四种情况下系统会自动调用拷贝构造函数: 用类的一个对象去初始化另一个对象cat cat1; cat cat2(cat1); / 创建 cat2时系统自动调用拷贝构造函数,/ 用cat1初始化cat2。 用类的一个对象去初始化另一个对象时的另外一种形式Cat cat2=cat1; / 注意并非cat cat1,cat2; cat2=cat1; 对象作为函数参数传递时,调用拷贝构造函数。f(cat a) / 定义f函数,形参为cat类对象cat b; / 定义对象bf(b); / 进行f函数调用时,系统自动调用拷贝构造函数 如果函数的返回值是类的对象,函数调用返回时,调用拷贝构造函数。
5、4. 设计一个计数器类,当建立该类的对象时其初始状态为0,考虑为计数器定义哪些成员?/ counter.h#ifndef counter_h#define counter_hclass counterprivate:int count;public:counter();void setCount(int i);int getCount();void displayCount();void incrementCount();void decrementCount();counter();#endif/ counter.cpp#include "counter.h"#inclu
6、de<iostream.h>counter:counter()count = 0;void counter:displayCount()cout << count << endl;int counter:getCount()return count;void counter:setCount(int i)count = i;void counter:incrementCount()count+;void counter:decrementCount()count-;/ MAIN.CPP#include "counter.h"#includ
7、e<iostream.h>void main()counter c1;c1.displayCount();c1.setCount(4);c1.displayCount();for(int i=0; i<=10;i+)c1.incrementCount();c1.displayCount();5. 定义一个时间类,能提供和设置由时、分、秒组成的时间,并编写出应用程序,定义时间对象,设置时间,输出该对象提供的时间。#include <iostream.h>class Timeint hour,minute,second;public:Time(int h=0,int
8、m=0, int s=0)hour = h;minute = m;second = s;void setHour(int h)hour = h;void setMinute(int m)minute = m;void setSecond(int s)second = s;void display()cout << hour << ": " << minute << ": " << second <<endl;void main()Time t;t.display();t.setHou
9、r(13);t.setMinute(15);t.setSecond(30);t.display();6设计一个学生类student,它具有的私有数据成员是:注册号、姓名、数学、英语、计算机成绩;具有的公有成员函数是:求三门课总成绩的函数sum;求三门课平均成绩的函数average;显示学生数据信息的函数print;获取学生注册号的函数get_reg_num;设置学生数据信息的函数set_stu_inf。编制主函数,说明一个student类对象的数组并进行全班学生信息的输入与设置,而后求出每一学生的总成绩、平均成绩、全班学生总成绩最高分、全班学生总平均分,并在输入一个注册号后,输出该学生有关的全
10、部数据信息。#include<iostream>#include<string>using namespace std;class Student private: int num; char name10; float math; float english; float computer;public:void set_stu_inf(int n,char *ch,float m,float e,float c)num=n; strcpy(name,ch); math=m; english=e; computer=c; float sum()return (math
11、+english+computer);float average()return (math+english+computer)/3;int get_reg_num()return num;void print()cout<<"学号:"<<num<<endl<<"姓名:"<<name<<endl<<"数学:"<<math<<endl<<"英语:"<<english<<end
12、l<<"计算机:"<<computer<<endl<<"总分:"<<sum()<<endl<<"平均分:"<<average()<<endl; void main() Student stu50;int i,q,a,z,x,max=0,aver=0; /i为循环变量,q:学号;a:数学/成绩; z:英语成绩; x:计算机成绩int count = 0; /表示学生人数char* we=new char10;/ 输入学生信息for
13、(;)cout<<"请输入学生的学号、姓名、数学成绩、英语成绩、计算机成绩:(若输入的学号为0则表示退出)" << endl;cin>>q>>we>>a>>z>>x;if (q =0 )break;stucount+.set_stu_inf(q,we,a,z,x);if(max>a+z+x);else max=a+z+x;aver+=(a+z+x);/ 输出所有学生信息cout<<"学生信息为:"<<endl<<endl;for(
14、 i = 0; i < count; i+)stui.print();cout<<endl;cout<<"全班学生总成绩最高分为"<<max<<endl<<"全班学生总平均分为"<<aver/3<<endl<<endl;cout<<"请输入要查的学生的学号:"<<endl;cin>>q;for( i = 0; i < count; i+)if (q=stui.get_reg_num()cout
15、<<"此学生信息为:"<<endl;stui.print();break;if (i=count)cout<<"查无此人"<<endl;7. 模拟栈模型的操作,考虑顺序栈和链栈两种形式。链栈:#include <iostream.h>class Stack /定义堆栈类 struct Nodeint content; Node *next; *top; public: Stack() top = NULL; / 构造函数的定义 bool push(int i); / 压栈成员函数的声明 bool
16、 pop(int& i); / 弹栈成员函数的声明;bool Stack:push(int i) / 压栈成员函数的定义 Node *p=new Node; if (p = NULL) cout << "Stack is overflow.n" return false; elsep->content = i; p->next = top; top = p; return true;bool Stack:pop(int& i) / 弹栈成员函数的定义if (top = NULL) cout << "Stack i
17、s empty.n" return false; else Node *p=top; top = top->next; i = p->content; delete p; return true;void main()Stack st1,st2; / 定义对象st1和st2 int x;for(int i=1;i<=5;i+)st1.push(i); / 压栈成员函数的调用st2.push(i); / 压栈成员函数的调用 cout<<"stack1:"<<endl;for(i=1;i<=3;i+)st1.pop(x); / 弹栈成员函数的调用cout<<x<<endl;st1.push(20);for(i=1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 纵隔肿物鉴别诊断与护理知识
- 高中数学 加练 专题5 第45练 平面向量基本定理及运算
- 高中物理 加强练习第七章 74.“子弹打木块”模型
- 初一下册数学 讲义 第06讲 三元一次方程组 教案讲义及练习(学生版)
- 新版部编人教版四年级上册道德与法治(课件)3协商决定班级事务
- 维保合同范本
- 配电箱制作及安装合同
- 暖水管开洞施工方案(3篇)
- 水中钢平台施工方案(3篇)
- 沥青油层防水施工方案(3篇)
- 2026年安康紫阳县直及县城周边学校遴选教师(81人)考试模拟试题及答案详解
- 2025年中国真空阀门设备市场调查研究报告
- 2026有色金属期货价格预测机器学习模型构建分析
- (2025年)正阳县纪委遴选笔试试题及答案
- 卫生院应急演练制度
- 2026贵州能源集团有限公司第一批综合管理岗招聘41人考试历年真题汇编附答案解析
- 2025年电动自行车充电桩布局项目可行性研究报告及总结分析
- 2025年福建省法官逐级遴选考试题及答案
- 2024年聊城阳谷县卫生健康系统招聘真题
- 贵州企业招聘2025国元农业保险股份有限公司贵州分公司社会招聘笔试历年参考题库附带答案详解
- 漆雾凝聚剂技术方案
评论
0/150
提交评论