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

一:构造函数

形式:派生类名::派生类名:基类名1(参数1),基类名2(参数2),……基类名n(参数n),数据成员1(参数1),数据成员2(参数2),……数据成员n(参数n){

各种操作的说明

}

执行过程:先执行基类的构造函数,再进行数据成员的赋值,最后执行函数体。

其中基类名和数据成员的顺序是由在派生类的定义中声明的顺序决定执行的顺序的,因此它们的顺序是任意的,但为了可读性,还是最好按顺序写。

如果基类只有默认构造函数,则基类名和参数表可以不用写出来。

二:复制构造函数

派生类的构造函数的形式用一个例子说明:

Derived::Derived(Derived&v):Base1(v){……}

细心的话会发现Base1的形参和Derived 的形参一样是c,这里用到了类型兼容规则。

三:析构函数

派生类的析构函数的形式和普通类的析构函数在形式上完全相同,它的执行顺序和派生类的构造函数的执行顺序刚好完全相反,即先执行函数体,再执行成员的析构函数,最后执行基类的析构函数。

以上就是我对于派生类的构造函数和析构函数的认识。

时间: 2024-12-26 11:50:45

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

C++:派生类的构造函数和析构函数的调用顺序

一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: ? 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. ? 改造基类函数:在派生类中声明一个或多个与其(某个)基类中的成员函数同名的成员函数,并将它(们)根据新的需求进行重写 ? 发展新的成员:在派生类中添加新的成员变量和成员函数,其中新添加的成员要求必须和基类中的成员不同名,并且应当保证新添加的成员会使派生类在功能上相比其基类有所发展 ? 重写派生类的构造函数和析构函数

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

C++基类和派生类的构造函数和析构函数的调用 1.调用顺序 当创建一个派生类的对象时,系统首先自动创建一个基类对象,也就是说,在调用派生类构造函数创建派生类对象之前,系统首先调用基类的构造函数创建基类对象.当派生类对象生命期结束时,首先调用派生类的析构函数,然后调用基类的析构函数. 所以,构造函数:基类->派生类:析构函数:派生类->基类. 示例: 1 #include<iostream> 2 using namespace std; 3 4 class A 5 { 6 publi

派生类的构造函数和析构函数和多继承中的二义性与虚函数

析构函数主要作用是对数据成员初始化. 1派生类的构造函数 派生类的构造函数定义的一般形式为: 派生类名::派生类名(基类所需形参,本类成员所需形参):基类1(基类1 参数表),基类2(基类2 参数表),···,基类n(基类n 参数表),对象成员1(对象1 参数表),对象成员2(对象2 参数表),···,对象成员m(对象m 参数表){ //本类基本类型数据成员初始化 } 如果使用基类无参构造函数,派生类构造函数形参表中不包含供给基类构造函数的参数.此时,系统会调用基类的默认构造函数.如果使用对象数

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] 不是所有的函数都能自动地从基类继承到派生类中的.构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么.所以,在整个层次中的所有的构造函数和析构函数都必须被调用,也就是说,构造函数和析构函数不能被继承. 另外,operator= 也不能被继承,因为它完成类似于构造函数的活动. 2.派生类的构函数被调用时,会先调用基类的其中一个构造函数,因为在派生类的构造函数中用了初始化表的方式调用了基类构造函数,默认不写时是调用了基类中

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

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

派生类的构造函数与析构函数的调用顺序

派生类构造函数各部分的执行次序为1.调用基类的构造函数,按他们在派生类定义的先后顺序,顺序调用.2.调用成员对象的构造函数,按他们在类定义中声明的先后顺序,顺序调用3.派生类的构造函数体中的操作 在派生类构造函数中,只要基类不是使用缺省构造函数,都要显式给出基类名和参数表如果基类没有定义构造函数,则派生类也可以不定义,全部采用系统给定的缺省构造函数.如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数. //Test1.h #include<iostream> using names