构造函数可以说明为虚函数 C. 当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数 D. 析构函数调用虚函数采用动态联编 相关知识点: 试题来源: 解析 C.当基类的析构函数是虚函数时,它的派生类的析构函数也是虚函数 170)析构和构造调用虚函数是静态的,A、D项错误;析构函数可以是虚函数,但构造函...
Effective C++条款9讲构造函数中不要调用虚函数已经很清楚了,析构函数与其类似 我猜你的疑惑在于不了解基类与派生类析构函数的执行顺序,C++中派生类在构造时会先调用基类的构造函数再调用派生类的构造函数,析构时则相反,先调用派生类的析构函数再调用基类的构造函数。 假设一个派生类的对象进行析构,首先调用了派生...
在构造和析构期间对虚函数的调用不总是这么容易能够被发现。如果Transaction有多个构造函数,每个构造函数必须执行相同的工作,防止代码重复的一个好的软件工程是将普通的初始化代码,包含对logTransaction的调用,放到一个私有的非虚初始化函数中,也即是 Init: 1classTransaction {23public:45Transaction()67{ init(); }...
从构造函数和析构函数中调用虚函数并不是本身有什么错误。这种调用的语义是安全的。然而,经验表明这样的调用很少是必须的,很容易扰乱维护者,如果被新手使用会成为错误源。 Enforcement(实施建议) Flag calls of virtual functions from constructors and destructors. 提示来自构造函数或析构函数的虚函数调用。 原文链接...
88.构造函数和析构函数可以调用虚函数吗,为什么? 1)在C++中,提倡不在构造函数和析构函数中调用虚函数;2)构造函数和析构函数调用虚函数时都不使用动态联编,如果在构造函数或析构函数中调用虚函数,则运行的是为构造函数或析构函数自身类型定义的版本;3)因为父类对象会在子类之前进行构造,此时子类部分的数据成员还...
这段代码来自《Effecitive C++》条款09,当声明一个BuyTransaction对象的时候,首先Transaction的构造函数会被调用,从而其virtual函数也被调动,这里就是引发惊奇的起点。这时候被调用的logTransaction是Transaction的版本,而不是派生类BuyTransaction的版本。 我们再看一段代码。
对虚析构函数的调用可以采用动态联编 C. 一个类的虚函数仅对派生类中重定义的函数起作用,对其他函数没有影响 D. 构造函数可以声明为虚函数 相关知识点: 试题来源: 解析 D 正确答案:D 解析:析构函数可以声明为虚函数,但是构造函数不能声明为虚函数;类的虚函数仅对派生类中重定义的函数起作用,对其他函数没...
A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 2下列关于构造函数和析构函数的描述,错误的是( )。 A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类...
构造函数不可以,析构函数可以。 因为对象中的虚函数表指针是在构造函数初始化列表阶段才初始化的。 如果它的构造函数是虚函数,那就要通过对象中的虚函数表指针来调用,而这个虚函数表是在构造函数初始化列表阶段才初始化的。 463.在C中用const 能定义真正意义上的常量吗?C++中的const呢? const修饰的变量是只读的...
A. 析构函数中调用虚函数采取静态联编 B. 对虚析构函数的调用可以采取动态联编 C. 当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数 D. 构造函数可以声明为虚函数 E. 数声明为虚函数时,无论派生类是否使用virtual关键字说明,派生类的析构函数一定 ...