资源描述
1.简述面对对象的程序设计的重要特点?面对对象的程序设计语言都具备多态性、继承性、封装性、抽象性等特点。封装性:隐蔽了抽象的内部实现细节,将数据抽象的外部接口与内部实现细节清楚地分离开。继承性:继承所体现的是对象类之间有关的关系,使得某类对象能够继承另外一类对象的特性和行为。多态性:不一样的对象收到相同的消息时产生多个不一样的行为方式。抽象性:通过对数据实例的分析,抽取其共同性质的成果。强调对象的共同点,忽视他们的不一样点。
2.结构函数的功效是什么?结构函数有哪些特点?结构函数是一个特殊的组员函数,它的功效是对创建的对象进行初始化。结构函数具备下述特点:①该函数名字同类名;②该函数定义时无须指定返回类型;③该函数能够重载、能够设置默认参数;即能够无参数,又能够一个或多个参数;④该函数是由系统在创建对象时自动调用的。
3.什么是类?类与对象有什么关系?类是面对对象程序设计的基础。类代表了某一批对象的共性。类既包括数据,也包括操作数据的函数。类是对象的模板,是用来定义对象的一个抽象类型。在类的定义中不能为数据组员赋值。在面对对象的C++程序设计中,对象意味着类的实例。类是一个用户自定义的数据类型。对象是使用自定义的类名在程序中阐明变量。或者说,具备类类型的变量即为对象。类是创建对象的模板,对象是类的实例。
5.何时执行结构函数和析构函数?类是一个用户自定义的类型,申明一个对象的时候,编译程序需要为对象分派存储空间,进行必要的初始化,为对象初始化各种数据。在C++中,这项工作是由结构函数来完成的。结构函数在对象被创建的时候由系统自动调用。析构函数与结构函数的作用几乎恰好相反,它用来完成对象被删除前的某些清理工作。一般情况下,析构函数在对象的生存周期即将结束的时候由系统自动调用。
6.简述调用拷贝结构函数的三种情况,一个类中有几个结构函数?一个类中有几个拷贝结构函数?一个类中有几个析构函数?拷贝结构函数的作用是当用一个已知对象初始化另一个对象时,系统将自动调用拷贝结构函数进行对象之间的值的拷贝。类的定义中,假如没有设计结构函数,编译器会提供一个默认结构函数。假如在类中定义了结构函数,那么编译器就不再提供默认结构函数。假如类的设计者没有提供拷贝结构函数,编译器会提供一个拷贝结构函数。(1)创建一个对象,在用同类的另一个对象去初始化的时候使用拷贝结构函数。(2)当函数的形参是类的对象,调用函数时,这时要在内存新建立一个暂时对象,并通过暂时对象把实参对象拷贝到形参对象中。此时要调用拷贝结构函数。(3)当函数的返回值是类对象,函数执行完成返回时也是要建立一个暂时对象,再返回给调用者,此时要调用拷贝结构函数。一个类中能够有多个结构函数,一个类中有一个拷贝结构函数,一个类中有一个析构函数。
7. 能够重载类的析构函数吗?不能。
对于一个类来讲,只能有一个析构函数,也一定是class_name::~class_name()的形式。析构函数没有任何参数,也没有返回值。我们不能传递给析构函数什么参数,因为我们不能显式的调用析构函数。
8.简述静态数据组员和一般数据组员的区分,静态组员函数与一般组员函数的区分.静态数据组员不从属于任何一个详细对象,因此必须对它初始化,且对它的初始化不能在结构函数中进行,类中用核心字static修饰的数据组员叫做静态数据组员。静态组员函数只能访问静态数据组员、静态组员函数和类以外的函数和数据,不能访问类中非静态数据组员,因为非静态数据组员只有对象存在时才故意义。
9.什么是友元?类具备数据封装和隐藏的特性,只有类的组员函数才能够访问类的私有组员,外部函数只能访问类的公有组员。不过在某些情况下,需要在类的外部访问类的私有组员。这时,假如通过组员函数进行访问,因为参数传递、类型检查和安全性检查等需要时间上的开销,将影响程序的运行效率。为了处理这个问题,引入了友元。
友元能够在类外部直接访问类的私有组员,提升了程序的运行效率。
10. 拷贝结构函数的功效和特点是什么?:拷贝结构函数也是在创建对象时被系统调用的一个结构函数。它也是组员函数。该结构函数是在用已知对象创建另一个对象时系统自动调用的。拷贝结构函数的名字同类名,定义时无须指出返回类型,它有一个参数,数是该类的对象引用。它可与其他结构函数进行重载。
11.编写派生类的析构函数时,需要显式调用基类的析构函数吗?不需要。派生类的析构函数自动调用基类的析构函数。
12.哪些运算符能够被重载?哪些不能?“运算符重载”是针对C++原有运算符进行的,不能通过重载创造出新的运算符。大部分运算符都能够被重载,不能被重载的运算符有:
15.在类的组员的访问权限中, public,protected,private有什么区分?它们都是类组员的访问权限,public标注的组员是公有组员,也就是其他函数或者类的对象都能够访问它;private表示私有组员,它们不能被本类以外的对象或者函数引用;一个private型组员在它的类定义外部的任何地方都不能被访问。派生类不能直接访问基类的私有组员,不过能够通过基类提供的公有组员函数间接地访问基类的私有组员。protected修饰的组员是保护组员,除了本类或本类的派生类能够访问外其他都无权访问。一个protected型组员在它的类定义外部的任何地方都不能被访问,例外的是在派生类的定义中它是能够访问的。
16.类的继承方式有哪些,各自的特点是什么? 保持已经有类的特性而结构新类的过程称为继承。有三种类的继承方式:public(公有继承)、protected(保护继承)、private(私有继承)。(1)公有继承:派生类中的组员函数能够直接访问基类中的public和protected组员,但不能直接访问基类的private组员;通过派生类的对象只能访问基类的public组员。(2)私有继承:派生类中的组员函数能够直接访问基类中的public和protected组员,但不能直接访问基类的private组员;通过派生类的对象不能直接访问基类中的任何组员。(3)保护继承:派生类中的组员函数能够直接访问基类中的public和protected组员,但不能直接访问基类的private组员;通过派生类的对象不能直接访问基类中的任何组员。
17、简述派生类结构函数的调用次序。
派生类结构函数各部分的执行次序为:首先调用基类结构函数(按它们在派生类定义的先后次序,次序调用)。然后调用子对象结构函数(调用次序按各个对象在派生类内申明的次序)。最后调用派生类的结构函数。
18、简述派生类析构函数的调用次序。派生类析构函数各部分的执行次序为:派生类析构函数执行过程恰与结构函数执行过程相反。首先执行派生类析构函数,然后执行内嵌对象的析构函数,最后执行基类析构函数。
21. 什么是友元?为何要使用友元?什么是友元函数?什么是友元类?友元包括友元函数和友元类。它们被阐明在类体中,但又不是该类体的组员。使用友元的目标在于较以便地访问类体内的私有组员。友元被阐明时,前边要加修饰符friend。友元函数是阐明在类体内,能够访问该类的私有组员的一个函数,它被定义类体外,同定义一般函数同样。友元类是被前加friend修饰符阐明在类体内的一个类,该类的所有的组员函数都是被阐明为该类的友元函数。
22、. 静态组员函数与非静态组员函数有何不一样?静态组员函数一般是用来直接操作静态数据组员的。静态组员函数是要在阐明时前边加核心字static的,非静态组员函数是除了静态组员函数之外的组员函数。静态组员函数中能够直接引用静态数据组员,但不能直接引用非静态组员,需要引用时要通过对象来引用。
24.静态绑定(联编)和动态绑定(联编)的区分是什么?静态绑定指的是在编译时把一个组员函数调用与函数自身连接起来,与之相反,动态绑定是直到运行时连接起来。
26.什么是纯虚函数?纯虚函数是一个特殊的虚函数,纯虚函数没有详细的函数实现,因此是不能直接调用的虚函数,只有它在派生类中重载函数能够被调用。纯虚函数通过在申明中的初始化的最后的“=0”来标识。
27. 引入模板的作用是什么?所谓模板,就是将某段程序中的数据类型参数化,使得它能够处理某个范围内的数据类型,而无须为每种也许的类型都建立一个实例,从而防止重复的劳动,增强了程序的灵活性和有效性。
33. 什么是继承性 ? 为何说它是面对对象程序中的重要机制 ?继承是指一个对象是另一个对象的特例,则称这个对象继承了另一个对象。继承是创建新类的一个伎俩,通过继承生成的新类中包括了被继承类中的所有组员,并且它还具备自己定义的组员。继承性将提升可重用性,这是面对对象程序设计的重要特性。继承性又是多态性的重要基础。
34.C++中继承分为哪两类?继承方式又分哪3种?C++语言支持两种继承:单继承和多继承。有的面对对象程序设计语言只支持单继承,例如Java语言。C++语言中继承方式分为3种:公有继承(public)、私有继承(private)和保护继承(protected)。
35 . 派生类与基类之间有什么关系 ?
答:简单地说,派生类与基类之间是继承关系,即所属关系。详细表目前:
(1 ) 派生类是基类的详细化 ;
(2 ) 派生类是基类定义的延续 ;
(3 ) 派生类是基类的组合。
36. 3继承方式中派生类对基类组员的访问有何不一样?继承方式有3种,它们区分在于不一样继承方式使得基类组员在派生类中的访问权限不一样。详细讲来,公有继承方式时,基类中的公有和保护组员在派生类中仍是公有和保护组员;私有继承方式时,基类中的公有组员和保护组员在派生类中都为私有组员;保护继承方式时,基类中的公有组员和保护组员在派生类中都是保护组员。3种方式中,基类私有组员在派生类中都是不可见的。
38.函数重载的含义是什么?定义重载函数时应注意些什么问题?函数重载是指在相同的作用域内,相同的函数名对应着不一样的实现。选择函数实现时依照函数的参数类型、个数以及次序的不一样进行选用。因此,在定义重载函数时,一定要在参数的类型、个数和次序上有所区分,否则编译时将无法选择。另外,不应将功效毫不相干的函数定义为重载函数;不要出现因为使用函数默认值而出现调用两个函数时具备完全相同参数的情况。
展开阅读全文