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

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

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

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

相关推荐

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

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

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

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

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

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

    C++风格与技巧

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

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

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

    C# 构造函数如何调用虚方法

    在C#中,用virtual关键字修饰的方法(属性、事件)称为虚方法(属性、事件),表示该方法可以由派生类重写(override)。虚方法是.NET中的重要概念,可以说在某种程度上,虚方法使得多态成为可能。 然而虚方法的使用...

    C++虚析构函数的使用分析

    在C++中,不能声明虚构造函数,但可以声明虚析构函数。多态性是指不同的对象对同一消息有不同的行为特性。虚函数作为运行时多态性的基础,主要是针对对象的,而构造函数是在对象产生之前运行的,因此虚构造函数是没有...

    深入探讨C++父类子类中虚函数的应用

    构造函数不能是虚函数,因为在调用构造函数创建对象时,构造函数必须是确定的,所以构造函数不能是虚函数。析构函数可以是虚函数。1.父类Father.h: 代码如下:#pragma onceclass Father{public: Father(void); ...

    Java版水果管理系统源码-c-plus-Interview:c-plus-面试

    构造函数可以使用virtual修饰吗(头条) C++ 拷贝构造函数 如何禁用 什么时候要重载拷贝构造函数?(聊了以后发现他的意思是重写overriding) 构造函数的种类 构造函数的常用场景 构造函数和=运算符的区别 拷贝构造...

    详解C++纯虚函数与抽象类

    1.虚函数 1.1虚函数简介 ... (1)为什么类的静态成员函数不能为虚函数?  如果定义为虚函数,那么它就是动态绑定的,也就是在派生类中可以被覆盖的,这与静态成员函数的定义(在内存中只有一份拷贝,

    C++实验报告

    分析为什么要把ShowPoint()函数设置为虚函数?有什么作用?请在main()函数中做测试。 4) 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么...

    C++实验源代码

    分析为什么要把ShowPoint()函数设置为虚函数?有什么作用?请在main()函数中做测试。 4) 定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(int n)中直接给age赋值,看看会有什么...

    摩托罗拉C++面试题

    子类继承父类大部分的资源,不能继承的有构造函数,析构函数,拷贝构造函数,operator=函数,友元函数等等 15.为什么要引入抽象基类和纯虚函数? 主要目的是为了实现一种接口的效果。 16.介绍一下模板和容器。如何...

    C++中的Virtual Function (虚函数)

    还没有涉及到构造函数。那么直接上代码了: // VitualFunction.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include using namespace std; //base ...

    C#方法的总结详解

    构造函数不能被继承,所以不能被virtual、new、override、sealed和abstract修饰,若没有显示定义任何构造函数,编译器将定义一个无参的public构造函数,但若是抽象类,编译器将定义一个无参的protected的构造函数...

    C++上机实验报告-实验五.docx

    基类构造函数的调用顺序是按照派生类定义时的顺序,而内嵌对象的构造函数调用顺序是按照成员在类C++上机实验报告-实验五全文共7页,当前为第2页。C++上机实验报告-实验五全文共7页,当前为第2页。中声明的顺序。 C++...

    net学习笔记及其他代码应用

    不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)...

    C++复习资料之系列

    设有函数关系为y= ,下面选项中能正确表示上述关系为( c )。 (a) y = 1; (b) y = -1; if( x>=0 ) if( x!=0) if( x==0 )y=0; if( x>0 )y = 1; else y = -1; else y = 0 (c) if( x) (d) y = -...

    传智播客_C++基础课程讲义_v1.0.7

    面试题5:构造函数中调用虚函数能实现多态吗?为什么? c++编译器多态实现原理 6 面试题6:虚函数表指针(VPTR)被编译器初始化的过程,你是如何理解的? 6 面试题7:父类的构造函数中调用虚函数,能发生多态吗? ...

    新手学习C++入门资料

    在C++中,允许有相同的函数名,不过它们的参数类型不能完全相同,这样这些函数就可以相互区别开来。而这在C语言中是不允许的。 1.参数个数不同 #include iostream.h void a(int,int); void a(int); int main...

Global site tag (gtag.js) - Google Analytics