《面向对象考试要点纲要.docx》由会员分享,可在线阅读,更多相关《面向对象考试要点纲要.docx(10页珍藏版)》请在第一文库网上搜索。
1、*稼*a共15分程序填空:后面的拷贝构造函数、常量的定义:定义常量要初始化constAoatM=IO;常变量在声明时必须进行初始化;常变量初始化之后,不允许再被赋值;常变量存储在数据区,可以对其取地址。二、声明一个引用时,必须同时初始化-引用名不能再作为其他变量的别名,要区分引用与指针的区别“I加ABCD下答案D三、函数重载不能仅靠函数的返回值类型的不同进行函数重载,用户不定义,系统为其生成默认的构造函数成员函数允许重载一个类中的成员函数可以重名。成员函数重载的条件是重载成员函数的形参列表不同。不能仅依赖成员函数的返回值不同来重载函数。成员函数的重载和普通函数的重载完全一样。如果函数调用时的实
2、参类型与一个重载函数的形参类型完全匹配,则调用该重载函数;如果找不到与实际参数类型完全匹配的函数,但如果通过类型转换后能找到完全匹配的函数,编译程序调用该重载函数。如果函数调用时为相应参数指定了参数值,则参数将使用该值;否则参数使用其默认值。默认参数的设置应从参数表的最右边开始设置,从右到左依次设置。四、类是对象的抽象,而对象是类的实例I类的实例化:通过类创建对象类是一组具有相同特征和行为的对象的集合。类是用来描述其所属集合中所有对象的属性和方法,即对象的内部结构。封装:把属性和行为(方法)通过CIaSS封藏起来,对象将其大部分实现细节隐藏起来封装考虑的主要问题是类的哪些属性和行为对外是公开的
3、,哪些属性和行为对外是不公开的。把对外不公开的属性和行为定义为私有成员。把对外公开的属性和行为定义为公有成员。公有成员就成为外界和属于该类的对象进行交流的接口。封装体现了信息隐藏。C+中,多态性有两种:编译时多态(静态联编)运行时多态(动态联编)类的实例化:通过类创建对象五、的造函皴构造函数与类同名没有返回值,原型中也没有VOid。构造函数可以重载。构造函数可以带有默认参数。如果一个类你没有定义构造函数,那么系统会为你定义一个构造函数,该构造函数的参数表和函数体为空;六、析构函数析构函数与类同名,只是在前面添加了符号析构函数没有返回值,原型中也没有Void。析构函数没有参数,一个类只能有一个析
4、构函数,析构函数不能被重载析构函数的函数体可写在类体内,也可写在类体外。将要释放某个对象所占据的存储空间之前,系统自动调用析构函数。析构函数也可以被程序显示调用。对于一个类,如果没有显示定义构造函数,编译器自动为该类产生一个构造函数。对于一个类,如果没有显示定义析构函数,编译器自动产生为该类一个析构函数。七、静态成员与非静态成员。静态成员函数没有this指针。静态成员函数与非静态成员函数的根本区别是:非静态成员函数有this指针,而静态成员函数没有this指针,因而决定了静态成员函数不能默认访问本类中的非静态成员。八、拷贝构造函数每个类都必须有一个拷贝构造函数,如果没有显式定义拷贝构造函数,则
5、编译系统自动生成一个拷贝构造函数,作为公有成员。通常的拷贝构造函数的参数:参数是本类对象的常引用系统自动生成的拷贝构造函数的函数体不为空,拷贝的策略是逐个成员依次拷贝。:Arrg(K得5DHtHC72,c,r(in.IICwt1t(ntiivT%m-nSkim时)rr*y:Array(constArraV&rr&H):mnSbHamNmpDataj=nwint,mnSM.,:or(ntI=o;IVm-nSizv;)m_PDHtHIi1=a.mjData;九、友员函数友元函数不是类的成员函数,但是它可以访问类中的私有成员。友元函数需要在类体内进行声明,声明时前面加上关键字friendo带有默认参
6、数的构造函数友元函数的作用在于提高程序的运行效率,但是,它破坏了类的封装性,使得非成员函数可以访问类的私有成员。十、函数模板与模板函数的区别:函数模板不是一个具体类型函数,而是一组函数的样板,在定义中使用了数据类型参数。模板函数是一种实实在在的函数定义,前面所说的调用函数模板实际上是调用由函数模板生成的模板函数。模板函数是在编译期间由编译系统根据需要生成。函数模板使用数据类型参数来定义函数,使用模板的时候,数据类型参数要用具体数据类型替换。数据类型参数可以用任意一个合法的实际数据类型替换函数模板返回值的类型也可以是数据类型参数函数模板中可以带有多个数据类型参数。函数模板可以带有己存在的数据类型
7、。在调用函数模板时,编译系统会自动生成所需的函数定义,这一过程称为函数模板的实例化普通函数可以与函数模板重载答案C通常的拷贝构造函数的参数:参数是本类对象的常引用十一、继承性派生类可以改造基类的成员派生类不能继承基类的构造函数与析构函数。派生类的数据成员有两部分(1)从基类继承下来的。(2)派生类中新增的。如果在派生类构造函数的初始化列表中没有明确指定基类数据成员的初始化方式,则调用基类中的默认构造函数来初始化基类成员。这时如果基类中没有这样的构造函数,会编译出错。派生类相对于基类的变化,主要体现在:(1)派生类对基类的扩充(2)派生类中的成员对基类成员的隐藏析构函数执行顺序与构造函数完全相反
8、创建派生类对象时构造函数的执行顺序:按照基类被继承时声明的顺序,调用基类构造函数。按照内嵌对象在派生类中声明的顺序,调用内嵌对象的构造函数。1bhhIII1(IIHIh(1)Huu1m1,Viu1h)最后输出:ConA1,ConB1,ConA2,ConB2,十二、C+中,多态性有两种:编译时多态(静态联编)运行时多态(动态联编)编译时多态性通过函数重载来实现。运行时多态是通过虚函数实现的,同时还要借助赋值兼容原则。当基类指针指向派生类对象,通过基类指针只能访问对象中从基类继承下来的成员(不管该成员是否被派生类的成员隐藏)。当基类引用来引用派生类对象时,通过基类引用只能访问对象中从基类继承下来的
9、成员(不管该成员是否被派生类的成员隐藏)十三、虚函数可以将一个派生类的对象的地址赋给其基类的指针变量。通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新增成员。派生类的对象可以初始化基类的引用通过这种引用只能访问派生类对象中的由基类继承来的成员,不能访问派生类中的新增成员。在派生类中必须定义和基类中虚函数原形相同的成员函数:函数名、返回类型、参数类型、参数个数、参数顺序必须基类中虚函数一致。否则达不到动态联编的效果。在派生类中和基类虚函数原形相同的成员函数,即使在前面没有加上virtua1关键字,也自动成为虚函数。纯虚函数声明语法:virtua1返回类型函数名(参数表)=0;抽象
10、类:至少包括一个纯虚函数的类称为抽象类。抽象类使用的要求:抽象类不能实例化,不能通过抽象类定义对象。抽象类只作为基类被继承,无派生类的抽象类亳无意义。在派生类中我们要实现基类中的纯虚函数,或者把基类中的纯虚函数继续声明为纯虚函数。可以定义抽象类的指针或引用,这个指针或引用必然指向其派生类对象不能定义虚构造函数。oidfun()tfun(%hreturn0;vrtua1iCQUtUtfUn(峰cShpr4r次次砍恢 P忸11如极破一愀惭愀九P的, ,e11数次次次次 %l8蜘函函函函造造造造 ;数构构构构eSt函A)B)oo)C ,卜#inc1udeusingnamespacestd;c1ass
11、Shape(pub1ic:virtua1doub1eGetAreaOconst=O:virtua1doub1eGetcir()const=0;c1assCirc1e:pub1icShapedoub1em_dr;pub1ic:Circ1e(doub1er=O):m_dr(r)virtua1doub1eGetArea()constreturn3.14*m_dr*m_dr;virtua1doub1eGetcirOconstreturn2*3.14*m-dr;);c1assRetang1e:pub1icShapedoub1em_da;doub1em_db;pub1ic:Retang1e(doub1ea=0,doub1eb=O):m_da(a),m_db(b)virtua1doub1eGetAreaOconst(returnm_da*m_db;)virtua1doub1eGetcirOconst(return2*(m_da+m_db););intmain()(Circ1ec1(IO);coutc1GetAreaOend1;Retang1ec2(12,12);coutc2.GetArea()end1;returnO;