C++学习之路派生类的构造函数

Posted CRAZY_HENRY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习之路派生类的构造函数相关的知识,希望对你有一定的参考价值。

一、简单派生类的构造函数:

1.所谓简单派生类,就是指派生类中不包含基类的内嵌对象的派生类。

 

2.一般来说,这样的派生类的构造函数的形式是:

 student( int i, string nam, int sid) : person( i, nam) { stuid = sid; }

  person(是基类的初始化列表

 

3.构造函数的初始化列表的使用

  3.1所有的构造函数都可以拿参数的初始化表来构造完全属于自己的数据成员,比如:

 1 #include <iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     A(int a) :dataA(a){ cout << "调用A的构造函数" << endl; }
 7 private:
 8     int dataA;
 9 };
10 void main()
11 {
12     A a(2);
13 }

  

  3.2但是一定要注意派生类在构造基类成分的时候不能直接使用参数的初始化表

    B(int b, int a) :dataA(a), dataB(b){ cout << "调用B的构造函数" << endl; }//错误!!

   

  3.3也不能把其他语句如输出语句写出来:

B(int b, int a) :A(a), dataB(b), cout << "调用B的构造函数" << endl{}//错误!!!!

  

  3.4同时调用基类的构造函数数据成员的初始化表是可以的

 1 #include <iostream>
 2 using namespace std;
 3 class A
 4 {
 5 public:
 6     A(int a) :dataA(a){ cout << "调用A的构造函数" << endl; }
 7 private:
 8     int dataA;
 9 };
10 class B:public A
11 {
12     int dataB;
13 public:
14     B(int b, int a) :A(a), dataB(b) { cout << "调用B的构造函数" << endl; }
15 };
16 void main()
17 {
18     B b(2, 5);
19 }
14     B(int b, int a) :A(a), dataB(b) { cout << "调用B的构造函数" << endl; }

  这一行代码就是这样,dataB(b)提到初始化列表中去写,A(a)是基类的构造函数,这样显得很简洁。

  而且代码的调用顺序和dataB(b)的位置无关,都是先初始化A(a),然后初始化dataB,最后执行函数体。

  

  3.5然而这样写是不可以的:

  14 B(int b, int a) :A(a) {dataB(b);cout << "调用B的构造函数" << endl; }//错误!!

B(int b, int a) :A(a), dataB = b { cout << "调用B的构造函数" << endl; }//错误!!

  这样才是正确的写法:

B(int b, int a) :A(a){ dataB=b; cout << "调用B的构造函数" << endl; }

  

 

以上是关于C++学习之路派生类的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++学习之路派生类的构造函数

派生类的 C++ 构造函数,其中基类包含类成员

C++基类和派生类的构造函数

C++基类和派生类的构造函数

C++入门派生类和基类的构造/析构函数关系

在其派生类C++的构造函数中调用基类的构造函数[重复]