(Boolan) 面向对象高级编程(下)第五周笔记
2017-08-16 本文已影响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));
}
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。