美文网首页
(Boolan) 面向对象高级编程(下)第五周笔记

(Boolan) 面向对象高级编程(下)第五周笔记

作者: 留胡子的熊 | 来源:发表于2017-08-16 19:08 被阅读0次

    对象模型

    vptr虚函数指针

    若类对象中含有虚函数,则在对象模型中会存在一根虚函数指针

    vtbl虚函数表

    虚函数指针指向一块内存,称为虚表

    虚表的内容是一段地址,指向该类对象在实现多态过程中虚函数实际绑定的函数

    this

    模板方法

    通过this指针调用虚函数指针指向虚表中实际对应的虚函数

    动态绑定

    动态绑定的实现需要满足三个条件

    1.使用指针调用

    2.存在向上转型

    3.调用的是虚函数

    const漫谈

    const对象可以调用const成员函数

    const对象不可以调用non-const成员函数

    non-const对象可以调用const成员函数

    non-const对象可以调用non-const成员函数

    const String str("hello world");
    
    str.print();
    

    如果当初设计String::print()时未指明const,那么上行便是经由const对象调用non-const成员函数,会出错,绝非我们想要看到的结果。

    当成员函数的const和non-const版本同时存在时:

    const对象只会调用const版本

    non-const对象只会调用non-const版本

    new和delete

    全局的new/delete

    如果重载全局

    ::operator new(), ::operator new[]new()
    ::operator delete(), ::operator delete[]()
    

    将影响整个项目

    对于已经有重载作为类成员的new/delete

    使用::new ::new[] ... 即可强制使用全局版本的函数

    作为类成员的new/delete

    对于类成员 如果没有定义成员new/delete

    则会调用全局的new/delete

    对于已经定义了成员new/delete的类

    可以使用::前缀强制调用全局new/delete

    placement new()

    basic_string使用的new(extra)扩充申请量

    template<class chatT, class traits, class Allocator>
    inline void* basic_string<charT, traits, Allocator>::Rep::operator new(size_t s, size_t extra)
    {
            return Allocator::allocate(s + extra * sizeof(charT));
    }
    

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:(Boolan) 面向对象高级编程(下)第五周笔记

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