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

如何告诉继承类不调用其基类'无参数构造函数?

在面向对象编程中,当一个类继承自另一个类时,默认情况下会调用基类的无参数构造函数。然而,有时我们希望告诉继承类不要调用基类的无参数构造函数,而是调用基类的其他构造函数或者根本不调用基类的构造函数。

要实现这个目标,可以在继承类的构造函数中使用特定的语法来指定调用基类的其他构造函数。具体来说,可以使用关键字super来调用基类的构造函数,并传递相应的参数。

以下是一个示例代码,展示了如何告诉继承类不调用其基类的无参数构造函数:

代码语言:java
复制
class BaseClass {
    public BaseClass(int value) {
        // 基类的其他构造函数
    }
}

class SubClass extends BaseClass {
    public SubClass(int value) {
        super(value); // 调用基类的其他构造函数
    }
}

在上述示例中,SubClass继承自BaseClass,并且在其构造函数中使用super(value)来调用BaseClass的其他构造函数,而不是调用基类的无参数构造函数。

需要注意的是,如果基类没有提供其他构造函数,只有无参数构造函数,那么继承类仍然会调用基类的无参数构造函数。在这种情况下,无法避免调用基类的无参数构造函数。

此外,还可以使用super()来显式调用基类的无参数构造函数,即使继承类有其他构造函数。这样做可以确保在继承类的构造函数中同时调用基类的无参数构造函数和其他构造函数。

总结起来,要告诉继承类不调用其基类的无参数构造函数,可以在继承类的构造函数中使用super(value)来调用基类的其他构造函数,并传递相应的参数。

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

相关·内容

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

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

1.5K00

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

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

16210

【C++】泛型编程 ⑧ ( 模板继承语法 | 普通 继承 模板语法 | 模板 继承 模板语法 | 继承模板必须指定具体的类型参数列表 | 继承 模板 必须重写构造函数 )

一、普通 继承 模板语法 1、普通 继承 模板语法 模板 作为父 , 子类 继承 模板 父 , 需要 指定 具体的类型参数列表 ; 需要 重写 构造函数 , 其中必须调用 模板 具体...// 才能正确分配内存 class Son : public Father { public: // 模板 子类 必须重写构造函数 // 在 子类 构造函数中 , 调用 模板..., 调用 模板 具体构造函数 , 如果 子类 继承 模板父 , 如果 子类没有实现 构造函数 , // 模板 继承时 , 需要具体化 模板 // 也就是 指定 模板 的 类型参数列表...> { public: // 模板 子类 必须重写构造函数 // 在 子类 构造函数中 , 调用 模板 具体构造函数 // 否则会报错 Son(int a =...> { public: // 模板 子类 必须重写构造函数 // 在 子类 构造函数中 , 调用 模板 具体构造函数 // 否则会报错 Son(int a =

57730

ASP.NET AJAX(6)__Microsoft AJAX Library中的面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象——继承——调用

定义构造函数 定义成员(方法、属性、事件) 注册 ——构造函数 构造函数即为function定义 通常用于初始化域变量 自由成员使用下划线开头(形式上的封装) ——定义方法 使用prototype..._mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用构造函数 有父必须调用构造函数,否则会丢失继承效果...= function(name) { MyNamespace.Intern.initializeBase(this, [name]);//调用构造函数 } MyNamespace.Intern.prototype...Employee的三个 接口 与的定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口时使用registerInterface方法 接口无法继承其他接口 接口定义...= function(name) { MyNamespace.Intern.initializeBase(this, [name]);//调用构造函数 } MyNamespace.Intern.prototype

6.2K50

23.C++- 继承的多种方式、显示调用构造函数、父子之间的同名函数、virtual虚函数  上章链接: 22.C++- 继承与组合,protected访问级别

C++中,继承方式共有3种: public继承 -指父的成员(变量和函数)访问级别,在子类中保持不变 private继承 -指父的成员,在子类中变为private私有成员....注意: protected继承只针对子类有效 比如当父是protected继承时,则子类的子类就无法访问父的所有成员 一般而言,C++项目只用到public继承 显示调用构造函数 当我们创建子类对象时...,编译器会默认调用构造函数 若有子类对象,也会默认调用子类对象的构造函数。...} }; int main() { StrB b("123"); return 0; }  编译运行: StrA() //父构造函数...StrB(int i):123 也可以通过子类构造函数的初始化列表来显示调用 接下来,修改上面子类的StrB(string s)函数,通过初始化列表调用StrA(string s)父构造函数 改为:

3K90

面向对象编程基础2(干货)

