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;
}