首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C++中,调用派生构造函数是否创建了基对象?

在C++中,调用派生构造函数不会创建基对象。在派生类的构造函数中,只能对派生类的成员进行初始化,无法对基类的成员进行初始化。基类的构造函数需要在派生类的构造函数中显式调用以完成基类成员的初始化。派生类构造函数在执行时会自动调用基类的默认构造函数,如果基类没有默认构造函数,那么在派生类构造函数中需要显式调用基类的其他构造函数来完成基类成员的初始化。在派生类的构造函数中,先执行基类的构造函数,然后执行派生类的构造函数体。

在C++中,调用派生构造函数不会创建基对象的原因是,派生类的对象包含基类的对象,而基类的对象需要通过构造函数进行初始化。由于派生类的构造函数只能对派生类的成员进行初始化,无法初始化基类的成员,所以在调用派生构造函数时,并没有创建基类的对象。

需要注意的是,在派生类的构造函数中,如果没有显式调用基类的构造函数,那么编译器会自动生成一个默认的基类构造函数的调用,来完成基类对象的初始化。但是,如果基类没有默认构造函数,或者需要调用基类的其他构造函数进行初始化,就必须在派生类的构造函数中显式调用基类的构造函数来完成基类对象的初始化。

对于这个问题,腾讯云没有提供特定的产品或者产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++构造函数初始化列表 ⑤ ( 匿名对象 生命周期 | 构造函数 不能调用 构造函数 )

初始化 , 所有的构造函数都要进行初始化操作 ; 构造函数 不能调用 构造函数 ; 一、匿名对象 生命周期 1、匿名对象 生命周期 说明 调用 类名(构造函数参数) 创建的是 匿名对象 ; 匿名对象...; 2、代码示例 - 匿名对象 生命周期 下面的代码 , fun 函数 , 调用 Student(18, 180) 代码 , 创建 Student 类型的匿名对象 , 匿名对象的生命周期 只存在于...二、构造函数 调用 构造函数 ---- 1、构造函数 不能调用 构造函数 构造函数 调用 构造函数 是危险行为 ; 构造函数 调用 构造函数 , 并不会为本对象进行初始化操作 ; 构造函数调用方式..., 天然就会创建一个 匿名对象 , 如果 没有变量 接收 这个 匿名对象 , 该匿名对象 本行表达式执行完毕后 , 就会被销毁 ; 2、代码示例 - 构造函数调用构造函数 下面的代码 , 先定义...执行 Student 的构造函数" << endl; } 然后 , 无参的 构造函数 , 调用 有参构造函数 ; // 构造函数 调用 构造函数 是危险行为 Student() { /

20920

《Effective C++》读书笔记(二):构造析构赋值运算(条款05~条款12)

() { Corgi co; return 0; } 分析代码: 代码,用派生类创建了一个派生类的对象构造函数调用的时候,会先去构造类的成分,然后才会去构造派生类的从成分,这就意味着,会先去调用类的构造函数...类的构造函数最后会去执行count_Dog函数,问题就出现在这里,上面说了,构造函数构造期间,类的virtual函数不会下降到派生,也就是说即使我们创建的对象属于派生类的,但是调用类的构造函数期间...这种现象根本的原因在于:派生对象调用类的构造函数期间,由于是类先构造,那么在此期间,此时的对象被视为是类的对象,并且派生类的成分并没有初始化,因此C++的做法是视它们不存在,这样才能保证安全。...,通过调用了createdogs函数,创建了类Dog的匿名对象,也就是调用类的构造函数,然后进入了count_Dog函数,最后再次去调用派生类的构造函数的主体!...做法就是派生的拷贝构造函数和赋值重载调用类的拷贝构造和赋值函数