多态--通过指向派生(统一)调用调用函数,会根据引用所指向派生的实际类型,调用派生中的同名重写函数,即为多态(个性张扬)。...4.构造函数小补充 小概念:容器构造函数,若多个派生继承与一个,那么在new他的时候,一个个的new很麻烦,所以有了容器构造函数来减少代码量,也更加清晰。 ?...一般方法希望被子类重写,就可以声明为virtual。如果是派生方法希望子类对重写,同时是override重写,就可以使用sealed机制。...在引用任何静态成员之前,和创建任何实例之前调用。 与名相同,使用static,参数访问修饰符。如图中的static Dog() ?...用程序解释就是,事件发生时,通知订阅者,就是调用订阅者的注册函数。注册,就是告诉发布者调用哪一个注册函数。 事件关键词event,事件的声明和触发。 ? ? ? ? ? ?

1.1K20

C++ 重载运算符 继承 多态 (超详细)

(2)派生的生成过程 吸收成员:除构造和析构函数外 改造成员:通过在派生中定义同名成员屏蔽成员在派生中直接调用,仍可以指针调用同名成员 .添加新成员 (3)派生特点 子类拥有父除了父构造和析构函数...构造函数的执行顺序:→对象成员→派生; (6)派生构造函数和析构函数的使用原则 构造函数和析构函数不能继承 派生是否定义析构函数与所属无关 如果没有定义构造函数或是定义构造函数...如果构造函数,派生必须定义构造函数 如果派生为连续继承,每个派生只负责直接构造 (7)派生析构函数构造函数执行顺序相反,派生-----对象----- (8)赋值兼容原则...允许将一个声明为指向的指针指向公有派生对象,但是不能将一个声明为指向派生对象的指针指向对象。...声明为指向对象的指针,当指向公有派生对象时,只能用它来直接访问派生中从继承来的成员,而不能直接访问公有派生的定义的成员。

1K21

硬核 | C++ 基础大全

参数构造函数: 即默认构造函数,如果没有明确写出参数构造函数,编译器会自动生成默认的参数构造函数函数为空,什么也不做,如果不想使用自动生成的构造函数,必需要自己显示写出一个构造函数。...编译器处理虚函数表应该如何处理 对于派生来说,编译器建立虚函数表的过程其实一共是三个步骤: 拷贝的虚函数表,如果是多继承,就拷贝每个有虚函数的虚函数表 当然还有一个的虚函数表和派生自身的虚函数表共用了一个虚函数表...规则,只要你一实例化对象,系统自动回调用一个构造函数,就是你写,编译器也自动调用一次。...动态联编规定,只能通过指向的指针或对象的引用来调用函数格式为:指向的指针变量名->虚函数名(实参表)或对象的引用名.虚函数名(实参表) 实现动态联编三个条件: 必须把动态联编的行为定义为的虚函数...当初始化一个引用成员变量时; 初始化一个 const 成员变量时; 当调用一个构造函数,而构造函数拥有一组参数时; 当调用一个成员构造函数,而他拥有一组参数; 编译器会一一操作初始化列表,以适当顺序在构造函数之内安插初始化操作

1.2K10

Java基础系列5:Java代码的执行顺序

该系列博文会告诉如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架。...关于构造方法,需要注意: 如何调用构造方法在实例化的时候调用,如上述代码中的Person p1=new Person(),这里便调用了Person构造构造方法由系统自动调用 构造函数重载...我们知道方法可以重载(方法名相同,参数列表不同),那么构造方法也是方法的一种,当然也可以继承,如上述代码中的两个构造方法,一个构造方法,一个带两个参数构造方法。...在装载的过程中,装载器注意到它有一个(也就是extends所要表示的意思),于是它再装载。不管你创创建对象,这个过程总会发生。如果还有,那么第二个也会被装载,依此类推。...(4)SubClass存在父,则调用构造函数,你可以使用super来指定调用哪个构造函数构造过程以及构造顺序,同派生的相同。

73530

C++面向对象程序设计

