1) 子类继承有参的父类,那么 必须在子类的 构造函数的初始化列表那里,给父类赋值,比如说
父类 Student 的构造函数 是 Student(int age ,string name)
然后我的子类的构造函数 须是:
Student3(int age ,string name,int sorce):Student(age,name)
{ }
2)总之,不管你是 有参父类构造函数 还是无参构造函数 那么就有了 只要实例化子类,就会调用父类的构造函数
为啥--> 因为子类的内存区域,有一块属性内存是父类的相关属性,所以啊 你实例化子类,和父类相关的那块内存,
要用父类的构造函数来初始化,剩下的,靠子类自己的构造函数
1 #include<iostream>
2 using namespace std;
3 class student 4 { 5 public: 11 student() 12 { 15 cout<<"大家好。我是父类的构造函数"<<endl; 16 } 17 private: 18 int a; 20 };
21 class ss:public student 22 { 23 public:29 ss() 30 { 31 cout<<"大家好,我是子类的构造函数"<<endl; 32 } 33 34 }; 35 int main() 36 { 37 38 ss cc; 42 }
最终的运行结果:
然后 有参的 父类:
1 #include<iostream> 2 3 using namespace std; 4 5 class student 6 { 7 public: 8 student(int a,int b) 9 { 10 cout<<"大家好。我是父类的构造函数"<<endl; 11 } 12 private: 13 int a; 14 }; 15 16 17 class ss:public student 18 { 19 public: 20 ss(int a,int b):student(a,b) 21 { 22 cout<<"大家好,我是子类的构造函数"<<endl; 23 } 24 25 }; 26 int main() 27 { 28 29 ss cc(2,3); 30 }
3)派生类(子类) 基类(父类)
4)就是 你的子类 在写构造时
student3() 这样的子类构造 会默认调用父类的无参构造 (只要实例化子类,肯定会调用父类的构造函数,所以 要是有参构造,必须在子类的构造函数初始化列表给初始化)
但是 你可以写一个 无参的父类构造, 来 重载那个有参的,这样 就不用在你的子类构造函数初始化列表那里 给初始化 父类了
5)