- 1.C和C++的区别
-
-
- 在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”?
- C语言怎么处理返回值
- C++的类中哪些成员会被算入sizeof中
- 2.C/C++较Java有性能优势,为什么?
- 3.C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
-
-
- Static_cast<>,dynamic_cast<>,const_cast<>,reinterpret_cast<>的各自作用和使用环境?
- 4.面向对象的三个特性
-
-
- C++中可以继承string类吗?为什么?
- 封装,继承,多态。
- 纯虚函数
- 面向对象的五个原则:
- 4.1.C++ 虚函数表解析
- 4.2.c++虚函数实现机制及内存模型
- 4.3.虚函数的调用过程?
-
- 静态函数能定义为虚函数吗?为什么?
- 静态函数能定义为常函数吗?为什么?
- 静态数据成员定义(初始化)不应该被放到头文件中
- 静态成员函数不可以调用类的非静态成员。因为静态成员函数不含this指针。
- 4.4.深入理解C++的动态绑定和静态绑定
- 4.5.介绍所有的构造函数,什么情况下要给类写拷贝构造函数
- 5.C++的构造函数不可以为虚函数
- 6.析构函数为什么要使用虚函数
- 7.list、vector和deque的区别
-
-
- STL空间配置器如何处理内存的?能说一下它的大概实现方案吗?为什么是8bytes的倍数?
- 8.C++函数重定义、重载、重写的区别
- 9.C++的 const总结
- 10.常对象的成员变量一定不可以修改吗?为什么?
- 11.C++智能指针
- 12.指针和引用的区别
- 13.hashmap,原理?内存分配怎么分配的?
-
-
- hash_map和map的区别在哪里?
- 什么时候需要用hash_map,什么时候需要用map?
- 14.有了malloc/free为何还要new/delete呢?
- 15.全局变量和static变量的区别
- 16.this指针
- 17.STL sort的实现原理
- 18.如何判断一个单链表是否有环?
- 19.C++单链表和双向链表了解吗,说一下性能的比较
- 20.教你如何迅速秒杀掉:99%的海量数据处理面试题
- 21.哲学家进餐问题
- 22.select,poll,epoll,I/O多路复用是怎么样的?
- 23.平衡二叉排序树,失衡后怎么排序。
- 24.设计模式
- 25.红黑树
- 26.数据库事务的特性
- 27.快排的优化
- 28.HTTP1.0和HTTP1.1的区别
-
-
- Http的报文结构
- Http的状态码含义
- Http request的几种类型
- Http怎么处理长连接
- Cookie与Session的作用与原理
- 29.访问一个网页的过程,计算机发生了什么?
- 30.死锁的原因?条件?如何预防?又如何避免?如何解除?
- 31.volatile是干啥的
- 32.new和malloc的区别
- 33.指针数组和数组指针
- 34.单例模式
- 35.Socket编程
- 36.C语言如何得到一个结构体内成员的偏移量?
- 37.指针函数和函数指针和的区别
- 38.单例模式
- 39.重载运算符
- 40.内存池
- 41.线程池
- 42.僵尸进程、孤儿进程
- 43.同步、异步、阻塞、非阻塞
- 44.查内存泄露
- 45.malloc(0)会返回什么
- 46.各种排序算法的时间复杂度空间复杂度,还有稳定性
- 47.GDB 调试
- 48.互斥锁和读写锁的区别
1.C和C++的区别
http://blog.csdn.net/zqixiao_09/article/details/51235444
区别:
C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或者函数从输入得到输出;
C++是面向对象,基于类、对象和继承,所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。
面向过程
优点:性能比面向对象高,因为类调用需要实例化,开销比较大,比较消耗资源,比如嵌入式开发,单片机开发等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象
优点:易维护、易扩展、易复用,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,是系统更加灵活、更加易于维护。
缺点:性能比面向过程低。
在C++ 程序中调用被 C编译器编译后的函数,为什么要加 extern “C”?
答:C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为: void foo(int x, int y);
该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
C语言怎么处理返回值
返回值会被保存在cpu的寄存器中,因此,在返回子函数后,返回值能从寄存器中将返回值赋值给调用函数中的变量。
https://blog.csdn.net/HKaisa/article/details/51785481
C++的类中哪些成员会被算入sizeof中
1.非静态数据成员
2.还有要维护虚函数表的指针,占4字节。
解释:使用sizeof()计算类大小的一些基本原则:
- 类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑;
- 类的总大小也遵守类似class字节对齐的,调整规则;
- 成员函数都是不会被计算的;
- 如果是子类,那么父类中的成员也会被计算;
- 虚函数由于要维护虚函数表,所以要占据一个指针大小,也就是4字节。
总结:一个类中,虚函数、成员函数(包括静态与非静态)和静态数据成员都不占用类对象的存储空间。
2.C/C++较Java有性能优势,为什么?
https://zhidao.baidu.com/question/559368057.html
3.C++语言特性:构造函数,析构函数,虚函数,内联函数,静态成员函数,重载,覆盖,隐藏
http://blog.csdn.net/iamcxl369/article/details/7773010
Static_cast<>,dynamic_cast<>,const_cast<>,reinterpret_cast<>的各自作用和使用环境?
Static_cast:能完成大部分转换功能,但是并不确保安全
Const_cast:无法从根本上转变类型,如果是const,它就依旧是const,只是如果原对象不是const,可以通过此转换来处理,针对指针和引用而言。
Dynamic_cast:针对基类和派生类指针和引用转换,基类和派生类之间必须要继承关系,是安全的。
Reinterpret_cast:允许将任何指针类型转为其他指针类型,是安全的。
C风格转换是“万能的转换”,但需要程序员把握转换的安全性,编译器无能为力;
static_cast最接近于C风格转换,但在无关类指针转换时,编译器会报错,提升了安全性;
dynamic_cast要求转换类型必须是指针或引用,且在下行转换时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针,dynamic_cast总是认为void*之间的转换是安全的;
reinterpret_cast可以对无关类指针进行转换,甚至可以直接将整型值转成指针,这种转换是底层的,有较强的平台依赖性,可移植性差;
const_cast可以将常量转成非常量,但不会破坏原常量的const属性,只是返回一个去掉const的变量
http://blog.csdn.net/chenlycly/article/details/38713981
4.面向对象的三个特性
http://blog.csdn.net/uestclr/article/details/51553978
C++中可以继承string类吗?为什么?
不可以,因为string不是类
封装,继承,多态。
封装
- 该公开的就公开,该私有的就隐藏掉,主要是由Public,private实现;作用是便于分工和分模块,防止不必要的扩展。
继承
多态
- 多态:一个父类型的对象的指针或者引用指向或者是引用一个子类对象时,调用父类型中的虚函数,如果子类覆盖掉了虚函数,则调用的是子类覆盖之后的。
- 继承是构成多态的基础;
- 虚函数是构成多态的关键;
- 函数覆盖是构成多态的必备条件;
- 多态的应用:函数参数,函数返回值。
纯虚函数
纯虚函数的作用:在基类中为其派生类保留一个函数的名字,以便派生类根据需要对它进行定义。作为接口而存在 纯虚函数不具备函数的功能,一般不能直接被调用。
从基类继承来的纯虚函数,在派生类中仍是虚函数。如果一个类中至少有一个纯虚函数,那么这个类被称为抽象类(abstract class)。
抽象类中不仅包括纯虚函数