首页 > 试题广场 >

有关纯虚函数说法正确的是( ...

[不定项选择题]
c/c++中,有关纯虚函数说法正确的是(      )
  • 子类中必须覆盖基类的纯虚函数
  • 含有纯虚函数的类不能被实例化
  • 基类的纯虚函数没有函数体
  • 含有纯虚函数的类一定是抽象类
答案:BD
解析:
A:错误,子类中不一定要覆盖基类的纯虚函数。存没有实现的纯虚函数,那这个基类是不能实例化的。继承这个基类的子类可以覆盖也可以不覆盖其虚函数。如果基类中的纯虚函数在子类中没有覆盖,那这个子类还是一个虚类,同样不能实例化。
B:正确,纯虚函数产生的目的本身就是不能实例化对象
C:错误,基类的纯虚函数是可以有函数体的。可以有,但没必要~不知道这个选项存在的意义是什么。
D:正确,纯虚函数产生的定义就是抽象类
发表于 2019-08-22 11:14:50 回复(3)
这道题的答案应该是B和D
首先,含有纯虚函数的类是抽象类,继承这个抽象类的子类可以覆盖也可以不覆盖纯虚函数。如果基类中的纯虚函数在子类中没有覆盖,那这个子类还是一个抽象类,不能实例化。A 错误
B就是抽象类的特性,B 正确
C选项中,纯虚函数是可以有函数体的,当我们希望基类不能产生对象,然而又希望将一些公用代码放在基类时,可以使用纯虚函数,并为纯虚函数定义函数体,只是纯虚函数函数体必须定义在类的外部,C 错误
D选项是抽象类的定义,D 正确
编辑于 2019-08-17 17:40:33 回复(0)
纯虚函数可以定义函数体,只能在类外定义。

发表于 2022-02-05 15:32:12 回复(5)
既然是虚函数,类不会被实例化,自然也不会被执行,那函数体本身有什么意义么?
发表于 2022-03-13 10:16:52 回复(1)
纯虚函数可以定义函数体,只能在类外定义。
发表于 2023-10-21 15:10:56 回复(0)

纯虚函数 在基类中 virtual修饰的函数,且类中没有函数体。
eg:
class Base { public: virtual void fun() = 0; };
A:子类中没有强制要求必须覆盖基类的纯虚函数,若没有覆盖基类的纯虚函数,子类不能实例化。子类若想实例化对象,必须覆盖基类的全部纯虚函数。
B:含有纯虚函数的类不能被实例化。
C:基类的纯虚函数,纯虚析构函数,都可以有函数体,函数体实现必须在类外实现。
D:抽象类就是不能实例化的类,里面必须包含至少一个纯虚函数。


#include <iostream>
using namespace std;

class A
{
public:
    virtual void fun() = 0;
};
void A::fun()
{
    cout << "纯虚函数和纯虚析构都可以有函数体,但是必须在类外实现" << endl;
    cout << "这是父类的纯虚函数,一般不会被执行,除非二般。通过类作用域调用父类的函数)" << endl;
}
class B : public A
{
public:
    void fun();
};
void B::fun()
{
    cout << "这是重写的函数" << endl;
}

int main(int argc, char const *argv[])
{
    // 父类指针指向子类空间
    A *p = new B;
    p->fun();
    p->A::fun();
    return 0;
}


发表于 2023-10-07 22:05:14 回复(0)
什么鬼,这个题目在单选题目中正确答案是A,在多选中怎么全对了??????
发表于 2019-10-17 09:47:31 回复(0)
破答案。
发表于 2019-09-09 09:24:40 回复(0)