继承中基类的默认成员函数
在继承中,基类的默认成员函数和普通类中的默认成员函数相同。存在6个默认成员函数。
派生类中的默认成员函数
1.构造函数
派生类中的构造函数必须完成基类的构造,如果不进行基类的构造函数,则无法初始化基类部分。
class Base
{
public:
private:
int _b;
};
class Derived : public Base
{
public:
//调用默认的派生类构造函数时,
//在初始化列表调用基类的构造函数
private:
int _d;
};
int main()
{
Derived D;//调用默认的派生类构造函数
return 0;
}
如果基类用户显式的给出构造函数(即基类中没有默认构造函数)则在派生类中,用户需要显式给出派生类的构造函数,并且,需要在派生类的初始化列表出给出相应的基类构造函数的调用。
class Base
{
public:
Base(int b)//存在参数,或者不全缺省参数
:_b(b)
{
cout << "Base" << endl;
}
private:
int _b;
};
class Derived : public Base
{
public:
//调用默认的派生类构造函数时,(基类中构造函数参数必须存在,并且为不全缺省)
//在初始化列表调用基类的构造函数
private:
int _d;
};
int main()
{
Derived d;//调用默认的派生类构造函数
return 0;
}
原因是因为: 如果不进行显式传参调用构造函数的话,基类中参数无法确定,所以需要调用时传参
派生类对象初始化先调用基类构造函数在调用派生类构造函数。
2.析构函数
派生类析构函数会先进行自己的析构,然后在自身析构函数的末尾调用基类的析构函数析构基类部分。
如果派生类没有给出析构函数,则会默认生成一个(最简单)析构函数,并且在派生类默认析构函数末尾调用基类的析构函数。
class Base
{
public:
private:
int _b;
};
class Derived : public Base
{
public:
private:
int _d;
};
int main()
{
Derived d;
//会析构派生类对象d,调用默认的派生类析构函数
}
拷贝构造函数
派生类的(默认的)拷贝构造函数必须调用基类的拷贝构造函数来进行对对象的拷贝构造。
赋值运算符重载
operator= 同拷贝构造函数一样,需要先调用基类的赋值运算符重载函数来完成。