观点一:没有必要
从一个类派生子类,子类的类名肯定和父类的不同,所以根本谈不上什么覆盖,那还虚它干嘛!
观点二:不能为虚--虚函数特点
(1)“虚”也好,不“虚”也好,这些概念都必须等有了对象才有实际意义,连对象还没创建好,谈虚函数没有任何意义的!
(2)“虚”的含义之一就是“到运行时才知道调用谁”,假如说连构造都可以是虚的,那么new A();就意味着:到运行时才知道要创建什么!
观点三:不能为虚--构造函数特点
(1)构造函数在派生类中是不会被重定义的!
(2)构造函数是不允许被显示调用的!
观点四:可以为虚
这中标准早在ANSI C++ 92就引入(也可能更早,我是那时学的)
但……virtual construct function跟正常的virtual function是有很大差别的但行为是相同的
1.虚的构造函数要显式指明调用到哪一层基类,也就是说你可以不调用你的父类的构造函数而使用爷爷类的构造函数( 这一点我不知道有什么价值?)
2.虚的构造函数就是函数,一般构造函数是过程,不知道这样讲对不对但就父类构造函数可跃过说来就说明只要是虚的构造函数就可以不调用,而且它构造的方向是反向的,这好像连系到一系列复杂问题,建议去看看Herbert的C++语言大全,里面有详细介绍
3.还有一个有意思的事,CBuilder似乎违反了这一规定,它VCL所有的类都要有一个虚的构造函数??是不是因为VCL不是用C++写的??还是规定又有变化?
阅读(2331) | 评论(0) | 转发(0) |