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

我的一个子类中的函数不起作用,即使它在另一个子类中也是一样的

问题描述:我的一个子类中的函数不起作用,即使它在另一个子类中也是一样的。

解决方案: 这个问题可能是由于继承关系或函数调用方式不正确导致的。下面我将提供一些可能的解决方案:

  1. 检查继承关系:确保子类正确继承了父类,并且没有重写或覆盖了父类中的函数。可以通过查看子类的定义代码来确认继承关系是否正确。
  2. 检查函数调用方式:确认在调用子类中的函数时,使用了正确的方式。如果函数是实例方法,则需要通过实例对象来调用;如果函数是类方法,则需要通过类名来调用。
  3. 检查函数定义:确保函数在子类中正确定义,并且函数名、参数列表和返回值与父类中的函数一致。如果函数定义有误,可能会导致函数无法正常工作。
  4. 检查函数重载:如果子类中存在与父类同名的函数,确保函数重载的方式正确。函数重载是指在子类中定义一个与父类同名但参数列表或返回值不同的函数。在某些编程语言中,函数重载可以实现不同的功能。
  5. 检查函数调用顺序:如果子类中的函数依赖于其他函数的执行结果,确保函数调用的顺序正确。如果函数调用顺序有误,可能会导致函数无法正常工作。

如果以上解决方案都无法解决问题,可能需要进一步检查代码逻辑、调试代码或查看相关日志信息来定位问题所在。

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

相关·内容

创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法?

static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候父类会调用子类方法...但是:创建B对象父类会调用父类的方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...如果,子类重写了父类的方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向父类的方法引用。 如果子类重载了父类方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父类方法,则方法引用会指向父类方法。 当子类对象创建时,会先行调用父类的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,父类构造方法调用的方法的参数已经强制转换为符合父类方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

6.2K10

刚发现:虚函数可以突破子类中的private限制

