定义子类对象时要先调用基类构造函数,是应该哪样理解呢

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了定义子类对象时要先调用基类构造函数,是应该哪样理解呢相关的知识,希望对你有一定的参考价值。

内存中是不是也包含了基类的对象还是仅仅子类的对象中包含了基类的数据成员,但是实际上不能算是基类的对象

记住:对象只是一段内存。它可能属于多个类。即使那个类是一个抽象类。
子类对象的内存结构里包含了父类的数据成员。那么这段内存能不能称作父类的对象呢?当然可以了。
好比一个活生生(表示被实例化了)的程序员(programmer类)jack(对象名)是一个人(person类)一样。但是,不是人就能写代码((programmer*)&tom->coding() 可能无法调用,tom非programmer类)。那么,写代码这个行为(成员函数coding())就不属于人这个类了,而是子类的特性。但是人的基本行为,比如吃饭(eating())。就可以说,一个活生生的人正在吃饭((person*)&jack ->eating() 调用成功),当然这个人实际上是一个程序员。
在内存结构上,子类独有的数据成员是在父类的数据成员所在的内存后面上增加一段
参考技术A 因为子类对象要进行对基类数据成员和子类数据成员进行初始化初始化,但是子类的构造函数无法直接访问基类的私有数据成员,所以必须先调用基类的构造函数 参考技术B 派生类和基类中有同名的函数,但非虚函数。基类指针会调用
基类的函数
当如果是虚函数的话,则要看基类指针指向的是派生类还是基类。是谁就调用谁的。

Python初学 调用基类应该怎么写

Python初学 调用基类应该怎么写应该怎么改才能正确调用上面求长方形面积的函数 再乘以高求得体积?谢谢🙏

class ti(Rectangle):
    def __init__(self, x, y, z):
        Rectangle.__init__(self, x, y) # 调用父类构造器
        self.z = z
    def volume(self):
        return self.area() * self.z # 调用父类方法

参考技术A super(ti, self).area()

以上是关于定义子类对象时要先调用基类构造函数,是应该哪样理解呢的主要内容,如果未能解决你的问题,请参考以下文章

C++中派生类的构造函数怎么显式调用基类构造函数?

赋值兼容原则

C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构造函数?

C++中如何在子类的构造函数中调用基类的构造函数来初始化基类成员变量

第三次动手动脑

请问把基类构造函数声明为protected有啥好处呢(抽象基类)