秋招C++开发学习之路day26

day31

  1. const关键字
    修饰普通变量,表示该变量不能被再一次赋值。
    修饰指针 有两个情况:一是在最前面表示指针所指的值不能变,二是在指针前面则表示指针本身不能被修改。
    修饰成员函数时:是为了防止成员函数修改被调用对象的值。const的成员函数不能调用非const函数,因为非const成员函数可以修改成员变量的值

  2. 地址栏输入url到页面呈现整个过程(url就是俗称网址)
    地址栏输入url:
    首先通过dns解析出IP地址,返回相应的IP地址。
    建立tcp连接,三次握手
    发送http请求
    服务器处理并返回http报文
    浏览器渲染页面展示给用户
    最后断开连接。

day31

  1. C++类的默认生成成员
    构造函数、析构函数、拷贝构造函数、赋值运算符、取地址符

拷贝构造函数:是一种特殊的构造函数,他在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。
通常用于:
通过使用另一个同类型的对象来初始化新创建的对象。
复制对象把它作为参数传递给函数。
复制对象,并从函数返回这个对象。
class Line{
public:
int get(void);
Line(int len);//构造函数
Line(const Line &obj);//拷贝构造函数
~Line();//析构函数
}
2. 类的大小,有关的:普通成员变量,虚函数,继承
计算结构体大小的规则:
1.每一个成员的偏移量都必须是该成员的倍数。
2.结构体的大小必须是该结构体字节数最大成员的倍数。

空类大小为1,因为空类还是可以实例化。
继承空类时,不算空类的1,大小按新对象成员计算。

含有虚函数的类,一定含有虚函数表指针(8字节(64位))。内存布局一定位于内存模型最前端。.再加上成员变量的字节。

含有虚函数,被继承时,虚函数被重写。内存模型的虚函数表指针被替换。再加上基类成员变量的大小,再加上本类的成员大小。(如果还有自己的虚函数,则直接添加在最后声明的虚函数表项之后)。

虚拟继承:解决菱形继承问题
vs环境下,继承类有虚函数的话,会有自己的虚函数表指针。
3. 静态链接和动态链接
静态链接是在形成可执行程序之前,而动态链接的进行则是在程序执行时。

静态链接:譬如让书本和白板上的笔记之间做静态链接,就是把白板上的笔记抄在书上书和笔记形成一个整体(可执行程序),这个时候把白板上的内容擦掉也没关系,因为已经整合到书上了。静态链接的优点是“效率高”因为都在一个地方,你看书就很方便快捷。缺点是可执行程序偏大,需要更多的系统资源

动态链接:如果只是在书上注释“这章节的笔记在L2-122的白板上”,并没有把笔记抄在书上,书和白板上的笔记是互相独立的,当看书看到这里需要笔记的时候才通过这个注释跑去L2-122教室看白板,这个就叫动态链接。动态链接的方式白板上的内容是不许擦掉的,不然下次找不到。优点就是不占用书本空间,缺点是“效率相对低些”。

  1. 随机数rand()和srand()
    rand产生的是伪随机数,每次执行时是相同的,需要用srand来初始化。
    srand((unsigned)time(0));
    然后就可以用rand来生成 随机数了。
    x=rand%(b-1)+a,产生a,b区间的的随机数。[a,b);

  2. map为什么要用红黑树
    红黑树的查询性能略微逊色于AVL树,因为他比avl树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的avl树最多多一次比较,但是,红黑树在插入和删除上完爆avl树,avl树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于avl树为了维持平衡的开销要小得多

所以简单说,如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。

红黑树插入最多旋转两次,删除最多旋转三次。

  1. dynamic_cast关键字
    用于动态类型转换。只能用于含有虚函数的类,用于类层次间的向上和向下转化。只能转指针或引用。向下转化时,如果是非法的对于指针返回NULL,对于引用抛异常。要深入了解内部转换的原理。
    作用:将一个基类对象指针(或引用)cast到继承类指针,会根据基类指针是否真正指向继承类指针来相应处理。
    对指针进行dynamic_cast,失败返回NULL,成功返回正常cast后的对象指针。
    对引用,失败抛出异常,成功返回正常cast后的对象引用。
    在将父类cast到子类时,父类必要要有虚函数。
  2. const_cast
    去掉复合类型中const属性,其余保持不变。
  3. 后缀表达式

首先按照运算的先后顺序将表达式全部都添加上括号
(a+b)c(d-e/f)—>> (((a+b)c)((d-(e/f))))
然后由于是后缀表达式,从里到外将所有运算符都拿到右括号的右边
(((ab)+c)((d(ef)/)-))
最后再将所有括号都去掉就可以啦
ab+cdef/-
9. 满二叉树
节点数:2^k-1 k是高度
10. 构造函数不能是虚函数
虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值