美文网首页
第二周(Geek Band)

第二周(Geek Band)

作者: 鬼方纾秴 | 来源:发表于2017-02-20 14:27 被阅读0次

对象模型

1、vptr和vtbl(虚函数与虚表)

调用虚函数vfun,通过虚指针vptr找到虚表vtbl,通过虚表指向虚函数位置实现调用。

内存模型 以PPT内绘制图形为例 多态

2、this(this指针)

虚函数的应用场景,template method。

Template Method实现过程 this指代子类对象 动态绑定/多态

3、Dynamic binding(动态绑定)

静态绑定 动态绑定

pa指针,new的是B类型的对象,向上转型为A,调用虚函数vfunc1()-------》动态绑定

call的结果不同

new &delete


// Global里关于new 和delete的定义

inline void* operator new(size_t size ) {
    size_t* p=(size_t*)malloc(size);
    cout<<"Global::operator new().\tsize="<<size<<"\treturn:"<<p<<endl;
    return p;
}
inline void operator delete(void* pdead,size_t size) {
    cout<<"Global::operator delete().\tpdead="<<pdead<<"\tsize="<<size<<endl;
    free(pdead);
}
inline void* operator new[](size_t size ) {
    size_t* p=(size_t*)malloc(size);
    cout<<"Global::operator new[]().\tsize="<<size<<"\treturn:"<<p<<endl;
    return p;
}
inline void operator delete[](void* pdead,size_t size) {
    cout<<"Global::operator delete[]().\tpdead="<<pdead<<"\tsize="<<size<<endl;
    free(pdead);
}

//以上内容有代码,请复制后查看= =

//全局重载影响重大,使用需谨慎
全局重载 new delete 重载解析 new【 】 delete【 】重载解析 接口设计范例 结果显示 强制全局new 与delete 调用结果显示 重载new() delete() 抛出异常示例 抛出异常结果测试。显示有可能调用不到此函数

调用不到此函数的原因:1、异常无法处理,回收内存失败。2、可以通过new 与delete 全局回收,不需要写此函数。(个人猜测)

标准库中basic_string案例

const 补充

成员函数const 位置,表示内容不做修改。

只有成员函数const 才能放在这个位置,表示内容不做修改。一般的全局函数const不能放在这里。

const说明

常量(const)对象只能调用常量(cosnt)函数,调用非常量函数会出错。

非常量对象可调用const 函数,也可调用非常量函数。

设计时,能加const的都加const。

const 属于签名的一部分。

COW模式 常量和非常量同时存在,常对常,非常对非常

相关文章

  • 第二周(Geek Band)

    含有指针的类(经典案例 string) Class with pointer member(s) 拷贝构造 o...

  • 第二周(Geek Band)

    对象模型 1、vptr和vtbl(虚函数与虚表) 调用虚函数vfun,通过虚指针vptr找到虚表vtbl,通过虚表...

  • 第二周(Geek Band)

    ---------------------对象创建-------------------- 通过【对象创建模式】绕...

  • 第三周(Geek Band)

    面向对象的编程(继承、复合、委托) 1、composition(复合),注意画图时黑色菱形 内外部同时出现(同生同...

  • 第三周(Geek Band)

    --------------------对象性能-------------------- 面向对象很好的解决了抽象...

  • Geek band 第三周

    类与类之间的关系 复合关系、委托关系、继承关系。 ​1.复合关系,表示has-a,也就是一个类中包含有另外一个类,...

  • 第一周(Geek Band)

    C++程序设计(兼谈对象模型) 主要课题(since c++ 11): variadic template(可变参...

  • 第一周(Geek Band)

    课程目标 1.理解松耦合设计思想2.掌握面向对象设计原则3.掌握重构技法改善设计4.掌握GOF核心设计模式 设计模...

  • 第一周(Geek Band)

    C++实现数据和函数的封装 C++面向对象(ObjectOriented) 基本格式 Inline内联函数关键字 ...

  • 极客班C++面向对象高级编程(上)第一周笔记

    Geek Band 头文件与类的声明 面向对象的理解: 一个东西将Data(数据)...

网友评论

      本文标题:第二周(Geek Band)

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