派生类与继承"/>
c++派生类与继承
派生类的构造函数和析构函数
基类的构造函数和析构函数不能被继承,在派生类中,如果对派生类新增的成员进行初始化,需要加入派生类的构造函数
当派生类创建对象时,首先执行基类的构造函数,随后执行派生类的构造函数;当撤销派生类对象时,先执行派生类的析构函数,在执行基类的析构函数。
当基类的构造函数没有参数或没有显式定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数。
#include<iostream>
#include<string>
using namespace std;
class student
{public:student(int number1,string name1,float score1){number=number1;name=name1;score=score1;} void print(){cout<<"number:"<<number<<",name"<<name<<",score"<<score<<endl;}protected:string name;int number;float score;
};
class ustudent:public student
{public:ustudent(int number1,string name1,float score1,string major1):student(number1,name1,score1)//定义派生类构造函数时,缀上要调用的基类的构造函数及其参数 {major=major1;}void print1(){print();cout<<"major:"<<major<<endl;}protected:string major;
};
int main()
{ustudent stu(1234,"zhangsan",89,"英语");stu.print1();return 0;
}
冒号前面时派生类构造函数的主干,冒号后面是调用的基类构造函数及其参数。总参数列表包括基类构造函数所需的参数和派生类新增的数据成员初始化所需要的参数。
当基类构造函数不带参数时,派生类不一定需要定义构造函数,然而当基类构造函数哪怕只是带有一个参数,他所有的派生类都必须定义构造函数,甚至所定义的派生类构造函数可能为空,仅仅起参数传递的作用。
如:
派生类构造函数列表只有一个参数,传递给了要调用的基类构造函数base,派生类构造函数体为空。
class base
{
public:
base(int n)
{
cout<<"基类"<<endl;
i=n;
}
private:
int i;
} ;
class deprived:public base
{
public:
deprived(int n):base(n)
{
}
};
在定义派生类对象时,构造函数的执行顺序如下:
1.调用基类的构造函数,对基类数据成员初始化
2.调用内嵌对象成员的构造函数,对内嵌对象成员的数据初始化;
3.执行派生类的构造函数体,对派生类数据成员初始化。
撤销对象时,析构函数的调用顺序与构造函数的调用顺序正好相反。
#include<iostream>
#include<string>
using namespace std;
class student
{public:student(int number1,string name1,float score1){number=number1;name=name1;score=score1;}void print(){cout<<"学号:"<<number<<endl;cout<<"姓名:"<<name<<endl;cout<<"成绩:"<<score<<endl;}protected:int number;string name;float score;};class
更多推荐
c++派生类与继承
发布评论