1.指针和引用的区别?
- 非空区别。指针可以指向空,而引用不可以。
- 合法性区别。引用不需要测试合法性,而指针需要。
- 可修改区别。指针可以被重新赋值指向新的对象,而引用不可以,一直指向初始化指定的对象,但是对象的内容可以改变。
- 应用区别。指针:可能存在不指向任何对象的可能,不同时刻指向不同对象。引用:总是指向一个对象且不会改变指向。
2.传递动态内存
如果一定要用指针参数去申请内存,那么应采用指向指针的指针。
例子:
1.void GetMem(char *p,int num){}
2.char *GetMem(char*p,int num){}
3.函数指针
函数指针: void (*f)()
函数返回指针: void* f()
const 指针:const int *
指向const的指针: int *const
指向const的const指针:const int *const
4.指针和句柄
句柄 和指针是两个截然不同的概念。Windows系统用句柄标记系统资源,用句柄隐藏系统信息。只需要知道有这个东西,然后去调用就可以。指针则标记某个物理内存地址。
5.面向对象的基本概念
对象、类、继承。空类默认产生的类成员函数:默认构造函数、析构函数、拷贝构造函数和赋值函数。
6.类和结构
class中变量默认是private,struct中变量默认是public。
struct可以有构造函数、析构函数,继承等。C++中的struct和class意义是一样的。
c++中存在struct是为了使得c++兼容C。
7.成员变量
静态成员变量可以在一个类的所有实例间共享数据。
常量必须再构造函数初始化列表里面初始化,或者将其设置生static。
8.STL模板与容器
模板:template 泛型类。
容器:可以容纳一些数据的模板类。vector、set、map、multimap、deque。
向量:基本数组模板,是一个容器。
游标:Iterator 是一个指针,指向容器中的元素,也可以指向其他的元素。
9.构造函数和析构函数
构造函数不能为虚函数,创建一个对象,必须要知道对象准确的类型。
不能把每个函数都声明为虚函数,每个虚函数对象都需要维护一个虚函数表,会增加系统开销。
10.多态
一个接口,多种方法。在程序运行时才决定需要调用的函数,多态性是面向对象编程领域的核心概念。
允许将子类类型指针赋值给父类类型的指针。通过虚函数实现。
11.继承与接口
父类中的虚函数会被子类同名函数所覆盖。
12.纯虚函数
包括纯虚函数的类是不能实例化一个对象的。解决办法就是将纯虚函数修改为一般的虚函数。
13.虚指针
虚指针或虚函数指针是一个虚函数的实现细节。带有虚函数的类中的每一个对象都有一个虚指针指向该类的虚函数表。
14.堆和栈的区别
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。