构造函数与析构函数不能被继承小时候挺菜

不是所有的函数都能自动地从基类继承到派生类中的。

构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。

所以,在整个层次中的所有的构造函数和析构函数都必须被调用,也就是说,构造函数和析构函数不能被继承。

子类的构造函数会显示的调用父类的构造函数或隐式的调用父类的默认的构造函数进行父类部分的初始化。

析构函数也一样。它们都是每个类都有的东西,如果能被继承,那就没有办法初始化了。

此外,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。

构造原则如下:

1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。

2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。

3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。

4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。

5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

6. 如果子类调用父类带参数的构造方法,需要用初始化父类成员对象的方式,比如:

在fish类的构造函数后,加一个冒号(:),然后加上父类的带参数的构造函数。这样,在子类的构造函数被调用时,系统就会去调用父类的带参数的构造函数去构造对象。这种初始化方式,还常用来对类中的常量(const)成员进行初始化,如下面的代码所示:

再来看一段代码:

派生类构造函数一般形式为

派生类构造函数名(总参数表):基类构造函数名(参数表)

{派生类中新增数据成员初始化语句}

冒号“:”前面部分是派生类构造函数的主干,他和以前介绍过的构造函数的形式相同,但它的总参数表中包括基类构造函数所需的参数和对派生类新增的数据成员初始化所需的参数。冒号“:”后面部分是要调用的基类构造函数及其参数。

从上面列出的派生类Student1构造函数首行中可以看到,派生类构造函数名(Student1)后面括号内的参数表中包括参数的类型和参数名(如int n) ,

而基类构造函数名后面括号内的参数表列只有参数名而不包括参数类型(如n,num,s),因为在这里不是定义基类构造函数,而是调用基类构造函数,因此这些参数是实参而不是形参。

它们可以是常量、全局变量和派生类构造参数总参数表中的参数。

从上面列出的派生类Student1构造函数中可以看到:调用基类构造函数Student时给出3个参数(n,nam,s),这是和定义基类构造函数时指定的参数相匹配的。

派生类构造函数Student1有5个参数,其中前3个是用来传递给基类构造函数,后面两个(a和ad)是用来对派生类所增加的数据成员初始化的。

2.派生类的析构函数

析构函数的作用是在对象撤销之前,进行必要的清理工作。

在派生时,派生类是不能继承基类的析构函数的,也需要通过派生类的析构函数去调用基类的析构函数。在派生类中可以根据需要定义自己的析构函数,用来地派生类中所增加的成员进行清理工作。基类的清理工作任然由基类的析构函数负责。

调用的顺序与构造函数正好相反:先执行派生类自己的析构函数,对派生类新增加的成员进行清理,然后调用子对象的析构函数,对子对象进行清理,最后调用基类的析构函数,对基类进行清理。