刚发现:虚函数可以突破子类中的private限制 先上代码: class Base { public://这里的公共的  virtual void myprint()=0;//{ //   cout...<<“I’m Sonn”;  }; }; void main() {  Base *pBase = new Son;  pBase->myprint();//打印“I’m Son”,成功访问到了子类中的私有函数...} 纯虚函数和java语言中的接口的定义很相近,最近我也学习以及复习这方面的知识, 刚写base类时,我没有写public关键字,结果可想而知是通不过的,默认base类里所有变量和成员函数都是private...于是,我发现,原来基类里公共的虚函数在多态时要根据基类访问权限来调用的。...Son原意是不想让别人访问myprint函数的,但现在通过一个基类的指针就可以访问到myprint函数,我认为这多少破坏了类的封装性啊。

36530
  • 一个简单的方法:截取子类名称中不包含基类后缀的部分

    在代码中,我们可能会为了能够一眼看清类之间的继承(从属)关系而在子类名称后缀中带上基类的名称。但是由于这种情况下的基类不参与实际的业务,所以对外(文件/网络)的名称通常不需要带上这个后缀。...本文提供一个简单的方法,让子类中基类的后缀删掉,只取得前面的那部分。 在这段代码中,我们至少需要获得两个传入的参数,一个是基类的名称,一个是子类的名称。...另外,我们还需要有一些约束,必须有一个类型是另外一个类型的子类。于是我们可能必须来使用泛型做这样的约束。..., derivedTypeName.Length - baseTypeName.Length) : derivedTypeName; // 如果子类名称和基类完全一样...在截取完子串之后,我们还需要验证截取的字符串是否已经是空串了,因为父子类的名称可能是完全一样的(虽然这样的做法真的很逗比)。

    23230

    java构造函数调用另一个构造函数_java中的构造函数

    参考链接: Java程序从另一个调用一个构造函数 package demo03; /*  * 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法  * 格式:... * public 类名称(参数类型 参数名称){  *         方法体  *   * }  * 注意事项:  * 1.构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样  * 2.构造方法不要写返回值类型...,连void都不写  * 3.构造方法不能return一个具体的返回值  * 4.如果没有编写任何构造方法,那么编译器将会默认赠送一个构造方法,没有参数,方法体什么都不做  * 5.一旦编写了至少一个构造方法...,那么编译器将不再赠送  * 6.构造方法也是可以进行重载的。  ....setAge(45);         System.out.println("我的姓名是:"+stu2.getName()+"年龄是:"+stu2.getAge());     } }

    4.5K60

    Python中函数无法调用另一个函数的解决方法

    对于正常我们在编程中,尤其在python中,各函数之间正常来说都是可以相互调用的,如果发现函数无法调用另一个函数的情况,正常来说会有多种方面的原因。下面的问题我们可以一起看看。...1、问题背景在 Python 中,有时会遇到函数无法调用另一个函数的问题。这通常是由于函数内部的 return 语句导致的。return 语句的作用是终止函数的执行并返回一个值给调用者。...在下面的例子中,right_room() 函数中将 opening() 函数的调用移动到了 return 语句之前,这样 opening() 函数就可以被正确调用了。...除了移动函数调用的位置,还可以通过使用异常处理来解决这个问题。在下面的例子中,right_room() 函数使用了 try 语句来捕获 opening() 函数可能抛出的异常。...上面就是今天的全部内容了,如果您遇到了函数无法调用另一个函数的具体问题,可以提供更多的细节或代码示例,以便我可以更具体地帮助您解决问题。

    28610

    【C++】继承 ⑥ ( 继承中的构造函数和析构函数 | 类型兼容性原则 | 父类指针 指向 子类对象 | 使用 子类对象 为 父类对象 进行初始化 )

    地方 , 都可以使用 " 公有继承 " 的 派生类 ( 子类 ) 对象 替代 , 该 派生类 ( 子类 ) 得到了 除 构造函数 和 析构函数 之外的 所有 成员变量 和 成员方法 ; 功能完整性 :...指向 子类对象 定义 一个子类对象 Child child ; 定义父类的指针 , 将 指针 指向 子类对象 的地址 , 这是合法的 ; 代码示例 : // 父类对象 Parent parent...{ cout 子类 funChild 函数" << endl; } }; // 函数接收父类指针类型 // 此处可以传入子类对象的指针 void fun_pointer...// 子类对象 可以调用 父类公有函数 child.funParent(); // 将指向子类对象的指针传给接收父类指针的函数 // 也是可以的 fun_pointer...p_parent->funParent(); // 将指向子类对象的指针传给接收父类指针的函数 // 也是可以的 fun_pointer(p_parent);

    30920

    聊聊 Array 中的一个小坑

    假设obj是一个数组,我们想要实现一些功能。比如JSON.stringify就是一个例子,它以不同的方式把数组输出到其他对象。 我们可以这样做: ? 但是对于数组的子类来说这是错误的: ?...iframe有自己的数组构造函数,它与父页面中的构造函数不同。 Array.isArray ? Array.isArray将为数组返回true,即使它们是在另一个realm中创建的。...传递给Symbol函数的字符串只是一个描述。 即使在同一realm内,这些Symbol也是独一无二的。 The least unique 最小唯一性 ?...Symbol.for(str)创建一个与传递它的字符串唯一的symbol。 有趣的是它在各个realms都是一样的: ? 这就是Symbol.iterator大致的工作原理。...即使实例来自另一个realm,即使它是一个子类,即使它的原型已被删除,也是可以的。 唯一的问题是,你需要确认自己的symbol名称在所有代码中都是唯一的。

    43830

    虚函数

    实现动态联编需要三个条件:   1、 必须把需要动态联编的行为定义为类的公共属性的虚函数。   2、 类之间存在子类型关系,一般表现为一个类从另一个类公有派生而来。   ...注意:当基类的构造函数内部有虚函数时,会出现什么情况呢?结果是在构造函数中,虚函数机制不起作用了,调用虚函数如同调用一般的成员函数一样。当基类的析构函数内部有虚函数时,又如何工作呢?...因此,在析构函数中,虚函数机制也是不起作用的。   C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。...在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。   ...如下所示:   注意:在上面这个图中,我在虚函数表的最后多加了一个结点,这是虚函数表的结束结点,就像字符串的结束符“\0”一样,其标志了虚函数表的结束。

    88431

    Python学习 Day 8 继承 多态 Type isinstance dir __slots__

    继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class...如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。...在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的: >>> len('ABC') 3...>>> s.age # 测试结果 25 但是,给一个实例绑定的方法,对另一个实例是不起作用的: >>> s2 = Student() # 创建新的实例 >>> s2.set_age(25) # 尝试调用方法...使用__slots__要注意,__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的: >>> class GraduateStudent(Student): ...

    89730

    三大特性之多态

    常用的流插入和流体取也是一种函数重载 动态的多态 动态的多态才是本篇文章中要讲的主要内容,它在调用函数时与与类型无关而是与它所存放的对象有关(普通调用是按类型)。...如果我定义了一个子类的对象,并将该子类对象赋值给一个父类的指针,当我释放父类的时候只会调用父类的析构函数,也就是说只释放了子类中父类的那一部分资源,而没有释放子类的资源,这就可能会导致内存泄漏。...如果我将析构函数定义为虚函数并重写,那么我在释放父类指针的时候,调用的是子类的析构函数,子类析构函数对于父类那一部分资源通过父类的析构函数清理,同时也会清理自己的资源。...如果一个类包含纯虚函数,那么这个类就是抽象类。抽象类不能实例化对象,并且如果继承抽象类的子类不对纯虚函数进行重写的话,子类也是一个抽象类无法实例化对象。...在vs下虚函数表都是以空结尾,但是Linux下就不是; 一个变量中如果存放的是子类的对象,那么该变量中的前四个字节就是子类所对应的虚函数表,该表中存放的是子类所对应的虚函数。

    18520

    可维护的Python代码库的7条规则

    另一个是isort[8],它可以在每个模块的开头根据 PEP 8 规则自动组织导入。 一个小提示:你可以通过如何编写原始代码来引导自动格式化的行为。就我个人而言,我更喜欢将代码分成许多小行。...如果我只看子类,我怎么知道self.c存在?它来自哪里?在这个例子中,所有的东西都是在构造函数中实例化的,但我也见过有些状态是在某个事件发生之后才被初始化的;这可能会更加困惑人。...如果我将BaseClass子类的实例传递到另一个函数中,我怎么知道它们的行为是否良好?假设其他函数调用foo,它应该如何处理不同数量的参数?...,这也是Protocol比abc模块中的ABC抽象类更适合定义接口的原因之一。...对于测试来说,这是一个很好的特性。对于逻辑推理来说,这也是一个很好的特性。它意味着函数签名几乎可以给我们提供函数的所有相关信息。 类中定义的方法很容易被滥用来产生副作用。

    31630

    Python入门(16)

    即使面临相对复杂的问题,通过函数、模块和包等解决方案,也能帮助我们解决程序架构和代码复用问题。但是,这样的编程方式还是被称作面向过程的编程。 说简单点,本质上,还是一种线性化的编程方式。...运行结果显示: myclass 类的 __main__ 模块中拥有了一个实例MyClassObject,并显示了它在内存中存储该对象的地址。...4、方法的创建 类定义一个方法(Method)其实很简单,就像定义一个函数一样,唯一的不同在于它的方法还拥有一个额外的 self 参数。 示例16_2 ?...因为 self.name 中的点号意味着它的“name”是“self”对象的一部分,而另一个 name 则是一个纯粹的局部变量。...预告 下节课,我们将学习如何处理输入与输出,以及如何在 Python 中访问文件,这也是Python中极其重要和应用广泛的一个知识点。

    85210

    【C++】详解多态的底层原理

    首先来看非多态调用的: 我把父类虚函数的virtual去掉就不构成多态了 ,那不是多态的话其实就是普通函数的调用了,它在编译期间就可以根据这里引用或指针的类型确定要调用那个函数 然后我们来观察一下多态调用时的汇编...那另一个问题,通过上面的学习我们知道子类自己增加的虚函数也会进函数表的,不过监视窗口看不到,那对于当前的继承体系来说,子类增加的虚函数func3会放在那一张虚表里呢?...但是,大家有没有发现一个问题:我们对func1重写了,但它在两个虚表里覆盖的地址不一样!!! 这是怎么回事呢? 我们来看一段代码 大家看,这两个函数调用调的是同一个吗?...所以它们应该一个去找第一个虚表的func1,另一个找第二个虚表里面的。 当然它们调的还是同一个,因为子类重写后在两张表里都进行了覆盖。 但是为啥两张表里面func1的地址不一样呢?...我们看到此时看起来虽然有三张虚表,但是它们的地址是一样的,里面存的虚函数地址也是一样的,都是D重写的那个,所以可以认为只有一张虚表。

    68110

    Python动态绑定属性slots的使用

    这样: class Person(object): pass def set_sex(self, sex): # 定义一个函数作为实例方法 self.sex = sex from types...female 这里需要注意:给一个实例绑定的方法,对另一个实例是不起作用的: p2 = Person() # 创建新的实例 p2.set_sex_fun('male') # 尝试调用方法 报错: Traceback...使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的。...s = Son() s.age = 19 # 绑定属性'age' print(s.age) # 19 除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的...(s.name) # Kaven s.age = 19 # 绑定属性'age' print(s.age) # 19 Python的语法糖还有很多,我也会陆续整理分享哈。

    1.7K40

    十一、多态

    在C++中,多态主要通过虚函数来实现,并涉及以下三个关键要素: 继承关系 说明:多态必须发生在具有继承关系的类之间。即,一个类(子类或派生类)必须从另一个类(父类或基类)继承而来。...,如果子类写了个和父类函数原型一样的函数,并且父类中的函数没有声明为虚函数,则子类会直接覆盖掉父类的函数 通过父类指针或引用执行子类对象时,会调用父类的函数 虚函数重写 必须发生于父类和子类之间...通过在基类中将函数声明为virtual,我们可以实现多态,即使用基类类型的指针或引用来调用派生类中的成员函数。...,因为 ~Base() 是虚的 return 0; } 虚析构函数 虚析构函数是一个特殊的虚函数,它在对象被销毁时自动调用。...存储:每个包含虚函数的类的对象都会包含一个指向其类虚函数表的指针。这个指针在对象内部是隐藏的,但它在运行时被用来解析虚函数的调用。

    10110
    领券