东软面试

C语言与C++语言的区别

C++ 和 C 语言在语法、面向对象特性、内存管理和应用场景等方面存在着明显的差异。 C 语言适合底层开发和对性能要求苛刻的场景,而 C++ 在 C 语言的基础上增加了面向对象等强大的特性,更适合大型项目和复杂系统的开发。C++ 是面向对象的,具有丰富的面向对象特性和标准库,但语法较复杂;C 语言是面向过程的,具有简单直观的语法和较高的性能,但缺乏面向对象特性和丰富的标准库。

C++之中子类和父类的构造和析构函数的调用顺序

父类在前子类在后,即先调用父类的构造函数,再调用子类的构造函数。 父类和子类 析构函数 的调用顺序:子类在前父类在后,即先调用子类的析构函数,再调用父类的析构函数。 对于不存在多态的继承,一定要用子类的指针来删除子类,否则会导致子类无法被完全析构。 对于存在多态的继承, 一定要将父类的析构函数声明成virtual,否则会导致子类无法被完全析构。

C++之中线程和多线程之中的调用

C++ 提供了强大的多线程支持,特别是在 C11 标准及其之后,通过 标准库使得多线程编程变得更加简单和安全。核心组件包括: stdmutex:用于线程之间的互斥,防止多个线程同时访问共享资源。C11 新标准中引入了5个头文件来支持多线程编程,如下图所示: 使用多进程并发是将一个应用程序划分为多个独立的进程(每个进程只有一个线程),这些独立的进程间可以互相通信,共同完成任务。

C++之中容器Vector的作用。

C++中vector的扩容策略和原理是通过重新分配内存来实现的。当vector中的元素数量超过当前的容量时,vector会分配一个更大的内存块,并将原来的元素复制到新的内存中。通常,新的容量会比原来的容量大一些,以便减少频繁的扩容操作。不同的编译器可能采用不同的扩容倍数,如GCC是二倍扩容,VS13是1.5倍扩容。扩容后,原来的内存会被释放,原来的迭代器会失效。

C++之中虚函数和纯虚函数的定义和区别。

一、虚函数

虚函数是指在C++中,被virtual关键字修饰的成员函数。当调用此类函数时,编译器会根据调用对象的实际类型,而不是根据声明类型来调用适当的函数。这种机制使得虚函数能够实现多态性,即相同的函数名在不同的对象上可以表现出不同的行为。

虚函数可以在类中声明,也可以在类的外部声明。编译器会自动将它们转换为虚函数,并在类对象中插入一个指向虚函数表的指针。虚函数表保存了类中所有虚函数的地址,通过虚表指针可以找到对应的函数地址,从而实现动态绑定。

虚函数可以有实现,也可以没有实现。在子类中,虚函数可以被覆盖,也可以不被覆盖。如果子类没有覆盖基类的虚函数,那么当通过基类指针或引用调用该函数时,将调用基类的虚函数实现。
二、纯虚函数

纯虚函数是一种特殊的虚函数,它在声明时除了加上virtual关键字外,还需要加上=0。纯虚函数没有函数体,只提供函数声明,而不提供实际实现。由于编译器不能确定如何实现纯虚函数,因此需要在子类中实现它。

纯虚函数只能在类中声明,而不能在类的外部声明。由于纯虚函数没有实现,因此它所在的类被称为抽象类。抽象类不能实例化对象,只能作为基类为派生类服务。派生类必须实现基类中所有的纯虚函数,否则派生类也将成为抽象类,不能实例化对象。
三、虚函数与纯虚函数的区别

定义方式:虚函数在定义时在普通函数的基础上加上virtual关键字,而纯虚函数在定义时除了加上virtual关键字外,还需要加上=0。
实现方式:虚函数可以有实现,也可以没有实现;而纯虚函数没有实现,必须在子类中实现。
使用方式:虚函数可以直接使用,而纯虚函数必须在派生类中实现后才能使用。
多态性:虚函数和纯虚函数都可以实现多态性,但纯虚函数更多地用于定义抽象接口,而虚函数则用于实现具体的多态行为。
类类型:包含虚函数的类可以是普通类,也可以是抽象类;而包含纯虚函数的类一定是抽象类。

C++之中进程间通信的方式。

管道(匿名和命名)、共享内存、消息队列和信号量
C++中实现进程间通信的几种常见方法包括管道(匿名和命名)、共享内存、消息队列和信号量。每个方法都附带了示例代码,展示了如何在父子进程中进行数据传输。这些通信方式各有特点,如管道的半双工特性,共享内存的高效性,消息队列的可靠性以及信号量的同步控制功能。

posted on 2025-05-26 15:03  RainbowSea26  阅读(25)  评论(0)    收藏  举报