美文网首页
Boolan C++面向对象高级编程(下)第二周

Boolan C++面向对象高级编程(下)第二周

作者: MRSUMMER163 | 来源:发表于2017-08-17 22:17 被阅读0次

    第二周

    一、对象模型:关于vptr和vtbl

    虚指针和虚表

    1.虚函数

    类有虚函数,对象里面会多一个指针:虚指针。

    B继承了A,如果A有虚函数,B一定也有虚函数。因为,B继承了A的数据(内存),也继承了A的函数(函数的调用权)。

    重写父类的虚函数时,也要加virtual?

    不加virtual,相当于子类自己的一个新函数(不是虚函数)?

    2.虚表

    虚表,存放函数指针。

    虚表中函数的位置,按照类中函数的顺序。

    3.动态绑定

    C语言调用函数,静态绑定。Call …

    虚函数,不做静态绑定,做动态绑定。

    C++什么时候做动态绑定:

    通过指针调用。

    向上转型。

    第三,调用的是虚函数。

    4.多态

    指针有很多的类型

    二、对象模型:关于this

    侯捷老师总结:虚函数使用一种用在多态,一种用在模板方法。

    C++中所有的成员函数都有一个隐藏的this pointer。

    编译器把myDoc.OnFileOpen()看做CDocument::OnFileOpen(&myDoc)。

    复合动态绑定的三个条件。

    三、对象模型:关于Dynamic Binding

    四、谈谈const

    1.常量成员函数

        basic_string就是标准库中的字符串,string是它的别名,使用reference count设计出来的,可以共享

    函数重载不看return type

    const算函数签名的一部分

    字符串的[]有可能改变字符串的内容,所以非const的[]必须考虑COW:Copy On Write。

    五、关于New和Delete

        参见第一部分。

    new和delete都是表达式,分解进入的是operator new和operator delete。表达式不能重载,opetator可以重载。

    六、重载operator new和operator delete

    1.重载全局operator new/delete

    2.重载member operator new/delete

    3.重载member operator new[]/delete[]

    七、示例

    1.强制调用全局operator new/delete

    ::new

    2.new[]/delete[]

    构造的时候是从上往下,析构的时候是从下往上。

    分配内存的大小是数组的大小加counter的大小。

    八、重载 new()/delete()

    九、Basic_string使用new(extra)扩充申请量

    1.new有多少种

    new表达式

    operator new

    array new

    placement new

    2.标准库中字符串的placement new

    相关文章

      网友评论

          本文标题:Boolan C++面向对象高级编程(下)第二周

          本文链接:https://www.haomeiwen.com/subject/dnznrxtx.html