组合特点:有一个嵌入对象
通过初始化列表初始化(数据的名字)(形参表里面数据类型为“类”类型);
传递嵌入对象时会调用复制构造函数(复制构造函数形参前最好加const,否则很容易报错);
继承特点:是一个,具有基类的特点;
初始化列表里直接调用基类构造函数(即基类的名字)(形参表里面包含基类的数据成员);
两者在构造函数和复制构造函数函数中,初始化的方式不一样。嵌入的对象是用对象的名字,而类使用类名;
#include<iostream>
#include<string>
using namespace std;
class base{
private:
int a;
int b;
public:
base(int m,int n):a(m),b(n){
}
};
class c:public base{
private :
int j;
base b1;
public:
c(int m,int n,int j,base b):base(m,n),j(j),b1(b){
}//对于继承类是使用类名base(,)来初始化,而对于内嵌对象是使用对象名,并且传入对象初始化
};
int main()
{
base b1(1,2);
c c1(1,2,3,b1);
return 0;
}
派生类构造函数执行顺序:
1.调用基类构造函数,调用顺序根据继承声明顺序;
2.对派生类新增成员对象初始化,调用顺序根据声明顺序;
3.执行构造函数体内;
析构函数则与1,2相反