继承

作者: artsing | 来源:发表于2018-05-14 17:41 被阅读0次

    注意:不是所有的函数都能继承;构造函数、析构函数和 operator:= 不能继承
    重载:同名不同参的函数名称的重载;
    重写:子类对父类函数的重写;
    隐藏:
    覆盖:

    声明 继承
    private 私有声明 私有继承
    protected 保护声明 保护继承
    public 公有声明 公有继承



    声明: 是对类中属性做权限声明;

    私有声明:仅基类可以访问,派生类和基类类对象不可直接访问;
    保护声明:基类和派生类可以直接访问;类对象不可直接访问;
    公有声明:基类,派生类,基类对象都可以直接访问;


    继承 对可以继承下来的成员,私有成员继承下来是不可以访问的,保护成员和公有成员继承下来是可以访问的。继承前面加限定,限定是对可以访问的成员做权限设置;

    私有继承:把可访问的成员设成私有声明;
    保护继承:把可以访问的成员设成保护声明;
    公有继承:不修改可以访问的成员的声明;


    注意:有虚函数时,会自动继承虚指针,并映射对应的虚函数表

    #include <stdio.h>  
    #include <iostream>  
    using namespace std;  
      
    class A  
    {  
    protected:  
        int m_data;  
    public:  
        A(int data = 0)  
        {  
            m_data = data;  
        }  
        int GetData()  
        {  
            return doGetData();  
        }  
         int doGetData()  
        {  
            return m_data;  
        }  
    };  
      
    class B: public A  
    {  
    protected : int m_data;  
    public:   
        B(int data = 1)  
        {  
            m_data  =  data;  
        }  
        int doGetData()  
        {  
            return m_data;  
        }  
      
    };  
      
    class C : public B  
    {  
    protected :  int m_data;  
    public :  
        C(int data = 2)  
        {  
            m_data = data;  
        }  
    };  
    int main()  
    {  
        C c(10);  
        cout<<c.GetData() << endl;  
        cout<<c.A::GetData()<<endl;  
        cout<<c.B::GetData()<<endl;  
        cout<<c.C::GetData()<<endl;  
      
        cout<<c.doGetData()<<endl;  
        cout<<c.A::doGetData()<<endl;  
        cout<<c.B::doGetData()<<endl;  
        cout<<c.C::doGetData()<<endl;  
        //cout << A::doGetData()<<endl;  这种调用方式是错的  
        return 0;  
    }  
      
    /* 
    结果为  0 0 0 0 1 0 1 1 
    */  
    
    
      1 #include <iostream>
      2 using namespace std;
      3 
      4 class A {
      5 public:
      6         static void doGetData() {
      7                 cout << "A" << endl;
      8         }
      9 };
     10 
     11 class B: public A
     12 {
     13 public:
     14          void doGetData() {
     15                 cout << "B" << endl;
     16          }
     17 };
     18 
     19 class C : public A {
     20 public:
     21         static void doGetData() {
     22                 cout << "C" << endl;
     23         }
     24 };
     25 
     26 
     27 int main()
     28 {
     29         B  b ;
     30         b.doGetData();
     31         b.A::doGetData();
     32 
     33         // B::doGetData(); // 错误
     34 
     35         C::doGetData();
     36 
     37         return 0;
     38 }
    
      
    /* 
    结果为  
    B 
    A 
    C
    */  
    

    相关文章

      网友评论

          本文标题:继承

          本文链接:https://www.haomeiwen.com/subject/ogmxdxtx.html