c++之继承一

has-A,uses-A 和 is-A

  has-A :    包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类。

  uses-A :   一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友元或对象参数传递实现。

  is-A   :     机制称为“继承”。关系具有传递性,不具有对称性。 

   继承 是类之间定义的一种重要关系
   一个 B 类继承A类,或称从类 A 派生类 B

   类 A 称为基类(父类),类 B 称为派生类(子类)

  c++支持多继承

类继承关系的语法形式

  class 派生类名 : 基类名表

   {

        数据成员和成员函数声明

   };

派生类对基类成员的使用,与继承访问控制和基类中成员性质有关
  public:公有继承  基类的公有成员-》派生类的公有成员

             基类的保护成员-》派生类的保护成员

  private:私有继承  基类的公有成员和保护成员-》派生类的私有成员
  protected:保护继承  基类的公有成员和保护成员-》派生类的保护成员
  不论哪种方式继承基类,派生类都不能直接使用基类的私有成员
 
1.共有继承::
  
 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A
 5 {
 6 public:
 7     void get_XY()
 8     {
 9         cout << "Enter two numbers of x,y:"<< endl;
10         cin>>x>>y;
11     }
12     void output_XY()
13     {
14         cout << "x=" << x << \t << "y=" << y << endl;
15     }
16 protected:    //保护数据成员,在类层次中可见
17     int x,y;
18 };
19 class B: public A
20 {
21 public:
22     int get_S()
23     {
24         return s;
25     }
26     void make_S()
27     {
28         s = x*y;
29     }
30 protected:
31     int s;
32 };
33 class C:public B
34 {
35 public:
36     void getH()
37     {
38         cout <<"Enter a number h:";
39         cin>>h;
40     }
41     int getV()
42     {
43         return v;
44     }
45     void makeV()
46     {
47         make_S();
48         v = get_S() * h;
49     }
50 protected:
51     int h,v;
52 };
53 int main()
54 { A objA ;
55    B objB ;
56    C objC ;
57    cout << "It is object_A :\n" ;
58    objA.get_XY() ;
59    objA.output_XY() ;
60    cout << "It is object_B :\n" ;
61    objB.get_XY() ;
62    objB.make_S() ;
63    cout << "S = " << objB.get_S() << endl ;
64    cout << "It is object_C :\n" ;
65    objC.get_XY() ;
66    objC.getH();
67    objC.makeV() ;
68    cout << "V = " << objC.getV() << endl ;
69 }

2.私有继承:

  

 1 #include<iostream>
 2 using namespace std ;
 3 class A
 4 { public :
 5       void  get_XY()
 6       {
 7           cout << "Enter two numbers of x and y : " ;
 8           cin >> x >> y ; 
 9       }
10       void  put_XY() 
11       { 
12           cout << "x = "<< x << ", y = " << y << \n ; 
13       }
14   protected:
15       int x, y ;
16 };
17 class B : private A
18 { public :
19       int  get_S() 
20       { 
21           return s ;
22       }
23       void  make_S()
24       { 
25         get_XY();   
26         s = x * y ;  
27       }    
28    private:        
29        int s ;
30 };
31 int main()
32 { B objB ;    
33    cout << "It is object_B :\n" ;
34    objB.make_S() ;
35    cout << "S = " << objB.get_S() << endl ;
36  }

3。重名成员

  

派生类定义了与基类同名的成员,在派生类中访问同名成员

    时屏蔽了基类的同名成员

在派生类中使用基类的同名成员,显式地使用类名限定符:

类名 :: 成员

基类成员的作用域延伸到所有派生类

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。