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

后续的VBA继承通过构造,构造函数不工作?

VBA(Visual Basic for Applications)是一种用于Microsoft Office应用程序的编程语言,用于自动化和定制化Office应用程序的功能。在VBA中,继承是一种通过创建一个新类来继承现有类的属性和方法的机制。

在VBA中,继承通过使用构造函数来实现。构造函数是一个特殊的方法,用于在创建类的新实例时初始化对象的属性和执行其他必要的操作。然而,有时候在VBA中使用继承时,构造函数可能无法正常工作。这可能是由于以下原因导致的:

  1. 构造函数未正确调用:在继承中,子类的构造函数应该首先调用父类的构造函数,以确保父类的属性和方法被正确初始化。如果子类的构造函数没有正确调用父类的构造函数,可能会导致继承不正常。
  2. 继承链中的其他问题:如果在继承链中存在其他问题,例如父类的构造函数中有错误或缺失的代码,那么继承可能无法正常工作。

解决这个问题的方法包括:

  1. 确保正确调用父类的构造函数:在子类的构造函数中,使用MyBase.New语句来调用父类的构造函数。这将确保父类的构造函数被正确执行。
  2. 检查继承链中的其他问题:仔细检查继承链中的每个类的构造函数,确保它们没有错误或缺失的代码。如果发现问题,及时修复。
  3. 使用其他方法替代继承:如果继承在VBA中无法正常工作,可以考虑使用其他方法来实现类之间的代码重用,例如组合或接口。

需要注意的是,以上解决方法是基于VBA的特定情况。在其他编程语言或环境中,可能会有不同的解决方法。

关于VBA继承和构造函数的更多信息,可以参考腾讯云的VBA开发文档:VBA开发文档

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

相关·内容

JavaScript构造函数继承

