1、C++中 struct和class的区别是什么
struct的成员的默认属性是公开的,class的成员的默认属性是私有的
2、C++程序中调用被C编译器编译后的函数,为什么包含extern “C”?
extern是C/C++中的关键字其声明的函数和变量可以在本模块或者其他模块中使用
其次C++作为一种面向对象的语言支持函数重载,而C语言并不支持。比如foo(int i)
C++会生成_fooi这样的函数,也记录了函数名也记录了函数参数数量以及类型信息,而C会生成_foo这样的信息
extern"C"这个声明的真实目的就是解决了名字匹配问题,实现了C/C++的混合编程
3、指针与引用的相同点和不同点
相同点:
- 通过传参共享变量
- 优化传参效率
- 堆内存通过指针/引用与标识符建立联系
不同点
- 指针是一个实体,引用是取别名
- 指针可以不初始化,引用必须初始化
- 程序需要为指针变量分配内存,不必为引用分配内存
4、new/delete和malloc/free有什么区别?new[]/delete[]和new/delete的区别
new/delete ---------- malloc/free ----------- new[]/delete[]
标识符 ----------- 标准库函数---------------创建/销毁多个对象 不可与delete/new混用
自动调用构造/析构函数----不调用构造/析构
自动计算字节数-----需要手动计算字节数
返回带地址类型-----返回void*地址
出错抛出异常----------返回NULL
5、重载、隐藏、覆盖的区别和执行方式
重载:
- 同一个作用域下
- 函数名字相同
- 参数列表不同
覆盖:
- 分别位于派生类与基类
- 函数签名必须完全相同
- 返回值必须是同类或父子类
隐藏:
- 子类隐藏父类的标识符(不一定是函数)
- 父类有同名标识符,如不构成覆盖且通过编译,则构成隐藏
面向对象的三个基本特征
封装:把抽象的结构归结成一个类,并实例化设置对象的属性调用对象的功能达到解决问题的目的
继承:解决问题前看一下有没有类似的类可以解决问题,如果可以则继承旧的类并拓展
多态:对象的多种形态,向对象发布指令,形象对不同的指令有不同的反应