【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; }

  

时间: 03-01

【C++学习之路】派生类的构造函数(一)的相关文章

c++学习笔记5,多重继承中派生类的构造函数与析构函数的调用顺序(二)

现在来测试一下在多重继承,虚继承,MI继承中虚继承中构造函数的调用情况. 先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; }

c++学习笔记4,派生类的构造函数与析构函数的调用顺序(一)

測试源代码: //測试派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base() { cout<<"base destroyed!"<<endl; } };

对C++中派生类的构造函数和析构函数的认识

一:构造函数 形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),--基类名n(参数n),数据成员1(参数1),数据成员2(参数2),--数据成员n(参数n){ 各种操作的说明 } 执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体. 其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写. 如果基类只有默认构造函数,则基类名和参数表可以不用写出来. 二:复制构造函数 派生类的构造函数的形

C++构造函数 &amp; 拷贝构造函数 &amp; 派生类的构造函数 &amp; 虚继承的构造函数

构造函数 ,是一种特殊的方法 .主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 .特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载.(摘自百度百科构造函数). 一.最基本的构造函数 1 class Base 2 { 3 public: 4 Base(int var) : m_Var(var) 5 { 6 } 7 private: 8 int m_Var; 9 }; 以上构造函数的执行过程:

C++:派生类的构造函数和析构函数

4.2 派生类的构造函数和析构函数4.2.1 派生类构造函数和析构函数的执行顺序 通常情况下,当创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类的派生类的析构函数,随后再执行基类的析构函数. //例4.5 派生类的构造函数和析构函的执行顺序 #include<iostream> using namespace std; class Base{ //声明基类Base public: Base() { cout<<"Co

sdut 5-2 派生类的构造函数

5-2 派生类的构造函数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 通过本题目的练习可以掌握派生类构造函数的定义和使用方法. 要求定义一个基类Person,它有3个protected的数据成员:姓名name(char *类型).性别 sex(char类型).年龄age(int类型):一个构造函数用于对数据成员初始化:有一个成员函数show()用于输出数据成员的信息. 创建Person类的公有派生类Employee,增加两

派生类的构造函数

派生类对象包含基类对象 执行派生类构造函数之前,先执行基类的构造函数 派生类交代基类初始化,具体形式: 构造函数名(形参表):基类名(基类构造函数实参表) { } 析构函数先调用派生类的构造函数,再调用基类的析构函数. 创建派生类的对象时,执行派生类的构造函数之前: 调用基类的构造函数------初始化派生类对象中从基类继承的成员 调用成员对象类的构造函数------初始化派生类对象中的成员对象 执行完派生类的析构函数后: 调用成员对象类的析构函数 调用基类的析构函数 析构函数的调用顺序和构造函

【C++学习之路】派生类的构造函数(二)

二.有内嵌对象的派生类 1.一般来说,我们会这样定义构造函数 student( int i, string nam, int pid, string pnam, int sid) : person( i, nam),parent(pid,pnam){ stuid = sid; } person是基类的构造函数,parent是该派生类内嵌的person子对象   2.具体例子 1 #include <iostream> 2 using namespace std; 3 class A 4 { 5

c++中派生类的构造函数

Son(char *n, int *b, int g, char *add, int *gir, double s) : Father(n, b, g) 派生类构造函数名(总参数列表):基类构造函数名(参数列表) {派生类中新增数据成员初始化语句} 冒号前面的部分是派生类构造函数的主干,基类的构造函数想同,但它的总参数列表中包括基类构造函数所需要的参数和对派生类新增的数据成员初始化所需参数 冒号后面的部分是要调用的基类构造函数及其参数