C++面试知识

C++面试知识点汇总 本博文是本文历时3个月,收集各种资料,汇总的C++面试题,欢迎各位博友评价。 阅读详情
一、#include “filename.h”和#include <filename.h>的区别
#include “filename.h”是指编译器将从当前工作目录上开始查找此文件
#include <filename.h>是指编译器将从标准库目录中开始查找此文件
二、头文件的作用
    加强安全检测
    通过头文件可能方便地调用库功能,而不必关心其实现方式
三、* , &修饰符的位置
对于*和&修饰符,为了避免误解,最好将修饰符紧靠变量名
四、if语句
不要将布尔变量与任何值进行比较,那会很容易出错的。
整形变量必须要有类型相同的值进行比较
浮点变量最好少比点,就算要比也要有值进行限制
指针变量要和NULL进行比较,不要和布尔型和整形比较
五、const和#define的比较
const有数据类型,#define没有数据类型
个别编译器中const可以进行调试,#define不可以进行调试
在类中定义常量有两种方式
1、  在类在声明常量,但不赋值,在构造函数初始化表中进行赋值;
2、  用枚举代替const常量。
六、C++函数中值的传递方式
有三种方式:值传递(Pass by value)、指针传递(Pass by pointer)、引用传递(Pass
by reference)
void fun(char  c)  //pass by value
void fun(char  *str)  //pass by pointer
void fun(char &str)  //pass by reference
如果输入参数是以值传递的话,最好使用引用传递代替,因为引用传递省去了临时对象
的构造和析构
函数的类型不能省略,就算没有也要加个void
七、函数体中的指针或引用常量不能被返回
Char *func(void)
{
char str[]=”Hello Word”;
//这个是不能被返回的,因为str是个指定变量,不是一般的值,函数结束后会被注销掉

return str;
}
函数体内的指针变量并不会随着函数的消亡而自动释放
八、一个内存拷贝函数的实现体
void  *memcpy(void *pvTo,const void *pvFrom,size_t size)
{
assert((pvTo!=NULL)&&(pvFrom!=NULL));
byte *pbTo=(byte*)pvTo;    //防止地址被改变
byte *pbFrom=(byte*)pvFrom;
while (size-- >0)
  pbTo++ = pbForm++;
return pvTo;
}
九、内存的分配方式
分配方式有三种,请记住,说不定那天去面试的时候就会有人问你这问题
1、  静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变
量、常量。
2、  栈上分配,函数内的局部变量就是从这分配的,但分配的内存容易有限。
3、  堆上分配,也称动态分配,如我们用new,malloc分配内存,用delete,free来释放
的内存。
十、内存分配的注意事项
用new或malloc分配内存时,必须要对此指针赋初值。
用delete 或free释放内存后,必须要将指针指向NULL
       不能修改指向常量的指针数据
