网站大量收购独家精品文档,联系QQ:2885784924

C++程序设计(part2).ppt

  1. 1、本文档共90页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
抽象工厂模式(Abstact Factory)是一种常见的软件设计模式。该模式为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类 * 继承 新方法 不同名 同名 b.A::f(); //A中的 f class B: public A { … public: h() { f(1); A::f(); } f(int); }; 重定义方法 虚函数 B b; b.f(1); //Ok b.f(); //Error b.A::f(); //Ok class A //基类 { int x,y; public: f(); g(); }; 继承 类的使用者 实例用户 派生类用户 一般与特殊 is_a 子类是基类的特化 整体与部分 is a part of 聚集 类A作为类B的成员对象类 继承 继承的种类 单继承 多继承 单继承 定义 class 派生类名:[继承方式] 基类名 { 〈成员表〉}; 继承方式 public、private和protected 缺省为private 继承 派生类中对基类成员的访问 在派生类中可以使用基类的public 成员 不能使用基类的private 成员 protected成员 开放给派生类 继承方式 private protected public 继承方式决定了派生类的对象和派生类的派生类对基类成员的访问控制 继承 继承方式的调整 在任何继承方式中,除了基类的private成员,都可以在派生类中分别调整其访问控制 基类名::基类成员名 对基类一个重载成员函数名的访问控制的调整,将调整基类所有具有该名的重载函数。 派生类中如果定义了与基类同名的成员函数,则在派生类中不能再对基类中的同名函数进行访问控制调整 class A { public: void f1(); void f2(); }; class B: public A { private: A::f1; }; Ex: 分别利用继承机制定义新类和直接定义新类, 并进行比较 继承 派生类对象的初始化 由基类和派生类共同完成 基类的成员由基类的构造函数初始化 派生类的成员由派生类的构造函数初始化 构造函数的执行次序 1.执行基类的构造函数 2.执行派生类成员对象类的构造函数 3.执行派生类的构造函数 析构函数的执行次序 与构造函数相反 继承 基类构造函数的调用 缺省执行基类默认构造函数 如果要执行基类的非默认构造函数,则必须在派生类构造函数的成员初始化表中指出 class A { int x; public: A() { x = 0; } A(int i) { x = i; } }; class B: public A { int y; public: B() { y = 0; } B(int i) { y = i; } B(int i, int j):A(i) { y = j; } }; B b1; //执行A::A()和B::B() B b2(1); //执行A::A()和B::B(int) B b3(0,1); //执行A::A(int)和B::B(int,int) 虚函数 类型相容 类、类型 类型相容、赋值相容 问题:a、b是什么类型时,a = b 合法? A a; B b; class B: public A 对象的身份发生变化 属于派生类的属性已不存在 B* pb; A* pa = pb; class B: public A B b; A a=b; class B: public A 对象身份没有发生变化 虚函数 class A { int x,y; public: f(); }; class B: public A { int z; public: f(); g(); }; A a; B b; a = b; //OK, b = a; //Error a.f(); //A::f() A r_a=b; //OK A *p_a=b; //OK B r_b=a; //Error B *p_b=a; //Error 把派生类对象赋值 给基类对象 基类的引用或指针可以引用 或指向派生类对象 fu

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档