构造函数语法:名(){} 构造函数,没有返回值也写void 函数名称与名相同 构造函数可以有参数,因此可以发生重载 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数语法:...---- 4.2.2 构造函数的分类及调用 ---- 两种分类方式: ​ 按参数分为: 有参构造构造 ​ 按类型分为: 普通构造和拷贝构造 三种调用方式: ​ 括号法 ​ 显示法 ​...从继承过过来的表现共性,而新增的成员体现了个性。...(){ point_son p1(10); //继承中 先调用构造函数,再调用派生构造函数,析构顺序与构造相反 return 0; } 总结:继承中 先调用构造函数...,再调用派生构造函数,析构顺序与构造相反 ---- 4.6.6 继承同名成员处理方式 ---- 问题:当派生出现同名的成员,如何通过派生对象,访问到派生中同名的数据呢?

37950

C++面向对象程序设计

构造函数语法:名(){} 构造函数,没有返回值也写void 函数名称与名相同 构造函数可以有参数,因此可以发生重载 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数语法:...---- 4.2.2 构造函数的分类及调用 ---- 两种分类方式: ​ 按参数分为: 有参构造构造 ​ 按类型分为: 普通构造和拷贝构造 三种调用方式: ​ 括号法 ​ 显示法 ​...从继承过过来的表现共性,而新增的成员体现了个性。...(){ point_son p1(10); //继承中 先调用构造函数,再调用派生构造函数,析构顺序与构造相反 return 0; } 总结:继承中 先调用构造函数...,再调用派生构造函数,析构顺序与构造相反 ---- 4.6.6 继承同名成员处理方式 ---- 问题:当派生出现同名的成员,如何通过派生对象,访问到派生中同名的数据呢?

1.2K10

「MoreThanJava」Day 5:面向对象进阶—继承详解

如果子类的构造器没有显式地调用构造器,将自动地调用构造器。如果父没有无参数构造器,并且在子类的构造器中又没有显式地调用的其他构造器,Java 编译器就会报告一个错误。...(在我们的例子中 Video 缺少参数构造函数,故?上面图片代码会报错) 创建一个构造函数 关于构造函数的一些细节: 您可以显式为编写参数构造函数。...如果您没有为编写任何构造函数,那么将自动提供参数构造函数 (称为默认构造函数)。 如果为一个编写了一个构造函数,则不会自动提供默认的构造函数。...因此:如果您为编写了额外的构造函数,那么,则还必须编写一个参数构造函数 (供子类调用)。 在示例程序中, Video 包含构造函数,因此不会自动提供默认构造函数。...所以,Movie super() 函数建议默认使用的构造函数 (会自动调用参数构造函数) 会导致语法错误。

50310

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

这些构造函数具有相同的名字,而参数的个数或参数的类型不相同。这称为构造函数的重载。...关于构造函数的重载的几点说明: 调用构造函数时不必给出实参的构造函数,称为默认构造函数(default constructor)。显然,参的构造函数属于默认构造函数。一个只能有一个默认构造函数。...如果在建立对象时选用的是构造函数,应注意正确书写定义对象的语句。 尽管在一个中可以包含多个构造函数,但是对于每一个对象来说,建立对象时只执行其中一个构造函数,并非每个构造函数都被执行。...如果在派生中没有对的虚函数重新定义,则派生简单地继承直接的虚函数。 定义一个指向对象的指针变量,并使它指向同一族中需要调用函数的对象。...3)应考虑对成员函数调用是通过对象名还是通过指针或引用去访问,如果通过指针或引用去访问的,则应当声明为虚函数; 4)有时,在定义虚函数时,并不定义函数,即函数体是空的。

1.1K60

从零开始学C++之继承(一):公有私有保护继承、overloadoverwriteoverride之间的区别

实现继承,对于私有、保护继承,派生继承的接口。派生将不再支持的公有接口,它希望能重用的实现而已,因而将它称为实现继承。...隐藏(overwrite)(派生) (1)不同的范围(分别位于派生); (2)函数名与参数都相同,virtual关键字 (3)函数名相同,参数不同,virtual可有可无 当隐藏发生时...(实际上是继承了但不可见),如果在派生的成员函数中想要调用的被隐藏函数,可以使用 “ 名::函数名(参数)”的语法形式,如果被隐藏的函数是public的,则在体外也可以使用“ 派生对象.名...首先想到的是在C++ 中,子类的构造函数会自动调用构造函数。同样,子类的析构函数也会自动调用的析构函数。要想一个不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。...非常遗憾的是,Try不是MakeFinal的友元,因此不能调用私有的构造函数

92400

函数

如果在派生中没有对虚函数重新定义,则它继承的虚函数。当程序发现虚函数名前的关键字virtual后,会自动将其作为动态联编处理,即在程序运行时动态地选择合适的成员函数。   ...在继承体系中,构造的顺序就是从到派生目的就在于确保对象能够成功地构建。构造函数同时承担着虚函数表的建立,如果它本身都是虚函数的话,如何确保vtbl的构建成功呢?   ...注意:当构造函数内部有虚函数时,会出现什么情况呢?结果是在构造函数中,虚函数机制不起作用了,调用函数如同调用一般的成员函数一样。当的析构函数内部有虚函数时,又如何工作呢?...我们知道,析构函数调用顺序与构造函数相反,是从派生的析构函数的析构函数。...多重继承函数覆盖)   下面,再让我们来看看多重继承中的情况,假设有下面这样一个继承关系。注意:子类并没有覆盖父函数

74431

C++进阶-继承

