C++面试经典100问

1.C和C++中的struct有什么区别?

在C中没有Protection行为;在C++中有

在C中不可以定义函数,但是可以有函数指针;C++可以定义函数,默认是public

2.C++中的struct和class有什么区别?

从语法上看,class和struct做类型定义的时候有两点区别

a.默认继承权限。如果不明确指定,来自class的继承按照private继承来处理;来自struct的继承按照public继承来处理。

b.成员的默认访问权限。class的成员默认是private权限;struct默认是public权限。除了这两点,class和struct基本就是一个东西。在语法上没有其他什么区别。

3.如何判断一段程序是由C编译程序还是由C++编译程序编译的?

#ifdef_cplusplus
   cout<<"C++";
#else
   printf("C");
#endif

4.C和C++有什么不同?

机制上:C是面向过程的;C++是面向对象的, 提供了类。C++编写面向对象的程序比C容易。

适用上:C适合要求代码体积小的,效率高的场合,比如嵌入式开发方面;

C++适合更上层的,复杂的;

linux核心大部分是C写的,因为它是系统软件,效率要求极高。

侧重上:C语言是结构化编程语言,C++是面向对象编程语言。C++侧重于对象而不是过程,侧重于类的设计而不是逻辑的设计。

5.引用和指针的区别是什么?

指针是通过某个指针变量指向一个对象后,对它所指向的变量间接进行操作。程序中使用指针,程序可读性差;

引用本身是目标变量的别名,对引用的操作就是对目标变量的操作。

6.选择题:考察虚函数

class A  {   
   virtual void func1();   
   void func2();   
} ;  
  
class B: class A {   
   void func1() {  
        cout < < "fun1 in class B" < < endl;  
    }   
    virtual void func2() {  
    cout < < "fun2 in class B" < < endl;  
    }   
}   

A、A中的func1和B中的func2都是虚函数
B、A中的func1和B中的func2都不是虚函数
C、A中的func2是虚函数.,B中的func1不是虚函数
D、A中的func2不是虚函数,B中的func1是虚函数 

7.int id[sizeof(unsigned long)];这个对吗?为什么?

答:正确

sizeof是编译时运算符,在编译时就确定了可以看成和机器相关的常量。

8. 某文件中定义的静态全局变量(或称静态外部变量),其作用域是?

A只限某个函数 

B本文件    

C跨文件  

D不限制作用域

9.C++函数中 值的传递方式有哪几种?

答:按值传递,按地址传递,按引用传递

10.对于一个频繁使用的短小函数,在C语言中应用什么实现,在C++中应用什么实现?

C用宏定义,C++用inline

11.引用和指针的区别

a.引用必须要初始化,指针不用

b.引用初始化以后不能被改变,指针可以改变所指的对象

c.不存在指向空值的引用,但是存在指向空值的指针

12.C++中virtual和inline的含义分别是什么?

在基类成员函数的声明前面加上virtual关键字,就意味着将该成员函数声明为虚函数

inline与函数的定义体放在一起,使得该函数成为内联。inline是一种用于实现的关键字,而不是用于声明的关键字。

虚函数的特点:如果希望派生类能够重新定义基类的方法,则在基类中将该方法定义为虚方法,这样可以启用动态联编。

内联函数的特点:使用内联函数的目的是为了提高函数的运行效率。内联函数体的代码不能过长,因为内联函数省去调用函数的时间是以代码膨胀为代价的。内联函数不能包含循环语句,因为执行循环语句要比调用函数的开销大。

13.VC中,编译工具条内的Debug与Release选项是什么含义?

Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。

Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。

Debug带有大量的调试代码,运行时需要相应的运行库,发布模式程序紧凑不含有调试代码和信息,直接可以运行(如果不需要运行库)。

14.函数assert的用法

断言assert是仅在debug版本起作用的宏,用于检查“不应该”发生的情况

程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

15.const和#define的区别,const的优点?

a. const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。

b. 有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量调试。

你可能感兴趣的:(c++,开发语言)