C++常见面试问题解答

1、如何理解面向对象?

把一组数据结构和处理它们的方法组成对象,把相同行为的对象归纳为类,通过类的封装隐藏内部细节,通过类的继承实现特化、泛化,通过多态实现基于对象类型的动态分派。

2、面向对象和基于对象的区别?

面向对象的三大特点(封装,继承,多态)缺一不可。基于对象是过程化语言自然演进而来,属于结构化编程。

3、函数多态有什么用?

函数多态有两种表现形式(重载和覆盖),相同名称的函数声明时传递不同的参数可以实现不同的功能;覆盖即子类继承父类的时候可以声称跟父类完全一样的函数(名称和参数)以达到实现不同的功能。

4、拷贝构造函数和等号的区别?

等号即单纯把右边的值赋值给左边,且等号左右两边的变量必须事先声明;拷贝构造函数可以在声明的时候调用,若函数中有指针会开辟内存空间,然后再赋值。

5、怎么在指定区域new一个对象?

用placement new

6、int对象new的时候会不会初始化为0?

若后面有括号就可以,比如int *a = int10

7、虚析构函数的作用?

删除基类对象的时候可以调用子类对象的析构函数

8、多线程的作用是什么?

使用多线程一般有两个不同的目的,一是把程序细分为几个功能相对独立的模块,防止其中一个功能模块阻塞导致整个程序假死。另一个就是提高运行效率,比如多个核同时跑,或单核里面某个线程进行IO操作时,另一个线程可以同时执行。

9、多线程有什么好处?

1:资源利用率高,程序设计更简单,程序响应更快。

10、什么是泛型编程?

泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器库。所谓通用的标准容器库,就是要能够做到,比如用一个List类存放所有可能类型的对象这样的事;泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。泛型即是指具有在多种数据类型上皆可操作的含义,与模板有些相似。STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。

11、主线程的作用?

当一个程序启动时,就有一个进程被操作系统(OS)创建,与此同时一个线程也立刻运行,该线程通常叫做程序的主线程(Main Thread),因为它是程序开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程。每个进程至少都有一个主线程,在Winform中,应该就是创建GUI的线程。
主线程的重要性体现在两方面:1.是产生其他子线程的线程;2.通常它必须最后完成执行比如执行各种关闭动作。

12、C++如何产生不重复的随机数?

这个函数操作的对象是容器的迭代器,即我们需要将存储数据从数组变为容器就好了,下面代码实现一下:

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

void randperm(int Num)
{
    vector<int> temp;
    for (int i = 0; i < Num; ++i)
    {
        temp.push_back(i + 1);
    }

    random_shuffle(temp.begin(), temp.end());

    for (int i = 0; i < temp.size(); i++)
    {
        cout << temp[i] << " ";
    }
}

cout << endl; 

13、linux core文件怎么查看和调用?

首先,你的Segmentation Fault错误必须要能重现(废话…)。

然后,依参照下面的步骤来操作:
(1)无论你是用Makefile来编译,还是直接在命令行手工输入命令来编译,都应该加上 -g 选项。
(2)一般来说,在默认情况下,在程序崩溃时,core文件是不生成的(很多Linux发行版在默认时禁止生成核心文件)。所以,你必须修改这个默认选项,在命令行执行: ulimit -c unlimited 表示不限制生成的core文件的大小。
(3)运行你的程序,不管用什么方法,使之重现Segmentation Fault错误。
(4)这时,你会发现在你程序同一目录下,生成了一个文件名为 core.*** 的文件,即核心文件。例如,“core.15667”这样的文件。
(5)用GDB调试它。假设你的可执行程序名为test,则在命令行执行:
gdb test core.15667
然后可能会显示出一堆信息:

GNU gdb Fedora (6.8-27.el5)

Copyright (C) 2008 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>;

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.  Type "show copying"

and "show warranty" for details.

This GDB was configured as "i386-redhat-linux-gnu"...


warning: Can't read pathname for load map: Input/output error.

…………………(中间还有很多内容,此处省略)……………………………

Loaded symbols for /usr/lib/libgpg-error.so.0

Core was generated by `./test'.

Program terminated with signal 11, Segmentation fault.

[New process 15668]

#0  0x0804c760 in thread _handler () at test.cpp:707

707                             CDev* cur_dev = *it_d;


然后我们输入并执行命令 bt :

(gdb) bt


就会得到类似于下面的信息:


#0  0x0804c760 in thread _handler () at test.cpp:707

#1  0x006b149b in start_thread () from /lib/libpthread.so.0

#2  0x0060842e in clone () from /lib/libc.so.6

于是,我们一眼就看出来了:程序是在第707行使用指针时出的问题。 

14、大数据查询的优化方案是什么?

1、优化索引;2、使用中间表。

15、C++空类默认产生哪些类成员函数?

  Empty(); // 缺省构造函数

  Empty( const Empty& ); // 拷贝构造函数

  ~Empty(); // 析构函数

   Empty& operator=( const Empty& ); // 赋值运算符

   Empty* operator&(); // 取址运算符

   const Empty* operator&() const; // 取址运算符 const  

16、关于C++ const的全面总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。
Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
const作用:
在这里插入图片描述

17、C++五种内存分配是什么?

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
  堆,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
  自由存储区,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
  全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法)

18、C++强制转换符中static_cast和dymic_cast的区别?

static_cast也可以用在于基类与派生类指针或引用类型之间的转换。然而它不做运行时的检查,不如dynamic_cast安全。static_cast仅仅是依靠类型转换语句中提供的信息来进行转换,而dynamic_cast则会遍历整个类继承体系进行类型检查,因此dynamic_cast在执行效率上比static_cast要差一些。

发布了252 篇原创文章 · 获赞 151 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39885372/article/details/104257505