十一、内容复制与比较
//数组……
char a[]=”Hello Word!”;
char b[10];
strcpy(b,a);
if (strcmp(a,b)==0)
{}
//指针……
char a[]=”Hello Word!”;
char *p;
p=new char[strlen(a)+1];
strcpy(p,a);
if (strcmp(p,a)==0)
{}
十二、sizeof的问题
记住一点,C++无法知道指针所指对象的大小,指针的大小永远为4字节
char a[]=”Hello World!”
char *p=a;
count<<sizeof(a)<<end;    //12字节
count<<sizeof(p)<<endl;   //4字节
而且,在函数中,数组参数退化为指针,所以下面的内容永远输出为4
void fun(char  a[1000])
{
count<<sizeof(a)<<endl;  //输出4而不是1000
}
十三、关于指针
1、  指针创建时必须被初始化
2、  指针在free 或delete后必须置为NULL
3、  指针的长度都为4字节
4、释放内存时,如果是数组指针,必须要释放掉所有的内存,如
char *p=new char[100];
strcpy(p,”Hello World”);
delete []p;   //注意前面的[]号
p=NULL;
5、数组指针的内容不能超过数组指针的最大容易。
如:
char *p=new char[5];
strcpy(p,”Hello World”);  //报错  目标容易不够大
delete []p;   //注意前面的[]号
p=NULL;
十四、关于malloc/free 和new /delete
l         malloc/free 是C/C+的内存分配符,new /delete是C++的内存分配符。
l         注意:malloc/free是库函数,new/delete是运算符
l         malloc/free不能执行构造函数与析构函数,而new/delete可以
l         new/delete不能在C上运行,所以malloc/free不能被淘汰
l         两者都必须要成对使用
l         C++中可以使用_set_new_hander函数来定义内存分配异常的处理
十五、C++的特性
C++新增加有重载(overload),内联(inline),Const,Virtual四种机制
重载和内联:即可用于全局函数,也可用于类的成员函数;
Const和Virtual:只可用于类的成员函数;
重载:在同一类中,函数名相同的函数。由不同的参数决定调用那个函数。函数可要不
可要Virtual关键字。和全局函数同名的函数不叫重载。如果在类中调用同名的全局函数
,必须用全局引用符号::引用。
覆盖是指派生类函数覆盖基类函数
函数名相同;
参数相同;
基类函数必须有Virtual关键字;
不同的范围(派生类和基类)。
隐藏是指派生类屏蔽了基类的同名函数相同
1、  函数名相同,但参数不同,此时不论基类有无Virtual关键字,基类函数将被隐藏
。
2、  函数名相同,参数也相同,但基类无Virtual关键字(有就是覆盖),基类函数将被
隐藏。
内联:inline关键字必须与定义体放在一起,而不是单单放在声明中。
Const:const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制
保护,可以预防意外的变动,能提高程序的健壮性。
1、  参数做输入用的指针型参数,加上const可防止被意外改动。
2、  按值引用的用户类型做输入参数时,最好将按值传递的改为引用传递,并加上con
st关键字,目的是为了提高效率。数据类型为内部类型的就没必要做这件事情;如:
将void Func(A a) 改为void Func(const A &a)。
而void func(int a)就没必要改成void func(const int &a);
3、  给返回值为指针类型的函数加上const,会使函数返回值不能被修改,赋给的变量
也只能是const型变量。如:函数const char*GetString(void); char *str=GetString
()将会出错。而const char *str=GetString()将是正确的。
4、  Const成员函数是指此函数体内只能调用Const成员变量,提高程序的键壮性。如声
明函数 int GetCount(void) const;此函数体内就只能调用Const成员变量。
Virtual:虚函数:派生类可以覆盖掉的函数,纯虚函数:只是个空函数,没有函数实现
体;
十六、extern“C”有什么作用?
Extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C
函数。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能
直接调用C函数,加上extren “c”后,C++就能直接调用C函数了。
Extern “C”主要使用正规DLL函数的引用和导出 和 在C++包含C函数或C头文件时使用
。使用时在前面加上extern “c” 关键字即可。
十七、构造函数与析构函数
派生类的构造函数应在初始化表里调用基类的构造函数;
派生类和基类的析构函数应加Virtual关键字。
不要小看构造函数和析构函数,其实编起来还是不容易。
#include <iostream.h>
class Base
{
  public:
    virtual ~Base() { cout<< "~Base" << endl ; }
};
class Derived : public Base
{
  public:
    virtual ~Derived() { cout<< "~Derived" << endl ; }
};
void main(void)
{
    Base * pB = new Derived;  // upcast
    delete pB;
}
输出结果为:
       ~Derived
       ~Base
如果析构函数不为虚,那么输出结果为
       ~Base
十八、#IFNDEF/#DEFINE/#ENDIF有什么作用
仿止该头文件被重复引用
对该文的评论 人气:865
      benlistian (2003-3-18 10:36:35)
有一本电子书叫《高质量c++编程指南》已经包含以上,更为详细。用google搜搜去当
就行,没必要。。。
      lzh18291 (2003-3-7 20:37:45)
To kind_li: 第13条,为什么指针删除后还可以赋值呢?有必要吗
      season11 (2003-3-5 12:01:59)
好东西~~!~!谢谢~!!!
我要评论
 
  virtual ~Derived() { cout<< "~Derived" << endl ; } };
void main(void)
{
    Base * pB = new Derived;  // upcast
    delete pB;
}
输出结果为:
       ~Derived
       ~Base
如果析构函数不为虚,那么输出结果为
       ~Base
十八、#IFNDEF/#DEFINE/#ENDIF有什么作用
C++面试常考知识点汇总 C++知识点汇总 1.面向对象 C++是面向对象的编程语言。面向对象的程序设计开发时间短,效率高, 可靠性高。面向对象编程的编码具有高可重用性,可以在应用程序中大量采用成熟的类库(如STL),从而虽短了开发时间,软件易于维护和升级。 面向对象的基本概念:类、对象和继承。所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。 面向对象的基本... 阅读详情

相关推荐

C++面试基础知识汇总

C++面试基础知识汇总 本篇文章用于C++面试基础知识复习,不断更新。自用。 1.new/delete/malloc/free关系 new/delete属于C++语言中的运算符,malloc/free属于C语言中的标准库函数; 它们都可用于申请动态内存和释放内存; 对于非内部数据类型的对象而言,malloc/free无法满足动态对象的要求,对象消亡时,delete可以执行对象的析构函数,malloc只会释放内存。 2.delete与delete[]的区别 delete只会调用一次析构函数,而delete[]

weixin_44190603的博客 1418

char p[]=“hello world“;和char *p=“hello world“的区别

