常见面试题之C++
1. struct与C语言中的struct有何区别在C语言中, struct仅用于定义复杂数据结构,也主是说它只能定义数据,它的成员只能是数据类型,不能直接定义方法函数。在C++中,struct除了C中的用途外,还可以像class一样,可以定义成员方法函数。2. struct与class的区别共同点:它们都可以定义面向对象中的类:定义成员数据和成员方法函数。区别:struct的成员的默认访问属性是public的; 而class的成员默认访问属性是private的。另外,struct仅能用于定义类,不能有其他的功能。而class还可以有继承,多态,虚基类和模板的功能。3. extern "C" { }的作用C++虽然兼容C,但毕竟语言的实现不一样,所以无法直接联合使用C和C++。C是面向过程的语言,它编译出的符号表中的函数只用定义所用的名字来标识。C++是面向对象的,它有很多新特性如函数重载,模板,多态等,所以为了支持这些面向对象特性,C++编译出的符号表除了函数名外还必须要有参数相关的信息(类似于Java中的方法签名),这样才能在运行时找到正确的函数。所以直接在C++中调用C的函数,或者在C中直接调用C++的函数会在链接时报undefined reference之类的错误。为了解决上述问题,就有了宏extern "C",它的作用是告诉编译器用C的方式来编译和处理{}中的代码,这样C++和C就可以相互调用了。通常它用于C++代码里,更确切的说它用于C++的编译器:
#ifdef __cplusplusextern "C"{#endif// C++ codes or C codes goes here#ifdef __cplusplus}#endif