;如果没有默认的构造函数,则必须在派生构造函数的初始化列表阶段显示调用 注:默认构造函数参的构造函数,编译器自动生成的构造函数,全缺省的构造函数 示图:默认构造函数,且不显示调用 派生的拷贝构造函数必须调用的拷贝构造完成的拷贝初始化...注:如果不调用,系统会自动调用的默认构造函数 示图: 注:调用的拷贝构造运用了切片操作 派生的operator=必须要调用的operator=完成的复制 注:这里的调用赋值同样也是切片操作...,如果主动调用赋值重载,则不会完成父的赋值 派生的析构函数会在被调用完成后自动调用的析构函数清理成员,因为这样才能保证派生对象先清理派生成员再清理成员的顺序 示图: 注...:一般不自行去主动调用的析构函数,不然可能会造成错误 派生对象初始化先调用构造再调派生构造 派生对象析构清理先调用派生析构再调的析构 示图: 五、继承和友元 概念:...将该类的构造函数的访问权限设置为私有,当派生调用构造函数时,会先调用构造函数,而父构造函数不能被调用,无法构造对象也就构造不了派生对象(但这样的不仅派生无法构造,该类自己也不能构造

43750

黑马程序员c++课件_黑马java课程大纲

构造函数语法:名(){} 构造函数,没有返回值也写void 函数名称与名相同 构造函数可以有参数,因此可以发生重载 程序在调用对象时候会自动调用构造,无须手动调用,而且只会调用一次 析构函数语法:...~名(){} 析构函数,没有返回值也写void 函数名称与名相同,在名称前加上符号 ~ 析构函数不可以有参数,因此不可以发生重载 程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次...system("pause"); return 0; } 4.2.2 构造函数的分类及调用 两种分类方式: ​ 按参数分为: 有参构造构造 ​ 按类型分为: 普通构造和拷贝构造 三种调用方式...默认情况下,c++编译器至少给一个添加3个函数 1.默认构造函数(参,函数体为空) 2.默认析构函数(参,函数体为空) 3.默认拷贝构造函数,对属性进行值拷贝 构造函数调用规则如下: 如果用户定义有参构造函数...从继承过过来的表现共性,而新增的成员体现了个性。

1.9K20

《逆袭进大厂》第三弹之C++提高篇79问79答

带有默认构造函数,如果一个没有任务构造函数的派生派生自一个带有默认构造函数,那么该派生会合成一个构造函数调用上一层的默认构造函数; 3) 带有一个虚函数 4) 带有一个虚...(3)使用抽象时注意: 抽象只能作为来使用,纯虚函数的实现由派生给出。如果派生中没有重新定义纯虚函数,而只是继承的纯虚函数,则这个派生仍然还是一个抽象。...2) 多重继承的优点很明显,就是对象可以调用多个中的接口; 3) 如果派生继承的多个有相同的,而派生对象需要调用这个祖先的接口方法,就会容易出现二义性 4) 加上全局符确定调用哪一份拷贝...1) 当初始化一个引用成员变量时; 2) 初始化一个const成员变量时; 3) 当调用一个构造函数,而构造函数拥有一组参数时; 4) 当调用一个成员构造函数,而他拥有一组参数; 5)...1) 将定义为抽象或者将构造函数声明为private; 2) 不允许外部创建对象,只能在内部创建对象 169、 如何禁止程序自动生成拷贝构造函数

2.2K30

如何设计一个C++的

tips:的名字应该明确告诉用户这个的用途。 需要自己写构造函数和析构函数吗?...当已经为一个提供了带有参数构造函数,编译器不会为该类再默认的生成构造函数,如果此时在其它地方以参形式构造了该类的一个对象,编译器就会报错,找不到对应的构造函数,那怎么解决?...这个很明确,如果类会作为被派生时,该的析构函数就一定要声明为虚函数,如果某个确定不会被派生,那就不要声明析构函数为虚函数需要提供拷贝构造函数吗?...如果子类想要重写某个虚函数时,可以将此函数标记为override,那该函数必须重写父函数,否则编译器报错。 标明某个函数是虚函数,有子类继承时可以改写此函数的行为。...里氏替换原则:子类必须能够替换父,任何引用的地方必须能透明的使用子类的对象,开放关闭原则的具体实现手段之一。

1.5K20

Java编程思想第五版第八章 -复用

Java 自动在派生构造函数中插入对构造函数调用。...即使不为 Cartoon 创建构造函数,编译器也会为你合成一个参数构造函数调用构造函数。尝试删除 Cartoon 构造函数来查看这个。...带参数构造方法 上面的所有例子中构造函数都是参数的 ; 编译器很容易调用这些构造函数,因为不需要参数。...如果没有无参数构造函数,或者必须调用具有参数构造函数,则必须使用 super 关键字和适当的参数列表显式地编写对构造函数调用: // reuse/Chess.java // (c)2017...此外,对构造函数调用必须是派生构造函数中的第一个操作。(如果你写错了,编译器会提醒你。) 委托 Java直接支持的第三种重用关系称为委托。

77031
领券