C面向对象问答总结及实例

上传人:hs****ma 文档编号:458698242 上传时间:2024-02-12 格式:DOCX 页数:7 大小:22.54KB
返回 下载 相关 举报
C面向对象问答总结及实例_第1页
第1页 / 共7页
C面向对象问答总结及实例_第2页
第2页 / 共7页
C面向对象问答总结及实例_第3页
第3页 / 共7页
C面向对象问答总结及实例_第4页
第4页 / 共7页
C面向对象问答总结及实例_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《C面向对象问答总结及实例》由会员分享,可在线阅读,更多相关《C面向对象问答总结及实例(7页珍藏版)》请在金锄头文库上搜索。

1、1. 一、简答题什么是类?什么是对象?对象与类的关系是什么?答:类就是相同的数据和相同的一组对象的集合,即类是对具有相同数据结构和相同操作的一类对象的描述;对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据操作;类和对象之间的关系是抽象和具体的关系。2. 构造函数和析构函数的主要作用是什么?他们各有什么特性?答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造

2、函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号();(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。3. 有哪几

3、种继承方式?每种方式的派生类对基类成员的继承性如何?答:三种继承方式(公有pubic、保护prdected、私有private);纟继承性可参见教材P143基类(父类)得私有成员,派生类(子类)都不能访问;基类得公有成员,派生类得继承方式决定了其函数得形式!基类得保护成员在派生类得公有继承中也是保护类型!4. 简要叙述友元运算符函数和成员运算符函数有什么不同点?答:(1)对双目运算符而言,成员运算符函数带有一个参数,而友元运算符函数带有两个参数;对单目运算符而言,成员运算符函数不带参数而友元运算符函数带一个参数。(2)双目运算符一般可以被重载为友元运算符函数或成员运算符函数,但某些情况,必须使

4、用友元函数。派生类构造函数和析构函数的执行顺序是怎样的?答:当创建对象时,编译系统会自动调用构造函数。当撤销对象时,编译系统会自动调用析构函数。当创建派生类的对象时,首先执行基类的构造函数,然后执行派生类的构造函数。当撤销对象时,则先执行派生类的析构函数,然后再执行基类的析构函数。5. 什么是虚函数?虚函数与函数重载有哪些相同点和不同点?答:虚函数是一个在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。声明虚函数的格式如下:virtual();在派生类中重新定义基类的虚函数是函数重载另一种形式,但它不同于一般的函数重载。当普通的函数重载时,其函数的参数或参数类型必须有所

5、不同,函数的返回类型也可以不同。对于虚函数,如果仅仅是返回类型不同,其余均相同,系统会给错误信息;若仅仅函数名相同,而参数的个数、类型或顺序不同,系统将它作为普通的函数重载,这时虚函数的特性将丢失。函数重载答:函数重载是指具有相似功能的不同函数使用同一函数名,但这些同名函数的参数类型、参数个数、返回值、函数功能可以不同。编译系统将根据函数参数的类型和个数来判断使用哪一个函数。体现了C+对多态性的支持。8.函数模板答:可以把逻辑功能相同而函数参数和返回值类型不同的多个重载函数用一个函数来描述。参数化的函数称为函数模板,代表的是一个函数家族。定义:template()9.类的继承和派生答:类的继承

6、就是根据一个类创建一个新类的过程。类的派生就是从已有类产生新类的过程。10.多态性及其实现答:多态性是指发出同样的消息被不同类型的对象接收时导致完全不同的行为。多态的实现:a) 函数重载b) 运算符重载虚函数赋值兼容规则11.赋值兼容规则答:一个公有派生类的对象在使用上可以被当作基类的对象,反之则禁止。具体表现在:a) 派生类的对象可以被赋值给基类对象。b) 派生类的对象可以初始化基类的引用。指向基类的指针也可以指向派生类12.联编:静态联编,动态联编答:联编又称绑定:是指计算机程序自身彼此关联的过程,也就是把一个函数名和一个函数体联系在一起的过程静态联编:在编译过程中,编译系统可以根据类型匹

7、配等特征来确定程序中调用操作与执行某个同名函数实现之间的关系,即确定某一个同名函数到底是要调用哪一段函数实现代码。函数重载和运算符重载就是通过静态联编方式实现的编译时的多态的体现。静态联编的优点是函数调用速度快、效率较高,缺点是编程不够灵活动态联编:只有在运行程序时才能确定将要调用的函数。这种在运行阶段进行的联编称为动态联编。动态联编的优点是提供了更好的编程灵活性、问题抽象性和程序易维护性,缺点是与静态联编相比,函数调用速度慢13.纯虚函数和抽象类答:带有纯虚函数的类称为抽象类:抽象类的主要作用是将有关的派生类组织在一个继承层次结构中,由抽象类为它们提供一个公共的根,相关的派生类就从这个根派生

