#include<iostream>
using namespace std;
class student {
public:
student(int a, string b) :num(a), name(b) {
cout << "基类先来" << endl;
}
private:
int num;
string name;
};
class student1 :public student {
public:
student1(int a, string b, int sa, string sb, int c) :student(a, b), s1(sa, sb), sex(c) { cout << "student1来了" << endl; };
//
private:
int sex;
student s1;
};
class student2 :public student1 {
public :
student2(int a2, string b2, int sa2, string sb2, int c2, int s) :student1(a2, b2, sa2, sb2, c2), score(s) { cout << "stu2来咯" << endl; }
private:
int score;
};
int main() {
student t1(1, "dema");
cout << endl;
student1 t2(1, "dema", 3, "dede", 5);
cout << endl;
student2 t3(1, "dema", 3, "dede", 5, 4);
}
结果:
基类先来
基类先来
基类先来
student1来了
基类先来
基类先来
student1来了
stu2来咯
重点
执行顺序:
1,调用基类构造函数。
2,子对象调用构造函数,
3,派生类本身构造函数
补充:
多层派生时只需要写出上层的构造函数就行(他的直接基类) 例如student2;
如果在基类中没有定义构造函数,或者定了无参构造函数,定义派生类可以不写基类构造函数