cprimer学习笔记面向对象编程

上传人:枫** 文档编号:506752157 上传时间:2022-07-22 格式:DOC 页数:7 大小:28.50KB
返回 下载 相关 举报
cprimer学习笔记面向对象编程_第1页
第1页 / 共7页
cprimer学习笔记面向对象编程_第2页
第2页 / 共7页
cprimer学习笔记面向对象编程_第3页
第3页 / 共7页
cprimer学习笔记面向对象编程_第4页
第4页 / 共7页
cprimer学习笔记面向对象编程_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《cprimer学习笔记面向对象编程》由会员分享,可在线阅读,更多相关《cprimer学习笔记面向对象编程(7页珍藏版)》请在金锄头文库上搜索。

1、1. 之所以成通过继承而相关联的类型为多态类型,是因为许多情 况下可以互换地使用派生类型或基类型的许多形态。 在 c+ 中, 多态性仅应用于通过继承而相关联的 类型的引用或指针。2. 在 C+ 中,通过基类的引用(或指针)调用虚函数时,发 生动态绑定 。引用(或指针)既可以指向基类对象也可以指 向派生类对象 ,这一事实是动态绑定的关键。用引用(或指 针)调用的虚函数在运行时确定,被调用的函数是引用(或 指针)所指对象的实际类型所定义的。3. 基类要定义虚析构函数4. 除了构造函数以外任意非 static 函数都可以是虚函数。派生 类不能访问基类的 private 成员。 Protected 成

2、员能被派生 类的成员函数访问不能被友元访问 。5. 派生类中虚函数的声明必须与基类中的定义方式完全匹配,但 有一个例外:返回对基类型的引用(指针)的虚函数, 派生类 中的虚函数可以返回基类函数所返回类型的派生类的引用(指 针)。6. 动态绑定的两个条件: 1 虚函数 2 用基类的引用或者指针进 行调用。 只有成员函数 中的代码才能通过作用域操作符覆盖 虚函数机制。覆盖很多时候因为很多派生类要先完成基类版 本中的工作再额外完成其他工作。派生类版本的虚函数调用 基类版本时必须指定作用域, 不然会递归!7. 在同一虚函数的基类版本和派生版本中使用不同的默认实参几 乎一定会引起麻烦。如果通过引用或者指

3、针调用虚函数,但在 实际执行的是派生类中定义的版本,这时就肯能会出现问题。 此时,为虚函数的基类版本定义的默认实参将传给派生类定义 的版本,而派生类版本是用不同的默认实参定义的。8. 每个类控制它所定义的成员的访问。派生类可以进一步限制 但不能放松对继承的成员的访问。访问列表中的访问标号决 定。 公有继承:基类的成员保持原有的属性。 保护继承: 基类的非私有成员均为保护成员。私有继承:基类的非私有 成员均为私有。可以在派生类中使用 using 命令(在 public 里声明 using abc:size 可以把 size 恢复成 public )使得它 重新变为公有 / 保护,关键在于访问级别

4、。 Class 默认私有继 承, struct 默认公有继承9. 友元不会被继承。不管怎么继承 static 成员只有一个实例,如 果在基类里面是 private 则不会被访问。10. 访问方式: 1 基类:成员名。 2派生类:成员名 3 对象 引用指针 4 直接用成员名11. 派生类的引用和指针到基类可以自动转换;反过来没有自动转 换。严格来说对象没有转换,但是可以用派生类的对象来初始 化和赋值基类对象。将派生类的对象传递给希望接受基类引用 的函数,实际上式传递引用,对象没有变。如果将它传递给接 受对象的函数,则复制基类部分。对派生类对基类对象进行初始化复制:1 显示定义复制构造函数 2 定

