c++的子对象,继承和多态

来源:互联网 发布:js 判断元素隐藏 编辑:程序博客网 时间:2024/06/06 18:48

C++子对象

 

C++的子对象其实相当于继承的另一种表现方式,一个类要调另一个类的方法,(当然也能够继承),在这个类例如son中数据成员写一个类base的对象m1,在son的构造函数中也要调用base的构造,然后就可以通过类son的对象调用类base的方法。实现代码如下:

#include<iostream>

using namespacestd;

class base

{

private:int x,y;

public :base(intx,int y)

              {

                     this->x=x;

                     this->y=y;

              }

       void fun()

              {

                     cout<<x<<endl;

                     cout<<"这是base的fun!"<<endl;

              }

};

 

class  son

{

private:base m1;

              int z;

public :son(intz):m1(z-3,z+2)

       {

                     this->z=z;

              }

              voidfun()

              {

                     m1.fun();

                     cout<<"这是派生类son的fun!"<<endl;

              }

             

};

 

 

int main (void)

{

       son s1(3);

       s1.fun();

return 0;

}

 

C++继承

继承的特点就是我继承一个父类(当然也可以继承多个类),父类里的方法、数据成员我就不用在我的类里声明了,直接用,当然如果我的类里和基类有同名函数,调用时就不会调用基类的函数。在我的类里面调用构造时要先调基类的构造。(析构函数的调用顺序严格与构造函数相反)。实现代码如下:

#include<iostream>

using namespacestd;

class base

{

private:int x,y;

public :base(intx,int y)

              {

                     this->x=x;

                     this->y=y;

              }

       void fun()

              {

                     cout<<x<<endl;

                     cout<<"这是基类的fun!"<<endl;

              }

};

classwhilst:public base

{

      

private :int z;

public:whilst(inti):base(i+1,i-3)

         {

                z=i;

         }

         

 

         void fun()

         {

                cout<<"这是派生类whilst的fun!"<<endl;

         }

         

};

 

classbright:public base

{

private:int z;

public :bright(intz):base(z,z+3)

              {

                     this ->z=z;

              }

              void fun()

              {

              cout<<"这是派生类bright的fun!"<<endl;

              }

};

 

int main (void)

{

 

whilst w1(4); //注意一定要初始化

w1.fun ();

bright b1(3);

b1.fun();

       return 0;

}

**继承的时候如果派生类有坚决掉派生类的,(不管是不是参数不匹配或是权限够不够,如果不匹配报错),派生类没有,再调用基类的。

 

 

C++多态

C++多态和继承是非常相似的,多态就是在继承的基础上实现的,这块要注意的是,继承的时候还是各类的对象在调方法,而多态实现了一个调用会出现不同的结果,此时两个派生类会有同名函数,(同名,同参,同返回,同访问权限),实现代码如下:

#include<iostream>

using namespacestd;

class base

{

private:int x,y;

public :base(intx,int y)

              {

                     this->x=x;

                     this->y=y;

              }

       void fun()

              {

                     cout<<x<<endl;

                     cout<<"这是基类的fun!"<<endl;

              }

};

classwhilst:public base

{

      

private :int z;

public:whilst(inti):base(i+1,i-3)

         {

                z=i;

         }        

         void fun()

         {

                cout<<"这是派生类whilst的fun!"<<endl;

         }

         

};

 

classbright:public base

{

private:int z;

public :bright(intz):base(z,z+3)

              {

                     this ->z=z;

              }

              void fun()

              {

              cout<<"这是派生类bright的fun!"<<endl;

              }

};

 

int main (void)

{     

 base *b1=new whilst(5);//注意一定要初始化,

b1->fun();

delete b1;

b1=new bright(4);

b1->fun();

delete b1;

       return 0;

}

 

0 0
原创粉丝点击