




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西安交通大学《C++面向对象程序设计基础》
实验报告学院: 电子与信息工程学院班级:计算机科学与技术3x班学号: 姓名: 指导教师: 一、 面向对象的程序设计1.1基本概念面向对象的程序设计是通过对类、子类和对象等的设计来体现的,类是面向对象程序设计技术的核心。类:定义了对象特征以及对象外观和行为的模板。类的特征:封装性:隐藏了类中对象的内部数据或操作细节,只看到外表信息。继承性:任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了新的功能。体现了面向对象设计方法的共享机制。多态性:相同的操作可作用于多种类型的对象上,并获得不同的结果。抽象性:提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。基类:系统本身提供的类称为基类。基类包括容器类和控件类。容器类是其他对象的集合,如表格、选项按钮组;控件类是单一的对象,不包含其他对象,如命令按钮、文本框。子类:以其他类定义为起点,对某一对象所建立的新类。新类将继承任何对父类所做的修改。二、 C++语言基础2.1C++既可以用于面向过程的结构化程序设计,也可用于面向对象的程序设计。C++对C的增强体现在两个方面:对原来的面向过程机制做了扩充。增加了面向对象的机制。学习C++之后,既可以进行面向对象的程序设计,也可以进行面向过程的程序设计。2.2为了与C兼容,C++保留了C语言中的一些规定,例如头文件的文件名,以C语言里头文件的扩展名是.h,许多C++编译系统保留了这种扩展名,近年推出的C++编译系统新版本,推出了一批不带扩展名的头文件如iostream,string,cmath等。为了兼容C++仍允许使用带扩展名的头文件。由于C语言无命名空间,因此使用带扩展名的头文件时不用usingnamespacestd。2.3C++相对与c程序来说变化不大。头文件从原来的studio.h文件变成了iostream标准输入输出流文件,从而输入输出方式也从printf、Seanf,变成cin、eout。虽然cin、eout输入输出方式简单,但格式设计不方便,而且耗时较大。本质上,c++与c程序区别不大,两者主要区别在于C++使用全新的面向对象思想。2.4C++基本数据类型有整数类型(int)、字符类型(char)、浮点类型(float)和双精度类型(double)、布尔类型(bool)、空类型(void)六种类型。2.5C++中的表达式有算术表达式(+、-、*、/、%)、赋值表达式(=)、增量表达式(++和--)、关系表达式(>、<、>=、<=、!=)、逻辑表达式(!、&&、||)、条件表达式(操作数1?操作数2:操作数3)、逗号表达式(操作数1,操作数2,•…操作数n)。2.6C++中的基本语句有空语句({})、表达式语句、声明语句、条件(if)语句、switch语句、循环语句(for循环语句、while循环语句、do-while循环语句、break语句、continue语句)。三、类和对象1类是一个全新的概念,与c程序中结构体类似,但与其不同的是类中自带类内函数且在类中数据成员和成员函数的类型分为三种: public、private、protected,这三种数据类型有不同的访问权限:public可以被外界直接调用,而private与protected需要通过函数才能被使用。类对象:在C++中,对象是类的实际变量。对象的使用格式有对象名.数据成员名/成员函数名(实参表)。在类的外部,只有公有数据成员和公有成员函数才可以通过类的对象进行访问,而私有数据成员和成员函数只能在类的内部被访问。3.2构造函数和析构函数:构造函数和析构函数使类对象能够轻松被创建和撤销。构造函数创建类对象,初始化类成员,析构函数撤销类对象。它们是类的特殊成员函数。3.3对象数组与对象指针:对象数组就是每一个数组元素都是类的对象的数组,对象指针就是用于存放对象地址的变量。对象数组定义的一般格式是类名对象数组名[下标表达式],使用方法是对象数组名[下表表达式].成员名,对象指针的声明方式是类名*对象指针名。四、静态成员与友元4.1在类定义中,类的成员可以用关键字static声明为静态的,这些成员就是静态成员,它被这类所有对象共享。类的私有成员只能在类的内部被访问,在外部要访问时,友元机制提供了很好的途径和方法。4.2(a)友元函数:不是类的成员函数,在外部定义时,不需要加上(::)。在声明为友元函数时,需要在其函数名前加上关键字friend。(b)友元成员:一个类的成员函数要声明为另一个类的友元函数时,必须要先定义这个类。(c)友元类:友元类的声明方法是在另一个类中加入形如“friendclass类名"的语句。当一个类做另一个类的友元时,友元类中的所有成员函数都可以访问另一个类的所有成员(包括私有成员)。五、 派生类与继承5.1继承是在已有类的基础上创建新类的过程,新类就是派生类,已有类就是基类。派生类不仅可以继承基类的功能,而且还能对基类的功能进行扩充、修改或重定义。5.2派生类:派生类有三种继承方式,公有继承(public)、私有继承(private)、保护继承(protect)o对于public继承,基类的public和protect成员分别继承为派生类的public和protect成员,基类的private成员在派生类中被隐藏。5.3继承:继承有单一继承和多重继承两种方式。单继承的定义格式是class派生类名:继承方式基类名{...}。多重继承的声明方式是class派生类名:继承方式1基类名1,继承方式2基类名2,......,继承方式n基类名n{...}。在C++中,要使公共基类只产生一个拷贝,应该把这个基类声明为虚基类。使用关键字virtual,语法形式是class派生类名:virtual继承方式基类名{...}。六、 多态性6.1多态:多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作。这样可以极大地提高代码利用效率。6.2重载:函数重载,c++允许定义多个同名函数,只要这些函数属于不同的类或有不同的参数列表(类型,个数或不同类型参数的顺序至少有一个不同)。在调用重载函数时,为某类操作取一个通用的名字,而由编译器解决具体由哪个函数来执行。(析构函数无法重载)运算符重载:通过运算符重载可以使运算符在不同的上下文有不同的含义,便于程序功能的实现与修改。三大原则:重载不改变优先级重载不改变运算符操作数个数重载不能创造新运算符6.3模板:模板可以利用以下的代码实现TemplatevclassT>\\class也可以换为typename函数模板:模板函数可以实现多个不同类型的函数运用同种功能。模板的使用可以进行显示实例化与隐式实例化,同时,函数模板也可以进行重载。类模板:定义一个类模板是以关键字template开始,定义格式是:templatevclass类型参数〉七、:函数七、:函数当通过基类指针或引用将派生类对象作为基类使用时,覆写机制会失效,即只能访问基类中定义的成员。定义虚函数的方法是Virtual返回类型 函数名 (参数表){、函数体}在派生类中重新定义时,该函数的函数原型(包括返回类型,函数名,参数列表)必须与基类中的函数原型完全相同。注意,一个类的构造函数不能是虚函数,析构函数可以为虚函数。八、实验内容1•输入3个整数,按由小到大的顺序输出输入输出格式如下:输入:213输出:123设计程序如下:#include<iostream>usingnamespacestd;intmain(){inta,b,c,*p1,*p2,*p3,*p;cin»a»b»c;p1二&a;p2二&b;p3=&c;if(a>b){p=p2;p2=p1;p1=p;}C:\Users\tian\Desktop\c-i-+\1.exeC:\Users\tian\Desktop\c-i-+\1.exeelse{if(b>c){p二p3;p3二p2;p2二p;}if(a>c){p=p3;p3=p2;p2=p;}}cout<<*p1<<""<<*p2<<""<<*p3;return0;}E13H.23ProcessFeturned0<0x0>executiontime: 323sPressanykeytocontinue.搜狗拼音输入法全:2•输入3个字符串,按由小到大的顺序输出输入输出格式如下输入cbaabcbac输出abcbaccba设计程序如下:#include<iostream>#include<string>usingnamespacestd;intmain(){stringa1,a2,a3,temp;cin»a1»a2»a3;if(a1>a2){temp=a1;a1=a2;a2=temp;}if(a3<a2){if(a3<a1)cout<<a3<<endl<<a1<<endl<<a2;elsecout<<a1<<endl<<a3<<endl<<a2;}elsecout<<a1<<endl<<a2<<endl<<a3;
return0;}3.写一函数,将一个3X3的矩阵转置提示:矩阵可存放到二维数组中,用指针完成数的交换(swap)操作输入输出示例如下输入1234567895869设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){inti,j,t;inta[3][3],(*p)[3],*q;for(i=0;i〈3;i++)for(j=0;j〈3;j++)cin〉〉a[i][j];p=a;q=a[0];for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(q+3*i+j);*(q+3*i+j)=*(q+3*j+i);*(q+3*j+i)=t; }for(p=a;p<a+3;p++){q=*p;cout〈〈*q〈〈"";q++;cout〈〈*q〈〈"";q++;cout〈〈*q〈〈endl; }return0;}写一个函数,实现两个字符串的比较。即自己写一个strcmp函数,函数原型为intstrcmp(char*pl,char*p2)设pl指向字符串si,p2指向字符串s2。要求当s1=s2时,返回值为0;若slHs2时,返回它们二者第1个不同字符的ASCII码差值(如“BOY”与“BAD”,第2个字母不同,“0”与“A”之差为79-65=14)。如果s1〉s2,则输出正值;如果s1〈s2,则输出负值。当1个字符串为另一个字符串从第一个字符开始的字串时,如diffculty和diffcult,输出y的ASCII码值。输入输出实例如下输入BOYBAD设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){chara[100],b[100];char*x,*y;intk;intstrcmp(char*p,char*o);cin〉〉a〉〉b;x=a;y=b;k=strcmp(x,y);cout〈<k;return0;}intstrcmp(char*p,char*o){inti,k;k=0;(*(o+i)!二(*(o+i)!二'\0');i+=l){if(*(p+i)==*(o+i))k=0;else{k=*(p+i)-*(o+i);break;}}returnk;}编写C++风格的程序,输出100以内的所有素数。主:各个素数之间用空格隔开。设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){intn,r,i;for(n=2;n〈=100;n++){for(i=2;i<=n-1;i++){r=n%i;if(r==0)break;}if(i>=n-1)cout〈〈n〈〈""}return0;编写C++风格的程序,实现10个整数的冒泡排序(按递增的顺序)。。注:输出的整数之间用空格隔开。设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){inta[10];inti,j,t;for(i=0;i〈10;i++){cin〉〉a[i];}for(i=0;i〈9;i++){for(j=0;j〈9-i;j++){if(a[j]〉a[j+l]){t二a[j];a[j]=a[j+1];a[j+1]=t;}}}for(i=0;i〈10;i++)cout〈〈a[i]〈〈""return0;编程求三个数(假定这三个数中可以有两个或三个数相同)的最大公约数与最小公倍数。例如:输入:101220输出260设计程序如下:#include〈iostream〉usingnamespacestd;{cin〉〉a〉〉b〉〉c;intgys(inti,intj);x二gys(gys(a,b),c);t=gys(a,b);y=a*b/t;t=gys(y,c);z=y*c/t;cout〈〈x〈〈endl〈〈z;return0;}intgys(inti,intj){intt;while(i!=0){t二j%i;j=i;i=t;}return(j);}用递归的方法求n!。例如:输入5输出120设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){intn,y;cin〉〉n;y二fac(n);cout〈〈y;return0;}intfac(intn){intf;if(n<0)cout〈〈"dataerror";elseif(n==0||n==1)f=1;elsef=fac(n-1)*n;return(f);}n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下的是原来第几号的那位。(用指针实现)例如:输入8输出7设计程序如下:#include〈iostream〉usingnamespacestd;{inti,k,m,n,num[50],*p;cin〉〉n;p二num;for(i=0;i〈n;i++)*(p+i)二i+1;i=0;k=0;m=0;while(m〈nT){if(*(p+i)!=0)k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n)i=0;
while(*p==0)p++;cout〈〈*p;return0;}建立一个链表(可以存放10个整数),给链表结点赋值,并输出。例如:输入98765432110输出98765432110设计程序如下:#include〈iostream〉usingnamespacestd;structform{intnum;structform*next;};intmain(){structforma,b,c,d,e,f,g,h,i,j,*head,*p;cin〉〉a.num〉〉b.num〉〉c.num〉〉d.num〉〉e.num〉〉f.num〉〉g.num〉〉h.num〉〉i.num〉〉j.num;head二&a;next二&b;next二&c;next二&d;next二&e;next二&f;next二&g;next二&h;next二&i;next二&j;next二NULL;p二head;do{cout〈〈p-〉num〈〈"";p=p->next;}while((p-〉next)!二NULL);cout〈〈p-〉num;return0;}11•有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数(用指针实现)。例如:输入:812436567827113输出2711124365678设计程序如下:#include〈iostream〉usingnamespacestd;intmain(){int*p,a[50],i,j,k,n,m;p=a;cin〉〉n;for(i=0;i〈n;i++)cin〉〉*(p+i);cin〉〉k;m=k%n;for(i=0;i<m;i++)cout〈〈*(p+n—m+i)〈〈""p=a;for(i=0;i〈n-m;i++)cout〈〈*(p+i)〈〈""return0;}12.设计并定义一个矩形类(Rectangle),属性为矩形的左下与右上角的坐标,操作为计算矩形的周长和面积。例如:输入输出设计程序如下:#include〈iostream〉#include<math.h〉usingnamespacestd;classjuxing{private:intlength,width;public:juxing(inta,intb){length二a;width二b;}juxing(constjuxing&p){length二p.length;width二p.width;}voidprint(){intC,S;C=2*(length+width);S=length*width;cout〈〈C〈〈''〈〈S〈〈endl;}~juxing(){}};intmain(){inta,b,c,d,L,W;cin〉〉a〉〉b〉〉c〉〉d;L二fabs(a-c);W二fabs(b-d);juxingA(L,W);A.print();return0;15.设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日1(Birthday)和家庭住址(HomeAddress)数据类型均为字符串,字符串长度均为20。成员函数包括人员信息的录入和显示。还包括构造函数与拷贝构造函数。设计一个合适的初始值。输入:610111788664369950张三男1992.03.12西安交通大学输出:610111788664369950张三男1992.03.12西安交通大学设计程序如下:#include<iostream〉#include〈string〉usingnamespacestd;classPersonpublic:Person(){}//缺省构造函数Person(stringi,stringn,strings,stringb,stringh):idperson(i),name(n),sex(s),birthday(b),homeaddress(h){}//含参数的构造函数Person(Person&p)//复制构造函数{idperson二p.idperson;name二;sex二p.sex;birthday二p.birthday;homeaddress二p.homeaddress;}voidset_info();//信息录入voiddis_info();//信息显示private:stringidperson;stringname;stringsex;stringbirthday;stringhomeaddress;};voidPerson::set_info(){cin〉〉idperson〉〉name〉〉sex〉〉birthday〉〉homeaddress;}voidPerson::dis_info(){cout〈〈idperson〈〈""〈〈name〈〈""〈〈sex〈〈""<<birthday〈〈""〈〈homeaddress〈〈endl;}intmain(){Persona;a.set_info();a.dis_info();return0;}17.构造一个日期时间类(Timedate),数据成员包括年、月、日和时、分、秒,函数成员包括设置日期时间和输出时间,并完成测试。(包括用构造函数和普通成员函数来设置日期时间值)设计程序如下:#include〈iostream〉#include〈ctime〉usingnamespacestd;classTimeDate{private:intyear;intmon;intmday;inth;intm;ints;public:TimeDate(){cout〈〈"construetingTimeDate..."〈〈endl;tm*dt;time_tcurr;curr=(time(0));dt二localtime(&curr);year二dt-〉tm_year+1900;mon=dt-〉tm_mon+l;mday=dt-〉tm_mday;h=dt-〉tm_hour;m=dt-〉tm_min;s=dt-〉tm_sec;}TimeDate(inta,intb,intc,intd,inte,intf){year二a;mon=b;mday=c;h=d;m=e;s=f;}~TimeDate(){cout〈〈"destruetingTimeDate..."〈〈endl;voidshow(){cout〈〈year〈〈'-'〈〈mon〈〈'-'〈〈mday〈〈" "〈〈h〈〈":"〈〈m〈〈":"〈〈s〈〈endl;}};intmain(){TimeDatecurr;curr.show();TimeDatea(2014,3,12,12,30,45);a.show();return0;}18、编写一个程序设计一个汽车类vehicle,包含的数据成员有车轮个数wheels和车重weight.小车类car是它的私有派生类,其中包含载人数passenger_load.卡车类truck是vehicle的私有派生类,其中包含载人数passenger_load和载重量payload,每个类都有相关数据的输出方法。程序设计:#include〈iostream〉usin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物联网在公共服务领域的深度融合-洞察及研究
- 移动互联网时代模特经纪模式革新-洞察及研究
- 智能监测在水暖设备维护中的应用-洞察及研究
- 2025年经济师考试冲刺押题 初级经济基础知识核心考点试题试卷
- 2025湖北省中考试题及答案
- 2025创业培训考试题及答案
- 四川省简阳市养马区2026届数学八上期末检测模拟试题含解析
- 2026届内蒙古开来中学七年级数学第一学期期末学业水平测试模拟试题含解析
- 2025年淮北矿工总医院专业技术人员招聘62人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025广东广州医科大学附属第五医院第一次招聘17人模拟试卷及参考答案详解
- 2025年贵州高考生物试卷真题及答案详解(精校打印版)
- 2025四川成都高新投资集团有限公司选聘中高层管理人员4人笔试参考题库附答案解析
- 湖南省九校联盟2026届高三上学期9月第一次联考物理试题(含答案)
- 水利工程水利工程施工技术规范
- 健康安全紧急培训内容课件
- 从安全感缺失剖析《榆树下的欲望》中爱碧的悲剧根源与启示
- 2025中证金融研究院招聘11人考试参考题库及答案解析
- 2025年保密观考试题库及答案
- 辽宁省名校联盟2025年高三9月份联合考试政治(含答案)
- 国产美妆品牌完美日记短视频营销策略研究
- (完整)中国的丹霞地貌ppt
评论
0/150
提交评论