C++ Primer Plus第6版18个重点笔记(三)

2015-01-27 06:01:15 · 作者: · 浏览: 61
以重新定义虚函数,但包含类不能。使用私有继承,重新定义的函数将只能在类中使用,而不是公有的。
?
关于保护继承
保护继承是私有继承的变体,保护继承在列出基类时使用关键字protected;
?
class Student : protected std::string,
? ? ? ? ? ? ?protected std::valarray
{
...
}
使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员,和私有继承一样,基类的接口在派生类中也是可用的,但在继承层次结构之外是不可用的。当从派生类派生出另一个类的时,私有继承和保护继承
?
之间的主要区别便呈现出来了。使用私有继承时,第三代将不能使用基类的接口,这是因为基类的共有方法在派生类中将变成私有方法;使用保护继承时,基类的公有方法在第二代中将编程呢个受保护的,因此第三代派生类可以使用它们。
?
下表总结了公有、私有和保护继承。隐式向上转换意味着无需进行显式类型转换,就可以将基类指针或引用指向派生类对象。
?
2.png
?
智能指针相关
请参考:C++智能指针简单剖析,推荐必看。
?
C++中的容器种类:
序列容器(7个)
vector:提供了自动内存管理功能(采用了STL普遍的内存管理器allocator),可以动态改变对象长度,提供随机访问。在尾部添加和删除元素的时间是常数的,但在头部或中间就是线性时间。
deque:双端队列(double-ended queue),支持随机访问,与vector类似,主要区别在于,从deque对象的开始位置插入和删除元素的时间也是常数的,所以若多数操作发生在序列的起始和结尾处,则应考虑使用deque数据结构。为实现在deque两端执行插入和删除操作的时间为常数时间这一目的,deque对象的设计比vector更为复杂,因此,尽管二者都提供对元素的随机访问和在序列中部执行线性时间的插入和删除操作,但vector容器执行这些操作时速度更快些。
list:双向链表(是循环的)。目的是实现快速插入和删除。
forward_list(C++11):实现了单链表,不可反转。相比于list,forward_list更简单,更紧凑,但功能也更少。
queue:是一个适配器类。queue模板让底层类(默认是deque)展示典型的队列接口。queue模板的限制比deque更多,它不仅不允许随机访问队列元素,甚至不允许遍历队列。与队列相同,只能将元素添加到队尾、从队首删除元素、查看队首和队尾的值、检查元素数目和测试队列是否为空。
priority_queue:是另一个适配器类,支持的操作与queue相同。
priority_queue模板类是另一个适配器类,它支持的操作与queue相同。两者之间的主要区别在于,在priority_queue中,最大的元素被移到对首。内部区别在于,默认的底层类是vector。可以修改用于确定哪个元素放到队首的比较方式,方法是提供一个可选的构造函数参数:
priority_queue pq1; ? ? ? ? ? ? ? ? ? ? // default version
priority_queue pg2(greater); ? ? ? // use greater to order
greater<>函数是一个预定义的函数对象。
stack:与queue相似,stack也是一个适配器类,它给底层类(默认情况下为vector)提供了典型的栈接口。
?
?