c++继承

来源:互联网 发布:vb财务管理系统源码 编辑:程序博客网 时间:2024/06/03 01:59

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


代码(好多编译器用添加头文件的方式写继承都会报错,解决方法就是全写在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;}




哪里不对请指正。

1 0