简单的继承
继承方式 :public(公有基类),private(私有基类)和protected(保护基类)
单继承的定义格式:
class 派生类名:继承方式 基类名
{
派生类的函数和成员
};
若派生类对基类的函数进行了改写,那么基类函数前面必须加上virtual关键字,但基类的析构函数必须是virtual的
可以使用初始化列表进行赋值,格式:函数名(参数1,参数2……):值1,值2……对于非内建类型来说,初始化列表效率更高
因为派生类继承了基类的成员和方法,所以派生的对象可以调用基类中的成员和方法,(如案例中的cout<<d.getNumber()<<endl;)派生类也可以新增一些成员和方法(如:d.hello();)
简单的案例:
#include<iostream>
using namespace std;
//定义一个基类
class Base
{
public:
Base()//默认构造(无参构造)
{
m_bnumber=0;
cout<<"Base() is called"<<endl;
}
Base(int i)//普通构造(有参构造)
{
m_bnumber=i;
cout<<"Base(i) is called"<<endl;
}
/*或者使用初始化列表
Base(int i):m_bnumber(i)
{
}
*/
//基类的析构函数必须是virtual的
virtual ~Base()
{
cout<<"~Base() is called"<<endl;
}
public:
int getNumber()
{
return m_bnumber;
}
virtual void Print()
{
cout<<m_bnumber<<endl;
}
private:
int m_bnumber;
};
//派生类
class Derived:public Base
{
public:
Derived():Base(),m_dnumber(0)
{
cout<<"Derived() is called"<<endl;
}
Derived(int x,int y):Base(x),m_dnumber(y)
{
/*或者在函数中赋值
Base(x);
m_dnumber=y;
*/
cout<<"Derived(int x,int y) is called"<<endl;
}
~Derived()
{
cout<<"~Derived() is called"<<endl;
}
public:
void Print()
{
Base::Print();
cout<<m_dnumber<<endl;
}
void hello()
{
cout<<"hello world"<<endl;
}
private:
int m_dnumber;
};
int main()
{
Derived d(5,2);
cout<<d.getNumber()<<endl;
d.Print();
d.hello();
return 0;
}
运行结果
从运行的结果可以看出构造和析构的顺序为:基类构造–>派生类构造–>派生析构–>基类析构