C++笔记
析万物之理
这个作者很懒,什么都没留下…
展开
-
抽象基类(ABC)
C++使用纯虚函数提供未实现的函数。当类声明中包含纯虚函数时,则不能创建该类的对象。包含纯虚函数的类只用作基类,要成为抽象基类,必须至少包含一个纯虚函数。原型中的=0使虚函数成为纯虚函数。ABC描述的是至少使用一个纯虚函数的接口。继承和动态内存分配: 1、第一种情况:派生类不使用new 此时派生类可以不用再定义显式析构函数、复制构造函数和赋值运算符。 2、第二种情况:派生类原创 2015-07-27 19:59:56 · 545 阅读 · 0 评论 -
在构造函数中使用new时应注意的事项
1、如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete。2、new和delete必须相兼容。new对应于delete,new[]对应于delete[]。3、若有多个构造函数,则必须以相同的方式使用new,要么都带中括号,要么都不带。4、应定义一个复制构造函数,通过深度构造函数,通过深度复制将一个对象初始化为另一个对象。类似下面代码:String::Stri原创 2015-07-14 22:08:10 · 333 阅读 · 0 评论 -
类设计回顾
1、编译器生成的成员函数 1、默认构造函数: 默认构造函数要么没有参数,要么所有的参数都有默认值。 自动生成的默认构造函数的另一项功能是,调用基类的默认构造函数以及调用本身是对象的成员所属类的默认构造函数。 如果类包含指针成员,则必须初始化这些成员,因此,最好提供一个显式默认构造函数,将所有的类数据成员都初始化为合理的值。 2、复制构造函数原创 2015-07-27 22:24:12 · 330 阅读 · 0 评论 -
定位new运算符
1、程序员必须负责管理定位new运算符用于从中使用的缓冲区内存单元,要使用不同的内存单元,程序员需要提供两个位于缓冲区的不同地址,并确保这两个内存单元不重叠。 例如下代码:pc1 = new (buffer) JustTesting;pc3 = new (buffer + sizeof(JustTesting)) JustTesting("Better Idea", 6);2、如果使用定位new原创 2015-07-15 17:02:38 · 321 阅读 · 0 评论 -
成员初始化列表
1、对于const数据成员,必须在执行到构造函数体之前,即创建对象时进行初始经。 2、成员初始经列表由逗号分隔的初始化列表组成(前面带冒号)。它位于参数列表的右括号之后、函数体左括号之前。 3、初值可以是常量或构造函数的参数列表中的参数。这种方法并不限于初始化常量。 例如下代码:Queue::Queue(int qs) : qsize(qs), front(NULL), rear(NULL),原创 2015-07-15 20:38:05 · 1219 阅读 · 0 评论 -
私有继承与保护继承
使用私有继承,类将继承实现。 包含将对象作为一个命名的成员对象添加到类中,而私有继承将对象作为一个未被命名的继承对象添加到类中。使用术语子对象(subobject)来表示通过继承或包含添加的对象。 因此私有继承提供的特性与包含相同:获得实现,但不获得接口。 1、包含版本提供被显式命名的对象成员,而私有继承提供了无名称的子对象成员。这是两种方法的第一个主要区别。 2、对原创 2015-08-01 00:37:37 · 834 阅读 · 0 评论 -
多重继承与虚基类
多重继承(multiple inheritance,MI)。原创 2015-08-03 21:13:15 · 1120 阅读 · 0 评论 -
类的继承
类的继承有3种方式: 1、公有继承 2、保护继承 3、私有继承公有继承:它建立了一种is-a关系,即派生类对象也是一个基类对象,可以对基类对象执行的任何操作,也可以对派生类对象执行。 这种关系称为is-a-kind-of(是一种)关系可能更准确,但通常使用术语is-a。 公有继承不能建立is-like-a关系,也就是说,它不采用明喻。 公有继承不建立is-implemented-a原创 2015-07-23 22:47:34 · 347 阅读 · 0 评论 -
虚函数的工作原理
通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存 一个指向函数地址数组的指针。这种数组称为虚函数表(virtual function table, vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址。总之,使用虚函数时,在内存和执行速度方面有一定的成本。包括:1、每个对象都将增大,增大量为存储地址的空间。 2、对于每个类,编译器都创建一个虚函数地址表(数组)。原创 2015-07-24 16:49:48 · 453 阅读 · 0 评论