THE END
0.析构函数(C++)|MicrosoftLearn显式定义析构函数、复制构造函数或复制赋值运算符可防止对移动构造函数和移动赋值运算符进行隐式定义。 在这种情况下,如果复制成本高昂,未能提供移动操作通常意味着错过了优化的机会。 另请参阅 复制构造函数和复制赋值运算符 移动构造函数和移动赋值运算符 本文内容 声明析构函数 使用构造函数 破坏的顺序 显式析构函数调用 可靠编程 另请参阅 此页面是否有帮助? 是否jvzquC41fqit0vnetqyph}3eqo5{j6hp1evq1lur1fktv{zevqxt/lur
1.深入理解构造和析构函数为什么要引入构造函数和析构函数构造函数和析构函数是当你刚接触C++的时候就会碰到的两个概念,也是C++语法中较难掌握的两个概念。但是它们又是学习C++必须掌握的,可以说没有理解构造和析构函数,你的C++就还没有入门。 本文拟对构造函数、析构函数进行系统的介绍,使得那些对这两个概念有初步认识的人能有更进一步的理解。 jvzquC41dnuh0lxfp0tfv8feu9741jwvkerf1mjvckrt1@>825923
2.C++析构函数详解设计一个类时,如何写析构函数? 析构函数如果我们不写的话,C++会帮我们自动的合成一个,就是说:C++会自动的帮我们写一个析构函数。很多时候,自动生成的析构函数可以很好的工作,但是一些重要的事迹,就必须我们自己去写析构函数。 析构函数和构造函数是一对。构造函数用于创建对象,而析构函数是用来撤销对象。简单jvzquC41dnuh0lxfp0tfv8lkvj{ca<:382<328ftvkimg8igvcomu8:482845;
3.C++构造函数和析构函数(非常详细)为了完成对象的创建和销毁,C++ 中的类提供了两个特殊的函数,分别是构造函数(Constructor)和析构函数(Destructor),它们会在对象创建和销毁时会被自动调用。 C++构造函数 构造函数在对象创建时自动调用,用于完成对象的初始化工作。构造函数的使用确保了对象在被使用之前已经具备了合理的初始状态。例如,它可以为对象的属性jvzquC41e0hjcwhjgpm/pny1xkkx1~ydjm650qyon
4.C++学习——构造函数析构函数本文详细介绍了C++中构造函数和析构函数的作用、定义、使用场景,包括初始化列表、内存管理以及执行时机。构造函数用于对象创建时初始化成员变量,析构函数负责对象销毁时的清理工作。 以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 一、构造函数的详解 jvzquC41dnuh0lxfp0tfv8tssJ{Uw:7567<8:8ftvkimg8igvcomu8655:772<6
5.C++构造函数和析构函数c++构造函数和析构函数C++|构造函数和析构函数 一、构造函数 构造函数是一种特殊的成员函数,主要用于创建对象时对对象进行初始化操作,即专门用于构造新对象,并赋值对象的成员数据。 在C++ 里,构造函数的名称和类名相同,并且没有返回类型。当创建类的对象时,构造函数会自动被调用。 构造函数可以在类内也可在类外定义。 构造函数在类内的定义格式 jvzquC41dnuh0lxfp0tfv8r2a9:43@7281gsvrhng1jfvjnnu1758<5483>
6.C++超详细讲解构造函数与析构函数的用法及实现C语言上一节解决了类与对象封装的问题,这一节就是对象的初始化和清理的构造函数与析构函数的内容了;对象的初始化和清理也是两个非常重要的安全问题:一个对象或者变量没有初始状态,对其使用后果是未知,同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题;c++利用了构造函数和析构函数解决上述问题,这两个jvzquC41yy}/lk:30pku1jwvkerf1;9;766/j}r
7.C++:构造函数和析构函数空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 这篇文章介绍的是构造函数和析构函数。 一,构造函数 在C语言中,我们平时在建立一个栈,或是写一些函数时,可能有时偶尔会忘记调用初始化jvzquC41dnuh0lxfp0tfv87523e89B5266:0c{ykenk0fnyckny03<=2;5778
8.c++学习——构造函数与析构函数构造函数和析构函数在c++中有2个特殊的函数:构造函数和析构函数,它们分别对类对象进行初始化和清理工作。 1. 构造函数 构造函数,与类名相同,当创建类对象时会自动调用该函数。如果创建类对象时没有手动创建构造函数,系统会自动创建一个默认的构造函数,这个默认的构造函数函数体是空的,无任何功能。 jvzquC41dnuh0lxfp0tfv8hy32817>7561gsvrhng1jfvjnnu1<9;=;8;8
9.C#构造函数和析构函数拭不去の泪痕1、构造函数和析构函数是类中比较特殊的两种成员函数,分别用来对对象进行初始化和回收对象资源。 构造函数———对象初始化!!! 析构函数———回收对象资源!! 2、对象的生命周期从构造函数开始,从析构函数结束。如果一个类含有构造函数,在实例化该类的对象时就会被调用。如果含有析构函数,则会在销毁对象时调用。jvzquC41yy}/ewgnqiy/exr1uenbpp}kcpm0r8633783;A3jvor
10.构造函数与析构函数基础,以及使用过程中的注意事项析构函数使用而C++利用了C++利用了构造函数和析构函数解决上述两个问题,这两个函数将会被编译器自动调用; 当然如果我们不提供构造和析构,编译器会提供编译器提供的构造函数与析构函数是空实现。 构造函数的意义:在创建对象时,为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。 析构函数的意义:作用域对象小回迁系统自动调用,执行清理工作。 jvzquC41dnuh0lxfp0tfv8^N[yp0c{ykenk0fnyckny03;<;92=39
11.析构函数拷贝构造函数c++拷贝构造和析构函数本文围绕C++的构造函数和析构函数展开。构造函数用于对象初始化,可带参数、重载,有默认构造函数;析构函数在对象生命周期结束时进行清理工作。还介绍了局部、静态、全局对象的初始化,缺省构造函数,构造函数与new运算符的交互,以及拷贝构造函数等内容。 1.构造函数: jvzquC41dnuh0lxfp0tfv8r2a7?29=55;1gsvrhng1jfvjnnu1745?84;:9
12.C++最通俗易懂的构造和析构函数讲解c++构造与析构函数讲解本文深入探讨了构造函数和析构函数的概念,包括它们的定义、语法、分类及调用方式。通过具体案例,详细解析了不同类型的构造函数,如无参、有参和拷贝构造函数,以及析构函数在对象生命周期结束时的作用。 构造和析构函数 构造和析构函数的概述 构造和析构函数定义 jvzquC41dnuh0lxfp0tfv8|gkzooa=84::8138ftvkimg8igvcomu8626;;26<:
13.C++的构造函数与析构函数调用顺序饔踣晦构造函数与析构函数的基本概念 ### 构造函数与析构函数的基本概念 - 构造函数的定义与作用:初始化对象成员,分配资源。 - 析构函数的定义与作用:释放资源,清理对象。 单个类中的调用顺序 ### 单个类中的调用顺序 - 构造函数调用时机:对象创建时自动调用,顺序与声明顺序一致。 jvzquC41dnuh0lxfp0tfv8ghclysaB521cxuklqg1fkucrqu13;5:A:478