8、出来。定义:class类名virtual类型函数名(参数表)=0;二、编程题例1、示例运算符重载,并与用成员函数实现的方式进行比较。计算应付给的人民币。#includeclassRMB/人民币类public:RMB(doubled)yuan=(int)d;jf=(int)(d-yuan)*100);/计算利息RMBinterest(doublerate);voiddisplay()cout(yuan+jf/100.0)endl;RMBoperator+(RMBd)/运算符“+”重载函数returnRMB(yuan+d.yuan+(jf+d.jf)/100.0);RMBoperator*(dou

9、blerate)/运算符“*重”载函数returnRMB(yuan+jf/100.0)*rate);private:unsignedintyuan;/元unsignedintjf;/角分;RMBRMB:interest(doublerate)returnRMB(yuan+jf/100.0)*rate);RMBRMB:add(RMBd)returnRMB(yuan+d.yuan+jf/100.0+d.jf/100.0);/以下是计算应付人民币的两种方法RMBexpense1(RMBprinciple,doublerate)/采用普通成员函数求本利和RMBinterests=principle.i

10、nterest(rate);returnprinciple.add(interests);RMBexpense2(RMBprinciple,doublerate)/采用运算符重载函数求本利和RMBinterests=principle*rate;/本金乘利率returnprinciple+interests;/本利和voidmain()RMBx=10000.0;doubleyrate=0.035;expense1(x,yrate).display();expense2(x,yrate).display();运行结果:1035010350例2、示例运算符重载为成员函数形式。复数类加法、减法和赋值

11、运算符重载。#includeclassComplex/复数类public:Complex(doubler=0.0,doublei=0.0)m_fReal=r;m_fImag=i;/doubleReal()returnm_fReal;doubleImag()returnm_fImag;Complexoperator+(Complex&c);Complexoperator+(doubled);Complexoperator-(Complex&c);Complexoperator=(Complexx);private:doublem_fReal,m_fImag;ComplexComplex:oper

12、ator+(Complex&c)Complextemp;temp.m_fReal=m_fReal+c.m_fReal;temp.m_fImag=m_fImag+c.m_fImag;returntemp;ComplexComplex:operator+(doubled)Complextemp;temp.m_fReal=m_fReal+d;temp.m_fImag=m_fImag;returntemp;ComplexComplex:operator-(Complex&c)Complextemp;temp.m_fReal=m_fReal-c.m_fReal;temp.m_fImag=m_fImag-

13、c.m_fImag;returntemp;ComplexComplex:operator=(Complexc)构造函数/返回复数的实部/返回复数的虚部/复数加复数/复数加实数/复数减复数/复数对象=复数/私有数据成员/重载运算符“+,”两个复数相加/实部相加/虚部相加/重载运算符“+,”一个复数加一个实数/重载运算符“-”,两个复数相减/实部相减/虚部相减/重载运算符“=”m_fReal=c.m_fReal;m_fImag=c.m_fImag;voidmain()Complexc1(3,4),c2(5,6),c3,c4;/定义复数类的对象coutc1=c1.Real()+jc1.Imag()e

14、ndl;coutc2=c2.Real()+jc2.Imag()endl;c3=c1+c2;/调用运算符“+、”“=”重载函数,完成复数加复数coutc3=c1+c2=c3.Real()+jc3.Imag()endl;c3=c3+6.5;/调用运算符“+、”“=”重载函数,完成复数加实数coutc3+6.5=c3.Real()+jc3.Imag()endl;c4=c2-c1;/调用运算符“-”、“=”重载函数,完成复数减复数coutc4=c2-c1=c4.Real()+jc4.Imag()endl;例3、示例单目运算符“+”重载为成员函数形式。/example58.cpp#includeclas

15、sClock/时钟类public:Clock(intNewH=0,intNewM=0,intNewS=0);voidShowTime();int参数以示区分voidoperator+();/前缀单目运算符重载函数的声明voidoperator+(int);/后缀单目运算符重载函数,加private:intHour,Minute,Second;Clock:Clock(intNewH,intNewM,intNewS)/构造函数if(0=NewH&NewH24&0=NewM&NewM60&0=NewS&NewS60)Hour=NewH;Minute=NewM;Second=NewS;elsecoutTimeerror!endl;voidClock:ShowTime

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号