char p[]="hello world";和char *p="hello world"的区别;前者存放在栈里,后者存放在静态区//首先 假设printf(s)等同于printf("%s",s),否则编译出错 char* getMem(void) { charp[] = “hello world ”; p[5] = 0x0; returnp;}p是...

Helloo_jerry的博客 3593

打通Creo与Matlab的桥梁:Simscape Multibody Link插件安装与配置全攻略

本文详细介绍了Simscape Multibody Link插件的安装与配置全流程,旨在帮助机械工程师和开发者打通Creo与Matlab/Simulink之间的桥梁,实现CAD模型到多体动力学仿真的高效转换。文章重点解析了版本兼容性、管理员权限、注册文件配置等关键步骤与常见故障排查方法,助力用户快速建立设计与仿真一体化工作流。

rrr55的博客 634

char *p="hello world"有什么问题

如果以char *p="Hello world"的方式使用,p指向的是静态字符串存储的位置. 另外要小心,p现在指向静态存储区,p未重新赋值前,任何对p指向内容的修改都会引发运行时错误。当定义: volatile char* aaa = "hello"; volatile char* bbb = "hello";aaa == bbb

cc猫 1087

计量经济学(因果关系探究-空间双重差分模型: 破解空间溢出效应的因果分析工具)

本文介绍了传统双重差分(DID)模型及其局限性,重点阐述了空间DID模型的必要性。传统DID通过组间差分分离干预效应,但无法处理空间溢出效应。空间DID模型引入空间计量方法,包括三种类型:空间自回归模型(SDID-SAR)捕捉因变量溢出,空间误差模型(SDID-SEM)处理残差相关性,空间杜宾模型(SDID-SDM)同时考虑因变量和自变量的空间滞后。模型选择需结合空间相关性检验,适用于环境政策、房地产限购等存在空间交互效应的研究场景。

YBAdvanceFu的博客 2031

保姆级教程:用Multisim仿真快速上手二极管、MOSFET和IGBT的开关特性

本文提供了一份详细的Multisim仿真教程,帮助读者快速掌握二极管、MOSFET和IGBT的开关特性。通过搭建实验电路、观察波形特征和参数影响分析,深入解析了反向恢复过程、米勒平台现象和拖尾电流效应。适合电力电子初学者和工程师通过仿真建立直观理解,提升电路设计能力。

weixin_29290863的博客 498

【C语言】#include <filename.h> 和 #include “filename.h“有什么区别?

#include 和 #include "filename.h"有什么区别?

fufufu_的博客 1305

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 531

#include<filename.h> 和 #include"filename.h"有什么区别

对于#include,编译器先从标准库路径开始搜索filename.h,使得系统文件调用比较快; 对于#include"filename.h",编译器先从用户的工作路径开始搜索filename.h,后去寻找系统路径,使得自定义文件较快。所以在写代码的过程中要根据实际情况选择是 引申:头文件的作用有哪些?头文件的作用主要表现为以下两个方面:(1) **通过头文件来调用库功能**。出于对

记录点滴的专栏 1万+

【人工智能】人工智能基础概念、流派、发展史

人工智能初衷就是让计算机能够像人类一样具有自我思考、自我学习、自我决策的能力。依据百度百科上对人工智能定义:人工智能是研究、开发用于模拟、扩展和延伸人的智能的理论、方法、技术及应用系统的一门新的技术学科。人工智能是研究使计算机来模拟人的某些思维过程和智能行为的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。

WEL测试 1882

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

头文件——#include <filename.h>与#include "filename.h"区别

#include ,编译系统会到环境指定的目录去引用。#include "filename.h",系统一般首先在当前目录查找,然后再去环境指定目录查找。

u011392772的专栏 1352

C++大牛的博客

1. C++大牛的博客     Bjarne Stroustrup的博客: Bjarne Stroustrup’s Homepage Bjarne Stroustrup,不认识的可以去面壁了,没有他,就没有我们现在的饭碗。Bjarne Stroustrup是丹麦人,目前任教于TAMU。他的Homepage和他的书籍The C++ Programming Language一样

程序猿老樊的博客 6244

C/C++面试笔试知识点总结

C/C++面试问题 1 const关键字的作用? 1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了; 2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const; 3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值; 4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量; 5)对于类的成员函数,有时候必须指定其返回值为

weixin_42538789的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【面试知识整理】CPP——C++ 11的新特性

【面试知识整理】CPP——C++ 11的新特性作者yanhealth发表于2017-02-12原创文章,转载请注明: 转载自:严健康的个人博客 http://www.yanjiankang.cn/本文链接地址: http://www.yanjiankang.cn/cpp_11_new_feature/Lambda 表达式Lambda 表达式就是用于创建匿名函数的。为什么说 lambda 表达式如此...

