问题: 希望执行派生类的构造函数时,使派生类的数据成员和基类的数据成员同时初始化
方案:在执行派生 类构造函数时,调用基类构造函数
一般形式:
派生类构造函数名 (总参数表列):基类构造函数名(参数表列)
{ 派生类新增数据成员初始化语句 }
#include<iostream>
#include<string>using namespace std;
class Student //声明基类
{
public:
Student( int n, string nam ,char s) //基类构造函数
{
num = n;
name = nam;
sex = s;
}
~Student() { } //基类析构函数
protected: //基类保护部分
int num;
string name;
char sex;
};
class Student1: public Student //派生类
{
public:
Student1(int n ,string nam, char s, int a, string ad):Student( n, nam ,s) //派生类构造函数
{
age= a; //派生类构造函数只对新增数据成员初始化
address= ad;
}
void show()
{
cout <<"num: "<<num<<endl;
cout <<"name: "<<name<<endl;
cout <<"sex: "<<sex<<endl;
cout <<"age:"<<age<<endl;
cout <<"address:"<<address<<endl;
}
~Student1() { } //派生类析构函数
private: //派生类私有成员
int age;
string address;
};
int main()
{
Student1 stud1(100010,"Wang-li",'f',19,"115 Beijing Road ,Shanghai");
Student1 stud2(10011,"Zhang-fun",'m',21,"213 Shanghai Road ,Beijing");
stud1.show();
stud2.show();
return 0;
}
注:派生类构造函数名(Student1)后面括号的总参数列包括参数类型,参数名(如, int n ),而基类构造函数只有参数名(如,n, nam, s),是实参,从总参数列表传来,
参数列表形式:
Student1 (int n , string nam , char s , int a , string ad ): Student( n, nam, s) , age(a) , address(ad) { }