C++说爱你不容易面试题-4
常考面试题
说说面对对象和面对过程的区别?⭐⭐⭐
两者的区别就在于:面向过程的编程思想,就是关注问题解决的过程,按顺序一步一步执行解决问题。而面向对象的编程思想,是把构成问题的各个事务分解成各个对象,即问题建模。建立对象的目的不是为了完成一个步骤,而是为了描述一个事务在解决问题中经过的步骤和行为。
说说类的访问权限有几种⭐⭐⭐⭐
类中成员访问属性有三种:
(1)私有成员(变量和函数)只限于类成员访问,由
private
限定;(2)公有成员(变量和函数)允许类成员和类外的任何访问,由
public
限定;(3)受保护成员(变量和函数)允许类成员和派生类成员访问,不允许类外的任何访问。所以
protected
对外封闭,对派生类开放。对象是值传递还是引用传递⭐⭐⭐⭐⭐
引用传递对象
通常,使用对象作为参数的函数时,应按引用而不是按值来传递对象,这样可以有效的提高效率。
原因
因为按值传递的时候,将会涉及到调用拷贝构造函数生成临时的拷贝,然后又调用析构函数,这在大型的对象上要比传递引用花费的时间多的多。当我们不修改对象的时候,应当将参数声明为const引用。
实例
void goodGay(Building &building){//引用传递 函数体 } void goodGay(Building building){//值传递 函数体 }
拷贝构造函数的参数类型为什么必须是引用⭐⭐⭐⭐⭐
如果拷贝构造函数中的参数不是一个引用,即形如CClass(const CClass c_class),那么就相当于采用了传值的方式(pass-by-value),而传值的方式会调用该类的拷贝构造函数,从而造成无穷递归地调用拷贝构造函数。因此拷贝构造函数的参数必须是一个引用。否则无法完成拷贝,而且栈也会满。
判断构造次数和析构次数⭐⭐⭐⭐⭐
如下面的例子,判断构造次数和析构次数
#include <iostream> using namespace std; class Myclass{ public: Myclass(int n){number=n;} //构造函数 Myclass(Myclass &other) {number=other.number;}//拷贝构造函数 ~Myclass(){}//析构函数 private: int number; }; Myclass fun(Myclass p){ Myclass temp(p); return temp; } int main(){ Myclass obj1(10),obj2(0); Myclass obj3(obj1); obj2=fun(obj3); return 0; }
解析:
(1)Myclass obj1(10),obj2(0); 这条语句调用了两次构造函数
(2)Myclass obj3(obj1); 这条语句直接调用了一次拷贝构造函数
(3)obj2=fun(obj3); 这条语句调用了三次拷贝构造函数,第一次是参数按值传递,使用拷贝构造函数创建了一个临时对象。第二次是函数内部使用拷贝构造函数初始化局部对象temp,第三次是按值返回需要用拷贝构造函数创建临时对象。
所以一共六次构造,六次析构。
说说友元函数⭐⭐⭐
定义
类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。
友元可以是一个函数,该函数被称为友元函数;
声明方式
如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend
调用方式
可以直接调用友元函数,不需要通过对象或指针。
缺陷
友元函数有权访问类的所有私有(private)成员和保护(protected)成员。破坏了类的封装性,并不建议使用友元
说说初始化列表的使用场景⭐⭐⭐⭐⭐
成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
const 成员或引用类型的成员。因为 const 对象或引用类型只能初始化,不能对他们赋值。
构造函数和初始化列表谁效率高?⭐⭐⭐⭐⭐
初始化列表效率高。因为比构造函数构造对象时,少一次对象拷贝。
下面这个例题,Student1有几个受保护的成员?⭐⭐⭐⭐⭐
class Student{ public: void display(); pro
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> - 本专刊适合于C/C++已经入门的学生或人士,有一定的编程基础。 - 本专刊适合于互联网C++软件开发、嵌入式软件求职的学生或人士。 - 本专刊囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构等一系列知识点的讲解,并且最后总结出了高频面试考点(附有答案)共近400道,知识点讲解全面。不仅如此,教程还讲解了简历制作、笔试面试准备、面试技巧等内容。 </p> <p> <br /> </p>