caogenwangbaoqiang的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【C++】面试常用知识点总结——基础篇

三次握手的最主要目的是确认双方都有收发数据的能力。三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。第一次: A发给B。证明A有发消息的能力。第二次: B收到并发消息给A。证明B有收消息,并且有发消息的能力。第三次: A收到B消息。证明A有收消息的能力。二次握手达不到目的,四次多余。双方关闭连接要经过双方都同意。

沙师弟专栏 5万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C++面试基础知识整理_c++面试知识点总结

const类成员:(1)const static int 可以使static数据成员在类定义体内初始化;(2)可以通过将数据成员声明为mutable来实现对该类const对象的该数据成员的更改;(3)初始化const数据成员的唯一机会是在构造函数的初始化列表中,直接在类的定义体中以及在构造函数的定义体中初始化都是不正确的。(4)构造函数不能声明为conststatic类成员:每个static对象是与类关联的对象,并不与该类的对象相关联。不同的类对象中共享static数据成员。

2401_89722460的博客 2081

C/C++面试知识点总结

C/C++面试知识点总结1.关键字(1)C语言中的#和##(2)关键词volatile的使用场景(3)关键词static的作用(4)extern作用(5)const的作用(6)什么时候使用const(7)new/delete和malloc/free的区别(8)左值和右值的概念(9)短路求值2.内存(1)堆和栈的区别(2) 1.关键字 (1)C语言中的#和## #可以将宏定义中的传入参数名转换为双引号括起来的参数名字符串,必须置于宏定义的参数名前 ##是将宏定义的多个形参转换成一个实际的参数名 #define

BelanLu的博客 1438

C++面试常问知识点总结

C++面试常问知识点总结 【下载地址】C面试常问知识点总结分享 本资源文件名为“C++面试常问知识点总结”,旨在为准备C++面试的开发者提供一个全面的知识点总结。内容涵盖了C++的基础知识、内存管理、面向对象编程、STL(标准模板库)、新特性、操作系统、计算机网络、数据库以及设计模式等多个方面 ...

gitblog_06669的博客 562

C++面试基础知识点

1. 使用allocate向内存池请求size大小的内存空间, 如果需要请求的内存大小大于128bytes, 直接使用malloc. 2. 如果需要的内存大小小于128bytes, allocate根据size找到最适合的自由链表.   a. 如果链表不为空, 返回第一个node, 链表头改为第二个node.   b. 如果链表为空, 使用blockAlloc请求分配node.     x. 如果内存池中有大于一个node的空间, 分配竟可能多的node(但是最多20个), 将一个node返回, 其

qq_26553669的博客 2470

C++开发面试知识点汇总

C++开发面试知识点汇总 去发现同类优质开源项目:https://gitcode.com/ 此文档整理了C++开发者在面试过程中可能会遇到的关键知识点,内容涵盖了C、C++、C++11及C++14的相关概念。以下是知识点的简要概述,以供学习和参考。 知识点内容 volatile关键字:理解volatile关键字在多线程环境中的作用及其与普通变量的区别。 sizeof & strlen:掌...

gitblog_06774的博客 462

C/C++面试常考知识点

C/C++基础部分 C++和C的区别 设计思想上: C++是面向对象的语言,而C是面向过程的结构化编程语言。 语法上: C++具有封装、继承和多态三种特性; C++相比C,增加多许多类型安全的功能,比如强制类型转换、 C++支持范式编程,比如模板类、函数模板等。 C++中static关键字的作用 全局静态变量 在全局变量前加上关键字static,全局变量就定义成一个全局静态变量。 静态存储区,在整个程序运行期间一直存在。 初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显

Ternence_zq的博客 7160

C++面试核心知识点全面解析:从基础到高级

这篇C++面试指南总结了核心知识点:1. 基础语法重点解析const/static关键字用法;2. 面向对象编程涵盖构造函数、虚函数与多态;3. 内存管理对比堆栈差异,介绍智能指针;4. 模板编程讲解函数/类模板及特化;5. STL组件分析常用容器和算法;6. 现代C++特性包括移动语义和Lambda;7. 面试题精析虚函数表和智能指针循环引用;8. 介绍C++20的Concepts和Ranges新特性。文章强调基础优先、理解原理、实践验证的学习方法,推荐经典书籍和练习资源,帮助开发者系统掌握C++核心技术

Jay_515的博客 970

C++ 常见面试知识点

对于局部常量,存放在栈区;对于全局常量,编译期⼀般不分配内存,放在符号表中以提⾼访问效率;字⾯值常量,⽐如字符串,放在常量区。

qq_42974718的博客 697
上一篇: http://job.youkuaiyun.com/n/20051208/30627.html
下一篇: face test 2
5ak
5ak
博客等级 码龄25年 6粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值