5、义构造函数 / 复制操作 符 ;以上方法并不常见, 基类一般确定自己的赋值操作符和构造 函数(传递 const 引用,大家都可以用)注意:访问标号。 用 base 指针指向 derived 对象,再用此指针给另外 derived 指 针赋值需要显示强制类型转换。12. 派生类的默认构造函数将调用基类的构造函数 。如果派生类 显示定义自己的复制构造函数或复制操作符,则该定义将完 全覆盖默认定义 。被继承类的复制构造函数和赋值操作符负 责对基类成分及类自己的成员进行复制或复制。如果派生类 定义了自己的复制构造函数,该函数一般 显示使用基类复制 构造函数初始化基类部分 ,如果不这样做很可能用默认构造

6、 函数初始化基类部分。 赋值操作符首先确保避免自身赋值, 然后调用基类的赋值操作符。13. class Bulk_item : public Item_base public:Bulk_item( const std:string& book, doublesales_price , 在派生类构造函数参数列表中不能直接初始化基 类(设置默认参数 )std:size_t qty = 0, double disc_rate = 0.0):Item_base(book, sales_price),可以把基类包含在初始化列表中,将参数传递给基类构造函数min _qty(qty), disco un t

7、(disc_rate) ;14. 尊重基类接口,在派生类中使用接口,不要直接在构造函数中对基类成员赋值15. 每个析构函数负责删除自己的成员。如果在构造函数或析构函 数中调用虚函数,则运行的是为构造函数或析构函数自身类型 定义的版本。(在基类的构造函数或析构函数中调用的虚函数 是该函数的基类版本)16. 基类一定要有虚的析构函数,因为可能会删除指向派生类的 基类指针。17与基类同名的派生类成员将屏蔽对基类成员的直接访问,如果 需要访问基类成员需要用作用域标示符。尽量避免使用同名的 成员。函数也会屏蔽即使原型不同。想要在派生类中重新定义在基类中重载过的函数的一个特殊版本,用using把函数名复制

8、过来,再重载特殊版本。18.函数调用过程:.首先确定进行函数调用的对象、引用或指针的静态类型。*再该类型中查找函数,如果找不到,就在直接基类中查找, 如此遵循着类的继承往上找,知道找到该函数或者查找完最 后一个类。如果不能在类或其相关基类中找到该类的名字, 则调用错误的。 一旦找到了该名字,就进行常规的类型检查,查看如果给定找到的定义,该函数调用是否合法。.假定函数调用合法,编译器就生成代码。如果函数是虚函数 且通过引用或指针调用,则编译器生成代码以确定根据对象 的动态类型运行哪个函数版本,否则,直接生成代码调用函 数。1. 虚函数的重定义要求参数列表一致(可以默认形参不同,对对 象的con

9、st不同(后面),返回值相同(例外是基类返回基类 的指针或引用,派生类返回派生类的指针或引用)。含有一个或多个纯虚函数的类是抽象基类,不能创建对象。2. 句柄:是封装了指向对象和指向计数器指针的类,它绑定对 象以后可以帮助对象完成后台的操作。代码使用句柄将不用 管理对象的指针,但是仍然可以获得通过Sales_item对象进行的调用的虚行为。在一个类中封装了其他类需要 tyepdef其类成员比便用户使用。3. class Sales_item public:/ default con structor: unbound han dleSales_item(): p(0), use (new st

10、d:size_t(1) / attaches a han dle to a copy of the Item_baseobjectSales_item(c onst Item_base&);/ copy control members to manage the use count and pointersSales_item(const Sales_item &i):p(i.p), use(i.use) +*use; Sales_item() decr_use(); Sales_item& operator=(const Sales_item&);/ member access operat

11、orsconst Item_base *operator-() const if (p) return p;else throw std:logic_error(unbound Sales_item); 重截 - 可以让智能指针直接访问对象成员const Item_base &operator*() const if (p) return *p;else throw std:logic_error(unbound Sales_item); private:Item_base *p; / pointer to shared item std:size_t *use; / pointer to shared use count / called by both destructor and assignment operator to free pointersvoid decr_use() if (-*use = 0) delete p; delete use; ;4. 文件查询类。multiset 类,定义key的项目个数,心得:在储存key可能相同的对象的时候用一种排序方式。可以用 multiset类确定相同以便容器内需要计算乘法的对象使用。 Set_i ntersecti on 是查询公共行的算法

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号