c++继承

继承分为公有,私有,保护。具体定义是什么自己去查,网上多了(那定义真是云里雾里,就他自己能看懂)。这里主要是通俗易懂的程序。


代码(好多编译器用添加头文件的方式写继承都会报错,解决方法就是全写在int main()里面):


第一部分:公有,私有,保护:

1.数值的继承:

#include <iostream>
using namespace std;

class A{
public:
    A(){                                //类里面赋值用构造函数,不要用int a=0,int b=1,int c=2会报出莫名其妙的错误..
        a = 0;
        b = 1;
        c = 2;
    }
    int a;
protected:
    int b;
private:
    int c;
};

class B : public A
{
    public:
        void show1()
        {                          
            cout<<a<<b<<endl;       //这里只能输出a,b不能输出c.
        }
};



class C : protected A
{
    public:
        void show1()
        {
            cout<<a<<b<<endl;       //这里只能输出a,b不能输出c
        }
};



class D : private A
{
    public:
        void show1()
        {
            cout<<a<<b<<endl;       //这里只能输出a,b不能输出c
        }
};


int main()
{
    B x;
    x.show1();
    C y;
    y.show1();
    D z;
    z.show1();

    return 0;
}

2.函数的继承:

#include <iostream>
using namespace std;

class A{
public:
    A(){                                
        a = 0;
        b = 1;
        c = 2;
    }
    int a;
    int sum1()
    {
        int x=a+6;
        return x;
    }
protected:
    int b;
    int sum2()
    {
        int x=b+6;
        return x;
    }
private:
    int c;
    int sum3()
    {
        int x=c+6;
        return x;
    }
};

class B : public A                      //只能够将公有和保护的函数调用。
{
    public:
        void show1()
        {
            int x=0;
            x+=sum1();
            cout<<x<<endl;
        }
         void show2()
        {
            int x=0;
            x+=sum2();
            cout<<x<<endl;
        }
        /*void show3()
        {
            int x=0;
            x+=sum3();
            cout<<x<<endl;
        }*/
};



class C : protected A                   //public和protect的函数都可以调用。
{
    public:
        void show1()
        {
            int x=0;
            x+=sum1();
            cout<<x<<endl;
        }
         void show2()
        {
            int x=0;
            x+=sum2();
            cout<<x<<endl;
        }
        /*void show3()
        {
            int x=0;
            x+=sum3();
            cout<<x<<endl;
        }*/
};



class D : private A                         //一个函数都不能调用。
{
        /*void show1()
        {
            int x=0;
            x+=sum1();
            cout<<x<<endl;
        }*/
         /*void show2()
        {
            int x=0;
            x+=sum2();
            cout<<x<<endl;
        }*/
        /*void show3()
        {
            int x=0;
            x+=sum3();
            cout<<x<<endl;
        }*/
};


int main()
{
    B x;
    x.show1();
    x.show2();

    C y;
    y.show1();
    y.show2();
    //y.show3();

    D z;
    //z.show1();
    //z.show2();
    //z.show3();
    return 0;
}


第二部分:

main()的深入调用:

///
#include <iostream>
using namespace std;

class A{
public:
    void show7()
    {
        cout<<666<<endl;
    }
protected:
    void show8()
    {
        cout<<666<<endl;
    }
private:
    void show9()
    {
        cout<<666<<endl;
    }
};

class B : public A
{
    public:

};


int main()
{
    B x;
    x.show7();          //这种方式也就是对象的方法,main里只能调用public,一定要注意。
    
    return 0;
}
//
#include <iostream>
using namespace std;


class A
{
public:
    A()
    {
        a=1;
    }
    int a;
    void show()
    {
        cout<<a<<endl;
    }
};


class B : public A
{
public:
    B()
    {
        b=1;
    }
    int b;
    void show1()
    {
        cout<<b<<endl;
    }
};


int main()
{
    B x;
    cout<<x.a<<endl;
    cout<<x.b<<endl;


    x.show();           //继承的一重调用。
    x.show1();
    return 0;
}
//
#include <iostream>
using namespace std;


class A
{
public:
    A()
    {
        a=1;
    }
    void show1()
    {
        cout<<"A"<<endl;
    }
    int a;
};


class B : public A
{
public:
    B()
    {
        b=2;
    }
    void show2()
    {
        cout<<"B"<<endl;
    }
    int b;
};


class C : public A
{
public:
    C()
    {
        c=3;
    }
    void show3()
    {
        cout<<"C"<<endl;
    }
    int c;
};


class D : public B, public C
{
public:
    D()
    {
        d=4;
    }
    void show4()
    {
        cout<<"D"<<endl;
    }
    int d;
};


int main()
{
    D x;
    cout<<x.B::a<<endl;             //用一点小技巧就可以无限深入的调用。
    cout<<x.b<<endl;
    cout<<x.c<<endl;
    cout<<x.d<<endl;


    x.B::show1();
    x.show2();
    x.show3();
    x.show4();


    return 0;
}



第三部分:虚基类(像上面第二部分那种要是层数超过10000层,那"::"得写多少,为了简化,出现了虚基类)。

#include <iostream>
using namespace std;

class A
{
public:
    A()
    {
        a=1;
    }
    void show1()
    {
        cout<<"A"<<endl;
    }
    int a;
};

class B : virtual public A				//public前加了virtual要注意。
{
public:
    B()
    {
        b=2;
    }
    void show2()
    {
        cout<<"B"<<endl;
    }
    int b;
};

class C : virtual public A
{
public:
    C()
    {
        c=3;
    }
    void show3()
    {
        cout<<"C"<<endl;
    }
    int c;
};

class D : virtual public B, virtual public C
{
public:
    D()
    {
        d=4;
    }
    void show4()
    {
        cout<<"D"<<endl;
    }
    int d;
};

class E : virtual public D
{
public:
    E()
    {
        e=4;
    }
    void show5()
    {
        cout<<"E"<<endl;
    }
    int e;
};

int main()
{
    E x;
    cout<<x.a<<endl;             
    cout<<x.b<<endl;
    cout<<x.c<<endl;
    cout<<x.d<<endl;
    cout<<x.e<<endl;

    x.show1();
    x.show2();
    x.show3();
    x.show4();
    x.show5();

    return 0;
}




第四部分:构造函数,不会,用到再说。




第五部分:继承的重用(设class B :public A,则在B中想要改掉A的某个函数 )

#include <iostream>
using namespace std;

class A
{
public:
    virtual void show()                 //注意函数前面加virtual。
    {
        cout<<"AAA"<<endl;
    }
};

class B : virtual A                     //别用private就行,为什么,private总是会出一些奇怪的error。
{
public:
    virtual void show()                 //照着A抄下来,函数里面就是重写的内容。
    {
        cout<<"BBB"<<endl;
    }
};

int main()
{
    B x;
    x.show();
    return 0;
}




哪里不对请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值