七章继承--2.ppt
《七章继承--2.ppt》由会员分享,可在线阅读,更多相关《七章继承--2.ppt(82页珍藏版)》请在三一办公上搜索。
1、7.2.1 访问控制,3.保护继承,派生类定义了与基类同名的成员,在派生类中访问同名成员 时屏蔽了基类的同名成员 在派生类中使用基类的同名成员,显式地使用类名限定符:类名:成员,7.2.2 重名成员,7.2.2 重名成员,例:class base public:int a,b;class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,1.重名数据成员,base a b,derived a b bc,例:class base public:int a,b;
2、class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,1.重名数据成员,base a b,derived a b bc,例:class base public:int a,b;class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,base a b,derived a b bc,访问从base 类继承的数据成
3、员a,1.重名数据成员,例:class base public:int a,b;class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,访问从base 类继承的 b,base a b,derived a b bc,1.重名数据成员,例:class base public:int a,b;class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.
4、c=4;,7.2.2 重名成员,访问derived 类定义的数据成员b,base a b,derived a b bc,1.重名数据成员,例:class base public:int a,b;class derived:public base public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,访问derived 类定义的数据成员c,base a b,derived a b bc,1.重名数据成员,例:class base public:int a,b;class derived:public b
5、ase public:int b,c;void f()derived d;d.a=1;d.base:b=2;d.b=3;d.c=4;,7.2.2 重名成员,base a b,derived a b bc,基类成员的作用域延伸到所有派生类派生类的重名成员屏蔽基类的同名成员,1.重名数据成员,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int
6、j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,void print()cout a1=a1 t a2=a2 endl;,void print()/定义同名函数 cout b1=b1 t b2=b2 endl;,/例7-4#includeclass A public:in
7、t a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重
8、名成员,2.重名成员函数,void print()cout a1=a1 t a2=a2 endl;,void print()/定义同名函数 cout b1=b1 t b2=b2 endl;,派生类屏蔽基类同名成员函数 调用自身的成员函数,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void prin
9、t()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,void print()cout a1=a1 t a2=a2 endl;,void print()/定义同名函数 cout b1=b1 t b2=b2 endl;,派生类对象调用从基类继承的同名成员函数,/例7-4#includeclass A public:int a1,a
10、2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.
11、重名成员函数,void print()cout a1=a1 t a2=a2 endl;,void print()/定义同名函数 cout b1=b1 t b2=b2 endl;,基类this指针指向派生类对象,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cou
12、t b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,i
13、nt j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;cla
14、ss B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2
15、=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:print();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,通过继承,类B具有两个同名成员函数void A
16、:print();void B:print();,/void print(A*this);,/void print(B*this);,/例7-4#includeclass A public:int a1,a2;A(int i1=0,int i2=0)a1=i1;a2=i2;void print()cout a1=a1 t a2=a2 endl;class B:public A public:int b1,b2;B(int j1=1,int j2=1)b1=j1;b2=j2;void print()/定义同名函数 cout b1=b1 t b2=b2 endl;void printAB()A:p
17、rint();/派生类对象调用基类版本同名成员函数 print();/派生类对象调用自身的成员函数;void main()B b;b.A:print();b.printAB();,7.2.2 重名成员,2.重名成员函数,通过继承,类B具有两个同名成员函数void A:print();void B:print();派生类也是基类,基类指针可以指向 派生类对象 派生类中定义与基类同名的成员函数,称为重载成员函数,/void print(A*this);,/void print(B*this);,7.2.3 派生类中的静态成员,基类定义的静态成员,将被所有派生类共享 根据静态成员自身的访问特性和派生
18、类的继承方式,在类层次 体系中具有不同的访问性质 派生类中访问静态成员,用以下形式显式说明:类名:成员 或通过对象访问对象名.成员,7.2.3 派生类中的静态成员,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.Add();x.out();y.f();coutst
19、atic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,class B,class D:private B,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.Add();x.out();y.f();cou
20、tstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,static void Add()i+;,静态成员函数,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.Add();x.out();y.f(
21、);coutstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,static int i;,静态数据成员,int B:i=0;,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.Add();x.o
22、ut();y.f();coutstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,i=5;,i 是类D的私有静态数据成员类中可见,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.Add();x.
23、out();y.f();coutstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,Add();,Add()是类D的私有静态成员函数类中可调用,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.A
24、dd();x.out();y.f();coutstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,B:i+;B:Add();,访问B类的静态成员,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main()B x;D y;x.
25、Add();x.out();y.f();coutstatic i=B:iendl;coutstatic i=x.iendl;/coutstatic i=y.iendl;,coutstatic i=B:iendl;,访问B类的静态数据成员,#includeclass B public:static void Add()i+;static int i;void out()coutstatic i=iendl;int B:i=0;class D:private B public:void f();i=5;Add();B:i+;B:Add();,/例7-5 在派生类中访问静态成员,void main(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 继承
链接地址:https://www.31ppt.com/p-5017158.html