面试专区 您所在的位置:网站首页 fesco面试题目 面试专区

面试专区

2024-07-13 23:05| 来源: 网络整理| 查看: 265

30道C++ 基础高频题整理(附答案背诵版) 1. C和C++有什么区别?2. C语言的结构体和C++的有什么区别3. C 语言的关键字 static 和 C++ 的关键字 static 有什么区别4. C++ 和 Java有什么核心区别?5. C++中,a和&a有什么区别?6. C++中,static关键字有什么作用?7. C++中,#define和const有什么区别?9. 静态链接和动态链接有什么区别?10. 变量的声明和定义有什么区别11. typedef 和define 有什么区别12. final和override关键字13. 宏定义和函数有何区别?14. sizeof 和strlen 的区别15. 简述strcpy、sprintf 与memcpy 的区别[16. volatile有什么作用](https://www.iamshuaidi.com/?p=22677)[17. 一个参数可以既是const又是volatile吗](https://www.iamshuaidi.com/?p=22679)[18. 全局变量和局部变量有什么区别?操作系统和编译器是怎么知道的?](https://www.iamshuaidi.com/?p=22681)[19. 什么是C++中的指针和引用?它们有什么区别?](https://www.iamshuaidi.com/?p=22683)[20. 数组名和指针(这里为指向数组首元素的指针)区别?](https://www.iamshuaidi.com/?p=22685)[21. 一个指针占用多少字节?](https://www.iamshuaidi.com/?p=22687)[22. 什么是智能指针?智能指针有什么作用?分为哪几种?各自有什么样的特点?](https://www.iamshuaidi.com/?p=22689)[23. shared_ptr是如何实现的?](https://www.iamshuaidi.com/?p=22691)[24. 右值引用有什么作用?](https://www.iamshuaidi.com/?p=22693)[25. 悬挂指针与野指针有什么区别?](https://www.iamshuaidi.com/?p=22695)[26. 指针常量与常量指针区别](https://www.iamshuaidi.com/?p=22697)[27. 如何避免“野指针”](https://www.iamshuaidi.com/?p=22699)[28. 句柄和指针的区别和联系是什么?](https://www.iamshuaidi.com/?p=22701)[29. 说一说extern“C”](https://www.iamshuaidi.com/?p=22703)[30. 对c++中的smart pointer四个智能指针:shared_ptr,unique_ptr,weak_ptr,auto_ptr的理解](https://www.iamshuaidi.com/?p=22705)

1. C和C++有什么区别?

C++是C语言的超集(我看网上很多文章说这是不对的),这意味着几乎所有的C程序都可以在C++编译器中编译和运行。然而,C++引入了许多新的概念和特性,使得两种语言在一些关键点上有显著的区别。

以下是C和C++的一些主要区别:

面向对象编程:C++支持面向对象编程(OOP),包括类、对象、继承、封装、多态等特性。这使得C++更适合大型软件项目,因为OOP可以提高代码的重用性和可读性。C语言是一种过程性语言,没有这些特性。STL(Standard Template Library):C++提供了STL,这是一套强大的模板类和函数的库,包括列表、向量、队列、栈、关联数组等。这些可以大大提高开发效率。C语言没有内置的数据结构库。异常处理:C++提供了异常处理机制,可以更优雅地处理错误情况。C语言处理错误通常依赖于函数返回值。构造函数和析构函数:C++支持构造函数和析构函数,这些特殊的函数允许对象在创建和销毁时执行特定的代码。C语言没有这个概念。运算符重载:C++允许运算符重载,这意味着开发者可以更改已有运算符的行为,或者为用户自定义类型添加新的运算符。C语言不支持运算符重载。

例如,如果我们要创建一个复数类并对其进行算术运算,C++的面向对象和运算符重载特性就非常有用。我们可以定义一个复数类,然后重载+、-和*运算符以执行复数的加法、减法和乘法。这样,我们就可以像处理内置类型一样处理复数对象。反观C语言,我们需要定义结构体来存储复数,并且需要写一堆函数来处理复数的加法、减法和乘法。

2. C语言的结构体和C++的有什么区别

C语言的结构体和C++的结构体在基本的使用上是相似的,都是用来封装多个不同或相同类型的数据。然而,C++中的结构体继承了C++面向对象的特性,与C语言中的结构体有一些关键性的区别:

成员函数:C++的结构体可以包含成员函数(包括构造函数和析构函数),而C语言的结构体不能。访问控制:C++的结构体支持公有(public)、保护(protected)和私有(private)三种访问控制级别,而C语言的结构体中的所有成员都是公有的。继承:C++的结构体可以从其他结构体或类继承,而C语言的结构体不能继承。

举个例子,假设我们需要创建一个表示日期的结构体,包含年、月、日这三个字段,并且需要一个函数来检查日期是否有效。在C语言中,我们需要定义一个结构体和一个独立的函数:

struct Date { int year; int month; int day; }; // 独立函数 int is_valid_date(struct Date date) { // 验证日期的逻辑 }

在C++中,我们可以将这个函数作为结构体的成员函数:

struct Date { int year; int month; int day; bool is_valid() const { // 验证日期的逻辑 } };

这样,在C++中使用时,我们可以直接调用成员函数 is_valid(),代码更加清晰和易于维护。

Date date; //... if (date.is_valid()) { //... } 3. C 语言的关键字 static 和 C++ 的关键字 static 有什么区别

在C和C++中,static关键字有三个主要的用途,但其在C++中的用法更加丰富:

在函数内部:在C和C++中,static关键字可用于函数内部变量。此时,此变量的生命周期将贯穿整个程序,即使函数执行结束,这个变量也不会被销毁。每次调用这个函数时,它都不会重新初始化。这可以用于实现一些需要保持状态的函数。在函数外部或类内部:在C和C++中,static关键字可以用于全局变量或函数。此时,此变量或函数的作用域被限制在定义它的文件内,无法在其他文件中访问。这可以防止命名冲突或不必要的访问。在类内部:只有C++支持此用法。在C++中,static关键字可以用于类的成员变量或成员函数。对于静态成员变量,无论创建多少个类的实例,都只有一份静态成员变量的副本。静态成员函数则可以直接通过类名调用,而无需创建类的实例。

以下是一个C++中使用static的例子:

class MyClass { public: static int count; // 静态成员变量,所有实例共享一份 MyClass() { count++; // 每次创建实例,计数加1 } static int getCount() { // 静态成员函数,通过类名直接调用 return count; } }; int MyClass::count = 0; // 静态成员变量的初始化 int main() { MyClass a; MyClass b; MyClass c; std::cout count++; // 每次创建实例,计数加1 } static int getCount() { // 静态成员函数,通过类名直接调用 return count; } }; int MyClass::count = 0; // 静态成员变量的初始化 int main() { MyClass a; MyClass b; MyClass c; std::cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有