现在有一个"动物"对象构造函数。 function Animal(){ this.species = "动物"; } 还有一个"猫"对象构造函数。...一、 构造函数绑定 使用 call 或 apply 方法,将父对象构造函数绑定在子对象上,即在子对象构造函数中加一行: function Cat(name,color){ Animal.apply...Cat.prototype.constructor = Cat; 任何一个 prototype 对象都有一个 constructor 属性,指向它构造函数。...alert(cat1.constructor == Animal); // true 这显然会导致继承紊乱(cat1明明是用构造函数Cat生成),因此需要手动纠正,将 Cat.prototype...使用时这样写: extend2(Cat, Animal); var cat1 = new Cat("AA猫","黑色"); alert(cat1.species); // 动物 至于非构造函数继承

96910

【JS精粹】原型链继承构造函数继承 “毛病”

其基本思想就是通过原型继承多个引用类型属性和方法。...构造函数继承 构造函数继承,也叫做:“盗用构造函数”,“对象伪装”或“经典继承”。 基本思路:在子类构造函数中用 apply()和 call()方法调用父类构造函数。...,但是它也有它问题,也是使用构造函数模式自定义类型问题, 即:必须在构造函数中定义方法(在原型上定义方法,子类是访问不到),函数不能重用。...思路是:使用原型链继承原型上属性和方法,而通过构造函数继承实例属性。...,总结起来就是,属性(特别是引用值)通过构造函数继承,而公用、需要复用方法用原型链去继承!!

1.2K20
  • Javascript面向对象编程(二):构造函数继承

    这个系列第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。 今天要介绍是,对象之间"继承"五种方法。 比如,现在有一个"动物"对象构造函数。   ...一、 构造函数绑定 第一种方法也是最简单方法,使用call或apply方法,将父对象构造函数绑定在子对象上,即在子对象构造函数中加一行:   function Cat(name,color){...alert(cat1.constructor == Animal); // true 这显然会导致继承紊乱(cat1明明是用构造函数Cat生成),因此我们必须手动纠正,将Cat.prototype...我们也可以换一种思路,纯粹采用"拷贝"方法实现继承。简单说,如果把父对象所有属性和方法,拷贝进子对象,也能够实现继承吗?这样我们就有了第五种方法。...(本系列未完,请继续阅读第三部分《非构造函数继承》。)

    1.2K80

    Javascript面向对象编程(三):非构造函数继承

    这个系列第一部分介绍了"封装",第二部分介绍了使用构造函数实现"继承"。 今天是最后一个部分,介绍不使用构造函数实现"继承"。 一、什么是"非构造函数"继承?...这里要注意,这两个对象都是普通对象,不是构造函数,无法使用构造函数方法实现"继承"。...'医生'; 这时,子对象已经继承了父对象属性了。   ...Chinese.birthPlaces = ['北京','上海','中国香港']; 通过extendCopy()函数,Doctor继承了Chinese。   ...这是早期jQuery实现继承方式。 四、深拷贝 所谓"深拷贝",就是能够实现真正意义上数组和对象拷贝。它实现并不难,只要递归调用"浅拷贝"就行了。

    1.3K50

    【Kotlin】Kotlin 类继承 一 ( 类继承基本方式 | final 关键字 | 子类主构造函数 | 子类次构造函数 )

    继承基本方式 II . 使用 final 禁止类继承 / 方法重写 III . 父类没有主构造函数 IV . 父类有主构造函数 V . 父类构造函数与子类构造函数总结 I ....类继承格式 : 使用 " : " 继承父类 ; 如果该父类有主构造函数 , 那么子类必须至少有一个主构造函数或次构造函数 , 子类构造函数下面会根据不同情况详细解析 ; //注意这里父类构造函数需要实际调用...类继承限制 : 子类使用 : 父类 ( 父类构造函数参数列表 ) ① 类继承限制 : 只有被 open 修饰类 , 才能有子类继承该类 , 普通类不允许被继承 ; ② 类方法被重写限制 : 只有被...子类有主构造函数 : 父类必须在主构造函数中初始化 , 子类 constructor() 可以省略 ; " : " 后 Father() 相当于调用了父类构造函数 , 将子类构造函数委托给父类构造函数执行...父类构造函数与子类构造函数总结 ---- 子类构造函数最终委托 : 子类构造函数归根到底都要委托给父类构造函数 ; ① 子类主构造函数 : 假如子类有主构造函数 , 该主构造函数肯定要委托父类构造函数执行

    1.2K10

    深入理解javascript中继承机制(4)多继承寄生式继承借用构造函数借用构造函数并且复制原型以上

    首先将已有的对象作为新对象原型,继承属性,我们调用了之前objec函数 然后再给他添加其他属性与方法 借用构造函数 这种继承模式中,就是子对象构造函数中调用父对象构造函数通过apply和...这样的话,triangle对象会继承Shape构造函数属性,但不会继承原型中属性。...(); Triangle.prototype.name = 'Triangle'; 但这样有一个缺点,我们通过调用父类构造函数继承了父类自身属性,通过原型继承了父类自身属性和原型,这样自身属性实际上就被覆盖了两次...下面这个模式就可以更好解决这个问题 借用构造函数并且复制原型 其实解决上面那个自身属性被继承两次问题也很简单,我们首先调用apply函数继承父类自身属性,然后在复制原型属性就可以了,这个方法我们之前已经讨论过就是...Paste_Image.png 以上 终于我们将该讲继承方式都讲完了。 后续还有一片文章会将这些继承模式归类总结一下。

    67410

    C++中类中同时存在继承以及组合时候,构造函数构造顺序

    C++一大特点就是面向对象,面向对象主要就是类一些相关特性(封装、继承、多态)。 那么在类继承以及类成员属性包含其他类实例对象时候,构造函数构造顺序到底是怎么样子呢?...相信大家都知道,实例化对象首先需要是调用自身构造函数进行分配内存空间之后进行实例化对象,这就是构造函数整个过程(两步)。...那么当一个类对象既包含了继承关系同时也在自身成员属性中包含了其他类对象实例化时候,那么这时候实例化该类对象时候,构造函数顺序会是怎么样子呢?下面来看看这一段代码吧。...c; // 实例化一个C类对象 system("pause"); return 0; } 这就是一个简单继承加上组合小demo,从上面的小demo中可以看出类C继承与类...A 类构造函数 B 类构造函数 C 类构造函数 构造顺序是首先构造继承父类,其次构造组合中实例对象,最后才是构造自己本身。

    1.1K20

    【C++】继承 ⑦ ( 继承对象模型分析 | 继承构造函数和析构函数 )

    int 类型空间 ; 3、问题引入 - 派生类对象构造函数和析构函数调用 上述 继承 过程中 , 每一层继承 , 都继承了上一级 父类 成员变量 , 同时自己也定义了新成员变量 ; 在 派生类对象...---- 1、子类构造函数与析构函数调用顺序 继承构造函数和析构函数 : 子类构造 : 子类对象 进行 构造 时 , 需要调用 父类 构造函数继承自父类 成员变量 进行 初始化 操作...; 构造函数 调用顺序如下 : 构造时 , 先调用 父类 构造函数 , 构造继承自父类成员 ; 然后 , 再调用 子类 构造函数 , 构造 子类 自己定义成员 ; 子类析构 : 子类对象...; 然后 , 再调用 父类 析构函数 , 析构 继承自父类成员 ; 2、子类构造函数参数列表 如果 父类 构造函数 有 参数 , 则 需要再 子类 初始化列表中 显示调用 该有参构造函数...如果继承 A 类 , 如果 A 类有默认构造函数 , B 类构造函数可以这么写 , 不显式调用 A 类构造函数 , 默认调用 A 类 无参 默认构造函数 ; class B : public

    22340

    C++:39---继承构造函数、析构函数关系

    一、继承构造函数关系 如果父类没有构造函数,则子类初始化时不需要构造父类 如果父类有构造函数,则子类初始化自己构造函数时,要先初始化父类构造函数 基类构造函数必须在派生类构造函数初始化列表来进行初始化...b_data = data; } ~B() {} }; 二、若一个类中定义了另一类构造函数关系 与继承构造父类构造函数相类似: 如果类中定义对象没有构造函数,则该类初始化时不需要构造该对象构造函数...= data; } ~B() {} }; 三、继承中父、子类构造函数、析构函数执行顺序 构造函数执行顺序: 第一步:先构造父类构造函数 第二步:如果类中定义了其他类对象,再初始化其他类构造函数...但子对象必须在成员初始化列表进行初始化 四、单继承构造函数、析构函数执行顺序 下面代码中: 构造函数执行顺序为:2-1-3 析构函数执行顺序为:6-4-5 //单继承 class M { int m_data...、析构函数执行顺序 下面代码中: 构造函数执行顺序为:1-2-3 析构函数执行顺序为:6-5-4 //多继承 class A { int a_data; public: A(int data) { a_data

    1K20

    C++ 构造函数运用,继承、派生时重载方式

    构造函数 c++在进行实例化时候通常需要使用构造函数,没有显示构造函数时候,系统会默认一个所有参数为空默认构造函数。...C++中构造函数有很多细节,其中从语法上来说,定义在函数声明部分,是会优先于构造函数本身执行。 譬如说以下两种方式,会有不同效果。...派生类中构造函数 在派生类中使用构造函数时,需要同时构造基类构造函数,如果同时继承多个基类,则需要依次构造基类。...在没有进行基类构造时候,c++会默认使用基类默认构造函数进行构造,但如果不满足这样条件,就会报错。...class C : public A, public B{ bool c; C( int a, char b, bool c ):A(a),B(b),c(c){} } 这是一个最基本继承构造函数形式

    70540

    【C++】继承 ⑧ ( 继承 + 组合 模式类对象 构造函数 和 析构函数 调用规则 )

    一、继承 + 组合 模式类对象 构造函数和析构函数调用规则 1、场景说明 如果一个类 既 继承了 基类 , 又 在类中 维护了一个 其它类型 成员变量 , 那么 该类 构造 与 析构 , 就需要涉及到...类 本身 构造函数 和 析构函数 , 父类 构造函数 和 析构函数 , 类 成员变量 构造函数 和 析构函数 ; 2、调用规则 在 继承 + 组合 情况下 , 构造函数 与 析构函数 调用规则如下...析构函数 ; 最后 , 调用 父类 析构函数 ; 二、完整代码示例分析 ---- 1、代码分析 在下面的代码中 , 继承关系 : C 类 继承了 B 类 class C : public B , B 类...; A 和 B 构造函数 , 是 父类构造函数 ; D 构造函数 , 是 成员构造函数 ; C 构造函数 , 是 自身构造函数 ; 构造函数调用顺序为 : 父类 -> 成员 -> 自身 , 符合上述调用原则...; 然后分析 析构函数 调用顺序 ; C 析构函数 , 是 自身构造函数 ; D 析构函数 , 是 成员构造函数 ; A 和 B 析构函数 , 是 父类构造函数 ; 析构函数调用顺序为 : 自身

    18010

    深入理解javascript中继承机制 之 12种继承模式总结原型链法仅从原型继承临时构造器原型属性拷贝所有属性拷贝(浅拷贝)深拷贝原型继承法扩展与增强模式多重继承法寄生式继承借用构造函数构造器于

    最常用我们可以分为这两类: 基于构造继承模式 基于对象继承模式 或者我们也可以如下分类: 是否使用原型 是否使用了属性拷贝 即使用了原型,也使用了属性拷贝 下面我们就来总结回顾一下javascript...中继承模式 原型链法 示例: Child.prototype = new Parent(); 分类: 使用了原型 基于构造继承模式 ** 注意 **: 默认继承机制 我们可以将需要重用属性和方法移到原型中...使用了原型链 ** 注意 **: 是前面几种方法改进,只继承原型对象属性和方法,自身属性和方法是继承 通过uber可以方便访问到父对象 原型属性拷贝 实例: function extend2...object(victim); that.more = 1; return that; } 分类: 基于对象工作模式 使用原型链 ** 注意 ** 该方法通过一个类似构造函数函数来创建对象...该函数会执行对象拷贝,并可以进行扩展,然后返回对象 借用构造函数: 实例: function Child() { Parent.apply(this, arguments); } 分类: 基于构造函数模式

    46820

    java继承当中都有一些什么样构造函数规则?

    6.继承当中构造函数规则   马克-to-win:继承当中构造函数规则貌似复杂: 记住我给你以下几条口诀, 你高枕无忧。...1)如果你在某类中写了带参构造函数,系统就不会再为你在那类中自动添加无参构造函数了。...2)如你没有写无参构造函数,且机器也不会为你自动添加这个无参构造函 数时(因为你已经有带参构造函数了),你不可以主动调无参构造函数。3)子类构造函数中不能人为写两个super。...4)构造函数中要是你人工想写super,super必须为第一句话。...构造函数中要是你写super,机器会为你加无参数super().马克-to-win:5)既然super必须为第一句话,创建子类对象时,构造函数调用次序为,先最低超类直到最高子类。

    29630

    C++:51---继承构造函数、析构函数、拷贝控制一系列规则

    一、继承构造函数 根据构造函数执行流程我们知道: 派生类定义时,先执行基类构造函数,再执行派生类构造函数 拷贝构造函数与上面是相同原理 二、继承析构函数 根据析构函数执行流程我们知道:...B&) = delete; //拷贝构造函数被定义为删除 //其他成员,包含移动构造函数 }; class D :public B { //没有声明任何构造函数 }; D d;...: 在基类构造函数执行时候,派生类部分是未定义状态 在基类析构函数执行时候,派生类部分已经被释放了 所以在基类构造函数或析构函数中调用虚函数建议,因为: 虚函数在执行时候可能会调用到属于派生类成员...,否则派生类将继承基类所有构造函数 1.如果派生类定义了一个构造函数与基类构造函数具有相同参数列表,则在用这个构造函数创建派生类时,执行是派生类那个,因为基类那个没有被继承(也可以被理解为覆盖了...这些构造函数按照正常规则被合成。继承构造函数不会被作为用户定义构造函数来使用。因此,如果一个类只含有继承构造函数,则它也将拥有一个合成默认构造函数

    1.3K30

    从零开始学C++之继承(二):继承构造函数、派生类到基类转换

    一、不能自动继承成员函数 构造函数(包括拷贝构造函数) 析构函数 =运算符 二、继承构造函数 基类构造函数不被继承,派生类中需要声明自己构造函数。...声明构造函数时,只需要对本类中新增成员进行初始化,对继承基类成员初始化调用基类构造函数完成(如果没有给出则默认调用默认构造函数)。...从输出可以看出: 派生类对象构造次序: 先调用基类对象成员构造函数,接着是基类构造函数,然后是派生类对象成员构造函数,最后是派生类自身构造函数。...也可以这样来看:构造函数执行顺序是先执行初始化列表,然后是函数体。...初始化列表参数多个且其中有调用基类构造函数时,先执行基类构造函数(从最远开始,如果多重继承则按继承顺序);其他对象成员若不止一个,则按定义顺序构造,与初始化列表顺序无关。

    1.5K00

    【C++】继承 ④ ( 继承对访问控制权限影响 | 访问权限判定 | 继承不包括构造与析构函数 | 继承改变成员访问权限 )

    一、继承相关概念 1、继承不包括构造与析构函数 子类 继承 父类 所有成员 , 包括 成员变量 和 成员方法 ; 子类 不会 继承 父类 构造函数 和 析构函数 ; 2、继承改变成员访问权限 父类...private : 私有成员 只能被该类成员函数访问 , 包括友元函数和派生类中覆盖函数 ; 完全封闭 : 在 类外部 和 子类 中都不能访问私有成员 ; private 是最安全访问控制级别...// 私有成员 // 只能在 类内部 访问 // 子类 , 类外部 不可以访问 int private_member; public: // 针对共有成员变量访问函数可以写...= value; } int get_public_member() { return public_member; } // 保护变量 在外部只能通过共有的成员函数进行访问...value; } int get_protected_member() { return protected_member; } // 私有变量只能通过共有的成员函数进行访问

    22710
    领券