一个空类test 都会默认调用哪些函数?
构造函数 (创建对象的时候)
test(){
}
析构函数 (销毁对象的时候)
~test(){
}
拷贝构造函数 (用一个已经初始化的对象,去初始化一个新对象时)
test(const test &){
}
拷贝赋值函数 (俩个都已经初始化的对象,用一个对象给另一个对象复制的时候)
test &operation(const test &){
}
类和结构体区别:
类的默认访问权限是private
结构体的默认访问权限是public
THIS 指针是一个函数的隐形形参,哪个类对象调用成员函数,这个THIS指针就指向谁;
构造函数:实例化对象的时候,给对象申请资源,如分配内存,打开文件等,完成对成员函数的初始化。实例化对象的时候,自动调用构造函数。
构造函数与类同名,没有返回值,默认权限是public,
析构函数:对象消亡的时候,用来释放空间的,
~类名(void){
} 没有参数,所以不支持重载;
拷贝构造:
类名 (const 类名 &){
}
深拷贝和浅拷贝的区别:
浅拷贝是对原始对象属性值的一份精确拷贝,属性如果是基本类型,拷贝的就是基本类型的值,如果是引用就是拷贝的地址。
深拷贝就是从内存中完整的拷贝一个出来,在堆区开辟一个新的空间存放。
浅拷贝属性如果是引用,改变数据对原来的数据有影响,深拷贝改变现在或者原来的数据,对另一方都没有影响;
友元函数:可以访问朋友类中的私有成员
友元类:声明B是A的友元类,那么B中所有成员都可以访问A中的成员
静态成员函数:没有THIS指针,属于整个类,不属于某一个对象,静态成员函数只能访问静态成员变量
单例模式:类的实例化对象只能有一个。
如windows中的回收站,任务管理器只能打开一个。
面向对象的三大特征:(封装,继承,多态)
继承为了多态做准备的,解决了代码复用
B继承了A:
称A为父类 基类
B为子类 派生类
class B: public A{
}
子类不会继承父类的构造函数和析构函数, 构造函数和析构函数的调用顺序:
构造函数先调用父类在调用子类
析构函数先调用子类在调用父类
多态是泛型编程:
使用不变的代码实现可变的而算法
函数重写: 在子类中重写父类函数,要求返回值,函数名,形参列表,必须相同,只是函数体不同.
函数重写和函数重载的区别:
函数重载要求形参列表不同,而函数重写要求形参列表必须相同,而且函数重写必须发生在子类和父类中;
多态:
通过父类的指针或者引用,能够访问子类中重写父类的虚函数
多态的必要条件:
继承
虚函数
子类重写父类的虚函数
父类指针或引用指向子类对象
模板函数:
template
T add(T a, T b){
return a>b?a:b;
}
模板类和模板函数实现的机制?
二次编译机制
STL: 标准模板库
vector:
list容器(本质是一个双向带头的链表):
map(联合容器,本质是一个红黑树):



