通常,最后一个使用者必须通过指向基类的指针调用delete操作,通常是指向基类的智能指针,因此析构函数应该是公开的虚函数。稍微特殊一些的情况是:如果不希望支持通过指向基类的指针销毁对象,析构函数应该是保护的非虚函数。参见C.35。 Example, bad(反面示例) 代码语言:javascript 复制 structB{virtual intf()=0;// ....
这种情况下,B::foo()是虚函数,C::foo()也同样是虚函数。因此,可以说,基类声明的虚函数,在派生类中也是虚函数,即使不再使用virtual关键字。 2.2 纯虚函数 如下声明表示一个函数为纯虚函数: class A { public: virtual void foo()=0; // =0标志一个虚函数为纯虚函数 }; 一个函数声明为纯虚后,纯虚...
从程序的运行结果可以看出,父类和子类的内存都被析构了。所以在使用多态时一定要将父类的析构函数定义成虚函数,从而避免内存泄露。
下列描述中错误的是 A.析构函数可以被继承B.虚函数不能被继承C.派生类可以有多个基类D.纯虚基类的子类可以是虚基类
百度试题 结果1 题目对虚基类的定义〔 〕。 A. 不需要使用虚函数 B. 必须使用虚函数 C. 必须使用private D. 必须使用public 相关知识点: 试题来源: 解析 A 反馈 收藏
首先析构函数可以为虚函数,当析构一个指向派生类的基类指针时,最好将基类的析构函数声明为虚函数,否则可以存在内存泄露的问题。 如果析构函数不被声明成虚函数,则编译器实施静态绑定,在删除指向派生类的基类指针时,只会调用基类的析构函数而不调用派生类析构函数,这样就会造成派生类对象析构不完全。
这是一个纯虚函数,必须在派生类中重写。 框架调用它来实例化基础的 COM 转换对象。CBaseTransition::GetEndKeyframe返回开始关键帧。复制 CBaseKeyFrame* GetEndKeyframe(); 返回值指向关键帧的有效指针,如果不应在关键帧之间插入转换,则为 NULL。注解此方法可用于访问先前由 SetKeyframes 设置的关键帧对象。
继承,从广义上讲,继承有三种实现方式,其一,为实现继承,指使用基类的属性和方法而无需额外编码,其二,可视继承,即子窗体使用父窗体的外观和实现代码,其三,则为接口继承,即仅仅继承属性和方法,实现则滞后到子类去实现,也就是父类使用的是纯虚函数,或者重写父类接口方法,则是虚函数,例如多态的实现就使用了接口继承。
A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类的析构函数是虚函数时,其派生类的析构函数也一定是虚函数D.构造函数可以声明为虚函数 2下列关于构造函数和析构函数的描述,错误的是( )。 A.析构函数中调用虚函数采用静态联编B.对虚析构函数的调用可以采用动态联编C.当基类...
D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 相关知识点: 试题来源: 解析 C 正确答案:C解析:纯虚函数是在声明虚函数时被“初始化”为0的虚函数。不定义对象而只作为一种基本类型作为继承的类,称为抽象类。凡是包含纯虚函数的类都是抽象类。抽象类的作用是作为一个类族的共同基类。反馈...