C++考试会考的题目

C++考试会考的题目,第1张

C++考试会考的题目 1. 函数调用

除主函数外,其他任何函数都不能单独运行,函数功能的实现是通过被主函数直接或间接调用的。
函数调用发生时,首先要将实参的值按位置从左到右传递给对应的形参变量。一般情况下实参和形参的个数及排列是一一对应的,并且对应参数应该类型匹配。
数据传递方式:
一种是:将实参的值传给形参,形参是实参的一个拷贝,这种方式称为传值方式调用。
一种是:将实参的地址传给引用型形参,这时形参与实参是同一个变量,这种方式称为引用方式调用。

2. 默认形参怎么调用?

定义:
给形参一个默认值,这样形参就不必从实参取值了。
void f2(float r=2.54);
调用:f2();//f2(2.54)
如果有多个形参,可以使每个形参都有一个默认值,也可以只对一部分形参指定默认值。但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数,这是因为函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才能避免二义性。
void f1(float a,char c,int b =0,int c =0);
调用:f1(3.5,‘x’,5);//a=3.5,c=‘x’,b=5
调用的注意:
(1)如果函数的定义在调用之前,则应在函数定义中给出默认值。如果函数的定义在函数调用之后,则在函数调用之前需要有函数声明,此时必须在函数声明中给出默认值,在函数定义时可以不给出默认值。**也就是说必须在函数调用之前将默认值的信息通知编译系统。**由于编译是从上到下进行的,如果在函数调用之前未得到默认值信息,在编译到函数调用时,就会认为实参个数与形参个数不匹配而报错。
(2)一个函数不能既作为重载函数,又作为有默认参数的函数。因为当调用函数时,如果少写一个参数,系统哦无法判定是利用重载函数还是利用默认参数的函数,会出现二义性,无法执行。

3. 内联函数为什么?有什么特点,与普通函数的区别?

定义:
内联函数是在编译时,在每处调用内联函数的地方将内联函数内容展开,它使用方法很简单,只需要在函数首行的左端加一个关键字inline即可。
区别:
普通函数在被调用的时候,系统首先要到函数的入口地址去执行函数体,执行完成之后再回到函数调用的地方继续执行,函数调用时系统要建立栈空间、保护现场、传递参数以及控制程序执行的转移等,这些工作要系统时间和空间的开销,但如果函数功能简单,代码很短,但使用频率高,可以使用内联函数。内联函数不需要寻址,当执行到内联函数的时候,将此函数展开。
特点:
使用内置函数可以节省运行时间,但却增加了目标程序的长度。因此只有对于规模很小且使用频繁的函数,才可以大大提高运行速度。因为内联函数inline指示符对于编译器而言只是一个建议,所以编译器也可以选择忽略该建议。

4.析构函数和构造函数的作用是什么?什么时候调用呢?

构造函数
是用来处理对象的初始化的。它是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用他,而是在建立对象的时候自动执行的,每建立一个对象,就调用一次构造函数。构造函数的名字必须与类名同名,而不能任意命名,它不具有任何类型,不返回任何值。
它是在对类进行声明的时候由类的设计者来定义的,程序用户只须在定义对象的同时指定数据成员的初值即可。比如含参构造函数的调用如下:Box box1(15,30,25),无参构造函数调用如下:Box box2();其中Box为类,box1和box2为对象。
析构函数
是一种特殊的成员函数,它的作用与构造函数相反,名字是类名前面加一个~符号,它没有返回值,也没有函数类型,也没有函数参数,一个类只能有一个析构函数。
它不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新的对象使用。一般当对象的生命期结束时,会自动调用析构函数。
a. 函数中定义对象,函数结束时,对象释放,也会在释放前执行析构函数。
b.静态局部对象在函数调用结束时对象并不释放,只有在main函数结束时或者调用exit结束程序时才调用static局部对象的析构函数。
c.用new动态建立对象后,当用delete释放该对象时,会先调用该对象的析构函数。

5. 怎么建立复制构造函数?它用于哪里?

在建立对象时可用同一个类的对象来初始化该对象,这时所用的构造函数称为复制构造函数,这是就会出现一个数据成员相同,函数成员共用的对象出来。
形式为:类名(类名 &对象名);,如Box(Box &b);
用于三个方面:
a.程序中需要新建立一个对象,并用另一个同类的对象对它初始化。
b.当函数的参数为类的对象时,在调用函数时需要将实参对象完整地传递给形参,也就是需要建立一个实参的拷贝,这时就是按实参复制一个形参,系统通过调用复制构造函数来实现的。
c.函数的返回值为类的对象。在函数调用完毕将返回值带回函数调用处时,此时需要将函数中对象复制一个临时对象并传给函数的调用处。

6.类的静态数据成员与函数中的静态成员有何异同?

类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中,为该类所有对象公有。函数中的静态成员也位于公用内存中,不随函数调用而重新分配,所以总是保留上次进入并执行该函数后留下的信息。
(类的静态成员函数没有this指针,无法调用非静态成员,只用调用静态成员)

7.什么是this指针和作用

在对象的外部访问该对象的公有成员时,需要指明是哪一个对象,但是用对象的成员函数来访问本对象的成员时,只要给出成员名就可以实现对该对象的成员进行访问。这是因为每一个对象都有一个隐藏的this指针,它始终指向该对象,并将该指针作为一个参数自动传递给该成员函数,比如一个类创建多个对象,共用同一份成员函数拷贝,函数就是通过不同的this指针来了解取的是哪一个对象的成员数据。
(静态成员函数无this指针,它不属于具体的对象,而重载运算符的成员函数要借助this指针)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5503226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存