`
kmplayer
  • 浏览: 508719 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为什么构造函数,不能是virtual?

阅读更多
1,C++语言是静态语言,而把构造函数写成虚函数意味这可以动态构造。
这是和C++静态语言特性相矛盾的,所以就C++语言本身来说,是不允许的。

2,虚函数是为了迟绑定吧,为什么要迟绑定?
因为好多行为编译期确定不了,需要运行期确定并调用合适的函数去完成相应的功能。
但是对象构造的行为是确定的,不管是不是多态,只要有new Object()这种动作,就一定会沿着继承的顺序依次执行对象的构造。
这种确定的没有必要的事情,编译器开发的时候也就不会考虑这种机制.
分享到:
评论

相关推荐

    构造函数不能声明为虚函数,析构函数可以声明为虚函数

    ### 构造函数不能声明为虚函数 构造函数在C++中主要用于初始化对象的状态,确保对象在使用前具有有效的初始值。构造函数不能声明为虚函数的原因主要涉及以下几个方面: 1. **对象类型未知**:当创建一个对象时,...

    C++构造函数,复制构造函数和析构函数专题[1].pdf

    在C++编程语言中,构造函数、复制构造函数和析构函数是面向对象特性的重要组成部分,它们在对象的生命周期管理中扮演着至关重要的角色。同时,继承、虚函数和多态性是C++实现面向对象设计的核心概念。下面将详细讨论...

    C++规定与类同名的函数就是拷贝构造函数

    当我们谈论“C++规定与类同名的函数就是拷贝构造函数”时,实际上是指一个类中定义的与类名相同且参数为该类类型的函数,这就是拷贝构造函数。 拷贝构造函数是一种特殊的构造函数,用于初始化一个新对象为已有对象...

    virtual类的构造函数存储空间分配[定义].pdf

    虚拟类的构造函数存储空间分配 在面向对象编程中,虚拟类的构造函数存储空间分配是一个非常重要的概念。下面,我们将通过分析虚拟类的构造函数存储空间分配来了解其背后的机理。 首先,让我们看一下析构函数为非虚...

    C++中的virtuals

    - 构造函数:C++中的构造函数用于初始化对象,它们不能被声明为`virtual`,因为构造过程发生在对象创建时,而`virtual`机制作用于对象创建之后。然而,派生类可以定义自己的构造函数来扩展或修改基类的初始化行为。 ...

    c++ 构造函数中调用虚函数的实现方法

    4. `A`类构造函数执行完毕,`B`对象构造完成,类型确定为`B`。 5. 最后,通过指针`p`调用`test()`,由于`p`具有多态性,此时`func()`调用的是`B`类版本,输出`1`。 因此,构造函数中调用虚函数的行为取决于调用时刻...

    C++构造函数和析构函数顺序

    在C++编程中,构造函数和析构函数是两种特殊的方法,它们在对象生命周期的不同阶段起着关键作用。本文将详细探讨这两种函数的调用顺序及其重要性。 构造函数是用于初始化新创建的对象的成员变量的函数。在C++中,...

    探讨C++中不能声明为虚函数的有哪些函数

    2.为什么C++不支持构造函数为虚函数? 这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来就是为了明确初始化对象成员才产生的,然而virtual function主要是为了再不完全了解细节的情况下也

    C++函数中那些不可以被声明为虚函数的函数

     2、为什么C++不支持构造函数为虚函数?  这个原因很简单,主要是从语义上考虑,所以不支持。因为构造函数本来是为了明确初始化对象成员才产生的,然而virtual function主要是为了再不完全了解细节的情况下也能...

    C++程序员面试题集

    20. 流运算符为什么不能通过类的成员函数重载? 一般怎么解决? 答:因为通过类的成员函数重载必须是运算符的第一个是自己,而对流运算的重载要求第一个参数是流对象。所以一般通过友元来解决。 知识点:流运算符不...

    虚函数的真相(VC编译器如何实现“virtual ”规则)

    在派生类中必须实现纯虚函数,否则类将成为抽象类,不能实例化。 此外,C++11引入了`override`关键字,用于明确指定函数是重写基类的虚函数,这有助于避免因拼写错误或其他原因导致的意外非虚函数覆盖。 总的来说...

    2020阶段测试2复习题STU答案.docx

    在C++编程语言中,构造函数是用来初始化对象的特殊函数,而无参构造函数是没有参数的构造函数。在题目中提到的"Stu array[2];"语句中,这行代码是在创建一个名为`array`的Stu类对象数组,数组包含两个元素。根据C++...

    C#中构造函数和析构函数用法实例详解

    1. 构造函数不能被`virtual`、`override`、`abstract`或`static`修饰。 2. 析构函数也不能被这些修饰符修饰,且不能有返回类型,也不能带参数。 3. 在析构函数中不要抛出异常,因为析构函数在对象即将被销毁时调用,...

    C++风格与技巧

    为什么不能有虚拟构造函数?为什么重载在继承类中不工作?我能够在构造函数中调用一个虚拟函数吗?有没有“指定位置删除”(placementdelete)?我能防止别人继承我自己的类吗?为什么不能为模板参数定义约束...

    题目:显示宠物信息(Dev C++运行可通过但是会警告)(纯虚函数、父类指针、动态多态性、继承)

    在类声明中,当一个函数被声明为`virtual`且没有函数体时,就定义了一个纯虚函数。例如,宠物类`Pet`中的`Speak()`和`GetInfo()`函数。抽象类不能被实例化,只能作为其他类的基类使用,用于定义接口。派生类必须实现...

    深入理解c++中virtual关键字

    友元函数 构造函数 static静态函数 不能用virtual关键字修饰;普通成员函数 和析构函数 可以用virtual关键字修饰; 3.virtual函数的效果 代码如下:class GrandFather{public: GrandFather() {} virtual void fu

    基类子类虚函数的调用顺序问题

    但是,无论我们创建`Base`对象还是`Derived`对象,`Base`构造函数中的`callVirtual()`都会调用`Base`版本的`virtualFunction`,输出"Base",因为这是构造过程中的行为。 总结来说,对于"基类子类虚函数的调用顺序...

    浅析C++构造函数虚拟化

    这种特殊的构造函数能够返回一个与调用对象相同类型的新对象的拷贝,通常通过实现一个名为clone()的纯虚函数来提供。例如,NLComponent类定义了一个纯虚函数`virtual NLComponent* clone() const = 0;`,每个子类如...

    C++不能继承的类

    首先,C++中可以通过将类的构造函数声明为私有(private)来阻止其他类直接实例化该类,但这样做也会阻止子类继承,因为子类需要调用父类的构造函数来初始化。为了解决这个问题,可以创建一个友元类,使得友元类可以...

    程序员面试大全 相关面试宝典

    这里我们将深入探讨两个关键知识点:为什么构造函数不能是虚函数,以及为什么析构函数可以是虚函数。 首先,让我们来看看构造函数不能是虚函数的原因: 1. **存储空间角度**:构造函数在对象实例化时被调用,此时...

Global site tag (gtag.js) - Google Analytics