《七章继承--2说课材料》由会员分享,可在线阅读,更多相关《七章继承--2说课材料(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.重名数据成员
2、,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 重名成员,1.重名数据成员,base a b,derived a b bc,例: class base public : int a , b ; ; class derived : public base
3、 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
4、 ; d . b = 3 ; d . 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
5、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 重名成员,base a b,derived a b bc,基类成员的作用域延伸到所有派生类 派生类的重名成员屏蔽基类的同名成员,1.重名数据成员,/例7-4 #include class A publi
6、c: 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:print() ;/派生类对象调用基类版本同名成员函数 print() ;/派生类对象调用自身的成员函数
7、 ; 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 #include class 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 : pub
8、lic 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.重名成员函数,void print() cout a1= a1 t a2= a2 endl ; ,void
9、print()/定义同名函数 cout b1= b1 t b2= b2 endl ; ,派生类屏蔽基类同名成员函数 调用自身的成员函数,/例7-4 #include class 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()/定义同名函数 c
10、out 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 #include class A pub
11、lic: 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:print() ;/派生类对象调用基类版本同名成员函数 print() ;/派生类对象调用自身的成员
12、函数 ; 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 ; ,基类this指针 指向派生类对象,/例7-4 #include class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 = i1; a2 = i2; void print() cout a1= a1 t a2= a2 end
13、l ; ; 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.重名成员函数,/例7-4 #include class A publi
14、c: 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:print() ;/派生类对象调用基类版本同名成员函数 print() ;/派生类对象调用自身的成员函数 ; void main() B b ; b.A:print();b.printAB(); ,7.2.2 重名成员,2.重名成员函数,/例7-4 #include class A public: int a1, a2 ; A( int i1=0, int i2=0 ) a1 =