43.区分map和set的key_type, value_type等
set
::value_type v1;
set
::key_type v2; //v1,v2都是string map
::value_type v3; //v3是pair
map
::key_type v4; //v4是string map
::mapped_type v5; //v5是int
注意 v3 和 v5 !!!
PS: value_type 对实现 traits编程技法 是很重要的.
44.(1)每个类/结构体只能有一个析构函数,不能重载;
(2)对于要实现多态的基类的析构函数要声明为virtual;
45.(1)释放一块非new/malloc分配的内存,或者将相同的指针值释放(delete/free())多次,将产生未定义行为;
(2)动态对象的生存周期直到被释放为止
(3)区分malloc()/free() 和 new/delete
本质区别:malloc()/free()是库函数,而new/delete是C++运算符;
对于用户定义的对象而言,用malloc/free无法满足动态管理对象的要求:
对象在创建时同时要自动执行构造函数,在消亡时要自动执行析构函数;由于mallco/free不是运算符,不再编译器控制权限之内,不能把构造/析构的任务强制加于它们.
其他:
1.malloc需要手工计算字节数,而new可以自动计算需要分配的内存空间;
2.malloc不安去,而new是安全的;(指在分配时)
3.new operator 由两部分组成: operator new 和 construct
operator new相当于malloc 但是operator new可以重载,可以自定义内存分配策略,甚至不做内存分配,甚至分配到非内存设备上;malloc不能.
PS:C作为C++的一部分,其实也应该熟练掌握,在<<深入理解C指针>>中,讲了很多内存分配的问题,实际上,想成为一名合格的底层程序猿,必须会!
比如:
(4)区分 指针数组 int* arr[5]; //是一个数组,数组的元素都是指向int的指针
和 数组指针int (*p)[5]; //是一个指针,指向int数组
//本质是数组还是指针,看运算符的优先级
(5)函数指针 int (*fun)(int,int);
(6)void* 的妙用等
46.free()/delete只释放指针指向的内存,而指针本身仍存在,(指向了未定义的地方),所以要手动把指针指向NULL.(当然C++提供智能指针)
理解:”指向未定义的地方”,实际上还是指向老地方/原来的地址(你可以自己去实践),只是该地址的内容不确定了...
47.C不支持函数重载,2333
48.struct和class唯一的区别就是默认的访问控制符:struct为public, class为private;
也就是说struct 声明为private,protected也是可以的
49.区分 访问权限 和 继承方式
三种访问权限
public:可以被任意实体访问
protected:只允许子类及本类的成员函数访问
private:只允许本类的成员函数访问
三种继承方式
public 继承,protect 继承,private 继承
组合结果
基类中 继承方式 子类中
public & public继承 => public
public & protected继承 => protected
public & private继承 = > private
protected & public继承 => protected
protected & protected继承 => protected
protected & private继承 = > private
private & public继承 => 子类无权访问
private & protected继承 => 子类无权访问
private & private继承 = > 子类无权访问
由以上组合结果可以看出
1、public继承不改变基类成员的访问权限
2、private继承使得基类所有成员在子类中的访问权限变为private
3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问 权限不变。
4、基类中的private成员不受继承方式的影响,子类永远无权访问。
50.23种设计模式:
(1)5种创建型模式:
1.工厂方法; 2.抽象工厂; 3.单例; 4.建造者; 5.原型;
(2)11种行为模式/关系模式:
1.策略; 2.模板方法; 3.观察者; 4.迭代子模式; 5.责任链; 6.命令; 7.备忘录; 8.状态; 9.访问者; 10.中介者; 11.解释器;
(3)7种结构型模式:
1.适配器; 2.装饰器; 3.代理; 4.外观; 5.桥接; 6.组合; 7.享元;
设计模式
总原则:开闭原则(对扩展开放,对修改关闭)
六大原则:1.单一职责; 2.里氏替换; 3.依赖倒置; 4.接口隔离; 5.迪米特; 6.合成复用.(多使用合成复用,少用继承)
//ps:具体的我自己都没弄清,复杂的软件工程,不怎么用就不会,然而笔试考到了,哎…