36310
  • C++系列笔记(五)

    为什么需要虚构函数 上面的代码如果加入析构函数释放内存,对于使用new自由储存区实例化的派生对象,如果将其赋值给类指针,并通过该指针调用delete,将不会调用派生类的析构函数,这可能导致资源未释放...new自由存储区实例化的,还是以局部变量的方式实例化的,构造函数和析构函数调用顺序都相同。...抽象类和纯虚函数 不能实例化的类被称为抽象类,这样的类只有一个用途,那就是从它派生出其他类。 C++,要创建抽象类,可声明纯虚函数。...注意:C++关键字virtual的含义随上下文而异(我想这样做的目的很可能是为了省事),对其含义总结如下: 函数声明,virtual意味着当类指针指向派生对象时,通过它可调用派生类的相应函数。...而构造函数只能创建固定类型的对象,不具备多态性,因此C++不允许使用虚复制构造函数

    68530

    《挑战30天C++入门极限》图例实解:C++类的继承特性

    图例实解:C++类的继承特性   整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需新类增加原有类没有的成分...一旦成功定义派生类,那么派生类就可以操作类的所有数据成员包括是受保护型的,上面代码的a.EditSC(100,4); 就是例子,甚至我们可以构造派生对象的时候初始化他们,但我们是不推荐这么做的...由上面的例程我们知道Car类是Vehicle类的派生类(子类),c++规定,创建派生对象的时候首先调用类的构造函数初始化类成员,随后才调用派生构造函数。   ...,但按照c++的规定首先应该调用构造函数构造成员,在这里类成员的构造是通过Vehicle(speed,total),来实现的。   ...许多书籍对于派生对象的复制这一知识点多是空缺的,为了教程的易读性,我还是决定说一下复制过程容易出错的地方,Car b=a;是派生对象复制的语句,通过前面教程的学习我们我们知道,类对象的复制是通过拷贝构造函数来完成的

    40420

    十、继承

    注意访问权限:继承时,要注意类成员的访问权限,确保派生类能够访问到需要的成员。 构造函数和析构函数派生类的构造函数需要调用类的构造函数来初始化继承来的成员。...派生构造函数,可以通过成员初始化列表显式地调用类的构造函数派生类可以覆盖(Override)类的虚函数,以提供特定于派生类的实现。这是多态性的基础之一。...了解这些概念对于编写清晰、可维护的C++代码非常重要。 继承的静态成员,构造函数与析构函数 C++,父子类(派生类与类)之间的静态成员、构造函数和析构函数的行为有其特定的规则和特性。...构造函数 构造函数是特殊的成员函数,用于在对象创建时初始化对象类的构造函数创建派生对象时,首先会调用类的构造函数(如果有的话)。...析构函数 析构函数也是特殊的成员函数,用于在对象销毁前进行清理工作。 析构函数调用顺序:与构造函数调用顺序相反,当派生对象被销毁时,首先会调用派生类的析构函数,然后是类的析构函数

    7110

    轻松搞定面试的“虚”

    是否每个类的析构函数都要设置成virtual?是否可以将析构函数设置成内联函数。 这样做是为了当用一个类的指针删除一个派生类的对象时,派生类的析构函数会被调用。...(动态绑定是根据对象的动态类型而不是函数名,调用构造函数之前,这个对象根本就不存在,它怎么动态绑定?) 6.是否可以析构函数或者构造函数调用函数构造函数不要调用函数。...构造的时候,虚函数是非虚,不会走到派生,既是采用的静态绑定。...显然的是:当我们构造一个子类的对象时,先调用类的构造函数构造子类类部分,子类还没有构造,还没有初始化,如果在类的构造调用函数,如果可以的话就是调用一个还没有被初始化的对象,那是很危险的,所以...C++是不可以构造父类对象部分的时候调用子类的虚函数实现。

    67620

    c++类和继承面试点25连问

    ,先调用类的构造函数,再调用派生类的构造函数派生对象销毁时,先调用派生类的析构函数,再调用类的析构函数。...4. c++多态有什么作用 个人理解,其实就是实现了接口的重用,同样的接口,派生类与类不同的实现。 5....运行时多态简单来讲就是:使用类指针或者引用指向一个派生对象非虚继承的情况下,派生类直接继承类的虚表指针,然后使用派生类的虚函数去覆盖类的虚函数,这样派生对象通过虚表指针访问到的虚函数就是派生类的虚函数了...防止类对象被拷贝和赋值,无非是禁止类对象调用拷贝构造函数和赋值函数c++11以后有三种方法: 拷贝构造函数和赋值函数定义为私有的; 私有继承类; 构造函数后面加=delete,这是c++11新增的用法...由成员变量和是否有虚函数决定,如果类中有虚函数,那就在所有成员变量的基础上加上一个虚函数指针的大小,64位机器,虚函数指针为8个字节,注意计算类大小的时候要考虑字节对齐的问题。

    98210

    C++构造函数分类 ② ( 不同的内存创建类的实例对象 | 栈内存创建实例对象 | new 关键字创建对象 )

    一、不同的内存创建类的实例对象 1、栈内存创建实例对象 在上一篇博客 【C++构造函数分类 ① ( 构造函数分类简介 | 无参构造函数 | 有参构造函数 | 拷贝构造函数 | 代码示例 - 三种类型构造函数定义与调用...) , 介绍了 三种类型的 构造函数 , 并在 main 函数 分别 调用了这 3 种构造函数 ; 下面的调用方式 , 调用一个构造函数 , 创建 Student 类实例对象 , 最终将实例对象赋值给了...栈内存的 变量 Student s1 ; 这些都是 栈内存 创建 类的实例对象 的情况 ; // 调用无参构造函数 Student s1; // 打印 Student s1 实例对象值..., 会自动将栈内存的实例对象销毁 ; 栈内存 调用 构造函数 创建的 实例对象 , 不需要关注其内存占用 ; 2、堆内存创建实例对象 栈内存 声明 类 的 实例对象 方式是 : 该 s1...; Student* s2; C++ 语言中 , 可以使用 new 关键字 , 调用有参构造函数 , 创建类的 实例对象 ; 在下面的 C++ 代码 , 声明并定义了 MyClass 类 , 该类定义了一个有参构造函数

    17420

    C++和Java中继承的比较

    然而, C++ ,有一个类森林;当我们创建一个不从另一个继承的类时,我们森林中创建了一棵新树。 以下 Java 示例显示 Test 类自动继承自 Object 类。 ...因此,我们不能改变 Java 类成员的保护级别,如果某个数据成员是公共的或受保护的,那么它在派生仍然是公共的或受保护的。与 C++ 一样,类的私有成员派生不可访问。 ...8) C++,会自动调用父类的默认构造函数,但是如果我们要调用父类的参数化构造函数,就必须使用Initializer list。...和C++一样,Java中会自动调用父类的默认构造函数,但是如果我们要调用参数化构造函数,那么就必须使用super来调用构造函数。请参阅以下 Java 示例。...派生构造函数调用

    60110

    后台开发:核心技术与应用实践 -- C++

    同时,无论哪一种继承方式,派生是不能访问类的私有 成员的,私有成员只能被本类的成员函数所访问,毕竟派生类与类不是同一个类 构造派生类的对象时,必须对类数据成员、新增数据成员和成员对象的数据成员进行初始化...派生构造函数必须对这3类成员进行初始化,其执行顺序是这样的: 先调用构造函数; 再调用对象构造函数; 最后调用派生类的构造函数体 当派生类有多个类时,处于同一层次的各个类的构造函数调用顺序取决于定义派生类时声明的顺序...执行派生类的析构函数时,系统会自动调用类的析构函数和子对象的析构函数,对类和子对象进行清理。...虚函数实现了同一类族不同类的对象可以对同一函数调用作出不同的响应的动态多态性。 C++规定,当某个成员函数被声明为虚函数后,其派生的同名函数都自动成为虚函数。...C++,,构造函数不能声明为虚函数,这是因为编译器构造对象时,必须知道确切类型,才能正确地生成对象;其次,构造函数执行之前,对像并不存在,无法使用指向此对像的指针来调用构造函数

    1.3K10

    当类构造与析构的时候...

    构造/析构函数的执行顺序 继承机制对象之间如何转换? C++类成员的访问权限和继承权限问题 如何禁止程序自动生成拷贝构造函数?...C++struct和class的区别 什么时候会调用默认构造函数 1、当不使用任何初始值定义一个类的非静态变量时,会调用该类的默认构造函数。...赋值运算符是执行某种运算,将一个对象的值复制给另一个对象(已经存在的)。调用的是拷贝构造函数还是赋值运算符,主要是看是否有新的对象实例产生。...析构的时候,如果有类,且类的析构函数是虚函数,则先调用自己的构造函数,再调用类的构造函数。 如果类的析构函数不是虚函数,则调用类的析构函数。 ---- 继承机制对象之间如何转换?...三种继承方式 ① 若继承方式是public,类成员派生的访问权限保持不变,也就是说,的成员访问权限,派生仍然保持原来的访问权限; ② 若继承方式是private,类所有成员派生的访问权限都会变为私有

    63920

    解锁C++继承的奥秘:从基础到精妙实践(上)

    构造函数和析构函数类的构造函数不会被继承,但可以通过子类的构造函数显式调用。析构函数子类对象销毁时会自动调用。...2.3 对象赋值的限制 C++,不能直接将派生对象赋值给对象(非指针或引用的对象)。如果这样做,类只能接收到派生类的类部分,派生类的其他成员会被“丢弃”。...3.4 构造函数与析构函数的作用域 构造函数派生类无法直接调用类的构造函数,但可以派生类的构造函数通过初始化列表显式调用构造函数。...如果类有默认构造函数派生类的默认构造函数会隐式调用类的默认构造函数。 如果类没有默认构造函数,你必须在派生类的构造函数显式调用类的其他构造函数。...4.2 拷贝构造函数 派生类的默认拷贝构造函数是编译器生成的,当派生对象被拷贝时,它会首先调用类的拷贝构造函数,然后依次拷贝派生的成员。拷贝构造函数实现的是浅拷贝,即成员逐个复制。

    10810

    C++实现不能被继承的类——终结类

    解决方法 基本思路:由于任何派生类的对象创建的时候,都必需派生类的构造函数调用父类的构造函数。所以,只要类的构造函数子类无法被访问,那么就阻止了该类被继承,实现终结类。...间接实例化方法是:类定义一个公有的静态成员函数,由这个函数来完成对象的初始化工作。...) { if(m_pInstance == NULL) //判断是否第一次调用 m_pInstance = new CSingleton()...一个类如果被虚拟继承,那么创建它的孙子类的对象时,该类的构造函数需要单独被调用。此时,如果该类的构造函数在孙子类的构造函数无法访问,那么就实现了类的子类不能被继承。...,当FinalClassChild试图继承FinalClass的时候,FinalClassChild的构造函数需要调用FinalParent的构造函数,而FinalParent的构造函数FinalClass

    1.8K30

    python3 入门 (四) 类与继承

    Python 类 Python的类提供了面向对象编程的所有基本功能:类的继承机制允许多个类,派生类可以覆盖的任何方法,方法可以调用的同名方法。 对象可以包含任意数量和类型的数据。...python类与c++类相似,提供了类的封装,继承、多继承,构造函数、析构函数。...__div__除运算 __mod__求余运算 __pow__称方 __init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法,与c++...python中继承的一些特点: 1:继承类的构造(__init__()方法)不会被自动调用,它需要在其派生类的构造亲自专门调用。使用super()....区别于调用普通函数时并不需要带上self参数 3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到逐个查找。

    921120

    C++篇】继承之韵:解构编程奥义,感悟面向对象的至高法则

    2.2 类与派生对象的赋值转换 C++类和派生对象的赋值转换是一个比较常见的操作场景。通常情况下,派生对象可以赋值给对象,或者通过类的指针或引用来操作派生对象。...并且函数重载说的是同一作用域,而这里类和派生类时两个作用域 3.2 派生类的默认成员函数 C++ ,当我们不显式定义类的构造函数、拷贝构造函数、赋值运算符和析构函数时,编译器会自动为我们生成这些函数...3.2.1 构造函数调用顺序 派生对象构造过程类的构造函数会优先于派生类的构造函数调用。如果类没有默认构造函数,则派生类的构造函数必须在初始化列表显式调用类的构造函数。...这种调用顺序确保类的成员派生构造之前就已经被正确初始化。 3.2.2 拷贝构造函数与赋值运算符的调用派生对象被拷贝时,类的拷贝构造函数会先被调用,然后才是派生类的拷贝构造函数。...拷贝构造和赋值操作过程类部分总是优先于派生类部分进行初始化或赋值操作。为了保证派生对象的完整性,派生类的拷贝构造函数和赋值运算符必须调用类的相应函数,确保类成员正确处理。

    9310

    C++终结类

    由于任何派生类的对象创建的时候,都必需派生类的构造函数调用父类的构造函数。所以,只要类的构造函数子类无法被访问,那么就阻止了该类被继承,实现终结类。...间接实例化方法是:类定义一个公有的静态成员函数,由这个函数来完成对象的初始化工作。...) { if(m_pInstance == NULL) //判断是否第一次调用 m_pInstance = new CSingleton()...一个类如果被虚拟继承,那么创建它的孙子类的对象时,该类的构造函数需要单独被调用。此时,如果该类的构造函数在孙子类的构造函数无法访问,那么就实现了类的子类不能被继承。...,当FinalClassChild试图继承FinalClass的时候,FinalClassChild的构造函数需要调用FinalParent的构造函数,而FinalParent的构造函数FinalClass

    51920

    C++一分钟之-继承与多态概念

    常见问题与易错点访问权限:派生类可能无法访问的私有成员,导致误解。记住,只有公有和保护成员才能被继承。构造函数与析构函数类的构造函数和析构函数不会自动被调用,需要显式调用或使用初始化列表。...派生构造函数,使用初始化列表显式调用类的构造函数。多重继承时考虑菱形问题,适时使用virtual关键字。...C++,主要通过虚函数实现多态,使得派生类可以根据自身情况重写的虚函数。...常见问题与易错点忘记使用virtual关键字:如果函数没有声明为虚函数派生类即使重写了该函数,也无法实现动态绑定。切片问题:当将派生对象赋值给对象时,派生类特有的部分会被“切片”掉。...空指针调用函数:对空指针调用函数会导致运行时错误。如何避免确保需要被重写的函数声明为虚函数。使用引用或指针处理类和派生类的关系,避免切片问题。调用函数前检查指针是否为空。

    12210

    C++之面向对象的三个基本特征

    静态多态性与动态多态性 静态多态性 通过函数重载实现的。缺乏灵活。 动态多态性是通过虚函数实现的。  C++函数:就是类声明函数是虚拟的,并不是实际存在的函数,然后派生才正式定义此函数。...如果在派生没有对类的虚函数重新定义,则派生类简单地继承其直接类的虚函数。 定义一个指向对象的指针变量,并使它指向同一类族需要调用函数对象。...需要说明;有时定义的非虚函数会在派生类中被重新定义(如例12.1的area函数),如果用类指针调用该成员函数,则系统会调用对象类部分的成员函数;如果用派生类指针调用该成员函数,则系统会调用派生对象的成员函数...虚析构函数 析构函数的作用是在对象撤销之前做必要的“清理现场”工作;当派生类的对象从内存撤销时,一般先调用派生类的析构函数,再调用类的析构函数。...C++构造函数用于创建对象时进行初始化工作,不能声明为虚函数

    1.1K60

    C++:28 --- C++内存布局(上)

    与成员变量不同的是,通过派生重新定义函数,一个派生类可以覆盖,或者说替换掉类的函数定义。...6 特殊成员函数 构造函数和析构函数 正如我们所见,构造和析构过程,有时需要初始化一些隐藏的成员变量。...最坏的情况下,一个构造函数要执行如下操作: 1 * 如果是“最终派生类”,初始化vbptr成员变量,调用类的构造函数; 2 * 调用非虚类的构造函数 3 * 调用成员变量的构造函数 4 * 初始化虚函数表成员变量...5 * 执行构造函数,程序所定义的其他初始化代码 (注意:一个“最终派生类”的实例,一定不是嵌套在其他派生类实例类实例) 所以,如果你有一个包含虚函数的很深的继承层次,即使该继承层次由单继承构成...“最终派生类”,调用类的析构函数(按照相反顺序) VC++,有虚类的类的构造函数接受一个隐藏的“最终派生类标志”,标示虚是否需要初始化。

    1.1K20

    C++编程经验(4):不要在构造函数和析构函数中使用虚函数

    类的构造过程,虚函数调用从不会被传递到派生。代之的是,派生对象表现出来的行为好象其本身就是类型。不规范地说,类的构造过程,虚函数并没有被"构造"。...简单的说就是,子类对象类子对象构造期间,调用的虚函数的版本是类的而不是子类的。...如果在类的构造过程对虚函数调用传递到了派生类, 派生对象当然可以参照引用局部的数据成员,但是这些数据成员其时尚未被初始化。这将会导致无休止的未定义行为和彻夜的代码调试。...,新版的编译器会拒绝你构造函数调用了虚函数,然后帮你调整了方向。。。...一旦进入到类的析构器,该对象即变为一个对象C++各个部分(虚函数,dynamic_cast运算符等等)都这样处理。

    1.5K30
    领券