构造函数与派生类构造函数初始化

构造函数

首先我们需要知道,到底什么叫做构造函数?它的作用是什么呢?

构造函数是类中一种特殊的函数,它不具备返回值,并且函数名称必须与类名一致,当类创建对象的时候自动调用。

需要强调的是,当你创建一个类,系统会自动为你生成隐式的无参构造函数和析构函数

构造函数一般用作初始化数据成员

构造函数与其他函数的特性具有共同之处,显著的相同点是它可以重载,接下来,用代码来简单演示一下。

  1. 1 #include <iostream>
  2. 2 using namespace std;
  3. 3 class Time{
  4. 4 private:
  5. 5 int h;
  6. 6 int m;
  7. 7 int s;
  8. 8 public:
  9. 9 Time(){
  10. 10 h = 0;
  11. 11 m = 0;
  12. 12 s = 0;
  13. 13 }
  14. 14 Time(int h,int m,int s){
  15. 15 this->h = h;
  16. 16 this->m = m;
  17. 17 this->s = s;
  18. 18 }
  19. 19 /* 效果同上,初始化方式的多样化
  20. 20 Time(int h,int m,int s):h(h),m(m),s(s){}
  21. 21 */
  22. 22 void display(){
  23. 23 cout<<h<<":"<<m<<":"<<s<<endl;
  24. 24 }
  25. 25
  26. 26 }
  27. 27 int main(){
  28. 28 Time t(10,29,25); //调用有参构造函数
  29. 29 t.display();
  30. 30 return 0;
  31. 31 }

注意调用方式以及构造函数初始化的多样化。

派生类构造函数初始化

派生类继承来自基类,除了自己的成员,还包括基类的成员,当基类和派生类具有同样个数的含参构造函数,创建对象时,它的值是赋给的基类还是派生类就出现了歧义,以下举个例子:

  1. 1 #include <iostream>
  2. 2 using namespace std;
  3. 3 class Time{
  4. 4 private:
  5. 5 int h;
  6. 6 int m;
  7. 7 int s;
  8. 8 public:
  9. 9 Time(){
  10. 10 h = 0;
  11. 11 m = 0;
  12. 12 s = 0;
  13. 13 }
  14. 14 Time(int h,int m,int s){
  15. 15 this->h = h;
  16. 16 this->m = m;
  17. 17 this->s = s;
  18. 18 }
  19. 19 /* 效果同上,初始化方式的多样化
  20. 20 Time(int h,int m,int s):h(h),m(m),s(s){}
  21. 21 */
  22. 22 23 24 25
  23. 26 }
  24. 27 class Date{
  25. 28 private:
  26. 29 int year;
  27. 30 int month;
  28. 31 int day;
  29. 32 public:
  30. 33 Date(){
  31. 34 year = 0;
  32. 35 month = 0;
  33. 36 day = 0;
  34. 37 }
  35. 38 Date(int year,int month,int day){
  36. 39 this->year = year;
  37. 40 this->month = month;
  38. 41 this->day = day;
  39. 42 }
  40. 43 void display(){
  41. 44 cout<<year<<" "<<month<<<<" "<<day<<endl;
  42.          cout<<h<<":"<<m<<":"<<s<<endl;
  43. 45 }
  44. 46 }
  45. 47 int main(){
  46. 48 Date d(1998,11,20); //调用有参构造函数,但是,这三个参数到底是给基类还是派生类呢?
  47. 49 d.display();
  48. 50 return 0;
  49. 51 }

 这是一个歧义的问题,那么该如何解决呢?

 想要通过派生类的构造函数对基类构造函数进行初始化,需要这样操作,如下:

  1. 1 Date(int year,int month,int day,int h,int m,int s):Time(h,m,s){
  2. 2 this->year = year;
  3. 3 this->month = month;
  4. 4 this->day = day;
  5. 5 }

那么,派生类构造函数对基类构造函数进行初始化的操作,您看懂了吗?

文章如有不足之处,请指出,一定加以改正,谢谢

点赞(0)
 

7 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论