C++第3版-第四章 派生类与继承.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++第3版-第四章 派生类与继承.ppt

4.5 基类与派生类对象之间的赋值兼容关系 基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。 例如,下面声明的两个类: class Base{ … }; class Derived:public Base{ … }; 因此,公有派生类具有基类的全部功能,凡是基类能够实现的功能,公有派生类都能实现。 我们可以将派生类对象的值赋给基类对象,在用到基类对象的时候可以用其派生类对象代替---基类和派生类对象之间的赋值兼容规则。 通过公有继承, 基类的公有或保护成员的访问权限在派生类中全部按原样保留了下来。 基类的私有成员可以通过调用基类的公有成员函数在派生类外进行访问。 具体表现在以下几个方面: (1) 可以用派生类对象给基类对象赋值。 例如: Base b; //定义基类Base的对象b Derived d; //定义公有派生类Derived的对象d b=d; 这样赋值的效果是,对象b中数据成员将具有对象d中对应数据成员的值。 用派生类对象d对基类对象b赋值 说明: 所谓赋值仅仅指对基类的数据成员赋值。 (2) 可以用派生类对象来初始化基类对象的引用。 例如: Base b; //定义基类Base的对象b Derived d; //定义基类Base的公有派生类 //Derived的对象d? Base br=d; ? 定义基类Base的对象的引用br,并用派生类Derived的对象d对其初始化 (3) 派生类对象的地址可以赋给指向基类对象的指针。 例如: Derived d; //定义基类Base的公有派生类 //Derived的对象d? Base* bp=d; ? 把派生类对象的地址d赋值给指向基类的指针bp,也就是说,使指向基类对象的指针bp指向派生类对象d。 (4) 如果函数的形参是基类对象或基类对象的引用,在调用函数时可以用派生类对象作为实参。 例如: class Base{ //声明基类Base public: int i; … }; class Derived:public Base{ //声明公有派生类Derived … }; void fun(Base bb) //普通函数,形参为基类Base对象的引用 { coutbb.iendl; //输出该引用所代表的对象的数据成员i } 在调用函数fun时可以用派生类Derived的对象d4作为实参: fun(d4); 输出派生类Derived的对象d4赋给基类的数据成员i的值。 #includeiostream //例4.19-1 using namespace std; class Base{ public: int i; Base(int x) { i=x; } void show(){ coutBase iendl; }}; class Derived:public Base{ public: Derived(int x):Base(x){ }; void show() { coutDerived iendl;} }; 声明基类Base 声明公有派生类Derived int main() { Base b1(11); b1.show();//① Derived d1(22); b1=d1; b1.show(); //② Derived d2(33); Base b2=d2; b2.show();//③ Derived d3(44); Base* b3=d3; b3-show(); //④ return 0; } 用派生类对象给基类对象赋值 用派生类对象来初始化基类的引用 把派生类对象的地址赋值给指向基类的指针 运行结果: Base 11 ① Base 22 ② Base 33 ③ Base 44 ④ 说明:(1) 声明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象。 例如: class Base{ …}; class Derive:private Base { …}; int main() { Base op1,*p

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档