首页 > 试题广场 >

以下关于抽象类的说法正确的有

[不定项选择题]
以下关于抽象类的说法正确的有
  • 抽象类只能用作其他类的基类
  • 不能使用抽象类定义对象
  • 抽象类不能用作参数类型、函数返回类型或显式转换的类型
  • 抽象类不能有构造函数和析构函数
D为啥不对呀
发表于 2018-12-23 16:01:59 回复(0)
更多回答

抽象类有一下几个特点:

(1)抽象类只能用作其他类的基类,不能建立抽象类对象。

(2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。

(3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。

发表于 2019-06-27 11:25:04 回复(1)
对于A,如果中间层设计成抽象类,那么它是上一层的派生类,是下一层的基类,我不认为A是对的,即使一般不这么设计,但是语法上应该是允许的。
抽象类不可以定义成指针类型吗,应该可以的吧,所以不认为C是对的。
VS2015测试的,没有报错。
#include <iostream>
using namespace std;
class A {};
class B :public A {
public:
virtual void fun() = 0;
};
class C:public B {
void fun() {}
};
int main() {
C cc;
B*b = (B*)&cc;
system("pause");
return 0;
}
编辑于 2017-08-23 16:58:26 回复(5)

一个抽象类注意一下几点:

1.抽象类只能作为其他类的基类,他不能直接被实例化,而且对抽象类不能使用new操作符。抽象类如果含有变量或值,则他们一定是null类型,要么包含了对非抽象类的实例的引用。
2.抽象类允许包含抽象成员,但这不是必须的(可以允许一个抽象类中没有没有任何抽象成员);抽象类中可以有非抽象方法.
3.抽象类不能同时又是final的,如果试图将一个final类作为其他类的基类,Java将特别提示“the class can either abstract or final ,not both".理所当然,final类不能同时事抽象类。因为抽象类总希望被继承。
4.如果一个非抽象类从抽象类中派生,则其必须通过覆盖来实现所有的继承而来的抽象成员。
5.抽象类可以被抽象类所继承,结果依然是抽象类 。
6.抽象类允许被声明。
发表于 2018-07-28 22:20:24 回复(2)

注意传指针的情况哈 抽象类做参数都是指针或引用


发表于 2018-09-21 11:28:48 回复(1)
抽象类
包含纯虚函数的类称为抽象类。由于抽象类包含了没有定义的纯虚函数,所以不能定义抽象类的对象。

在C++中,我们可以把只能用于被继承而不能直接创建对象的类设置为抽象类(Abstract Class)。

发表于 2017-05-26 09:12:27 回复(0)
抽象类有一下几个特点: (1)抽象类只能用作其他类的基类,不能建立抽象类对象。 (2)抽象类不能用作参数类型、函数返回类型或显式转换的类型。 (3)可以定义指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性。
发表于 2020-12-24 17:44:34 回复(0)
C中是指抽象类不能作为参数类型 而不说不能作为指针类型 所以C是对的
发表于 2018-04-21 13:37:56 回复(1)

首先,

B:不能创建一个抽象类的对象

C:抽象类不能用作参数类型、函数返回类型或显式转换的类型。  但可以使用抽象类的引用和指针,以实现多态

正确。

再看D选项,虽然我们不能直接创建抽象类对象,但其派生类会使用基类的构造函数来构造各个派生类对象的基类部分,所以可以有构造函数和析构函数。

比较疑惑的是A选项,```

抽象类只能用作其他类的基类?

《C++ Primer》中给出抽象基类的概念:

含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类。
意思是,派生类未给出自己的纯虚函数的定义,那么它仍是抽象基类。
```

编辑于 2019-11-21 10:05:27 回复(2)
抽象类 是类中有纯虚函数的类。纯虚函数,virtual修饰 且函数体=0。 eg: void func() = 0; 抽象类不能实例化,即不能作为类型定义对象。子类必须将父类的纯虚函数全部重写才能实例化对象。
抽象类不能作为一种新的,可使用数据类型。作为参数类型的要求是 实例化对象 ,类实例化对象时,类作为新定义的类型,所以抽象类不饿能作为参数类型,函数返回类型,显示转换同理。
发表于 2023-11-06 21:00:51 回复(0)
如果子类继承了父类的纯虚函数但没有重新定义,那子类不也是抽象类吗
发表于 2022-03-24 10:09:07 回复(0)
A不对,抽象类可以用作抽象类的派生类
发表于 2022-05-19 22:03:50 回复(0)
对于选项C?返回为基类指针不行吗?
发表于 2022-03-15 20:52:50 回复(0)
对于C选项,我认为是错误的。为什么抽象类不能用作参数类型呢?
#include 
using namespace std;
class Example1
{
public:
    virtual void func()const = 0;
};
class Example2:public Example1
{
public:
    void func()const
    {
        cout << "HelloWorld" << endl;
    }
};
void show(const Example1 * ex)
{
    ex->func();
}
int main()
{
    Example1* ex1 = new Example2();
    show(ex1);  //HelloWorld
    delete ex1;
    return 0;
}
发表于 2019-10-11 18:25:09 回复(0)
抽象类:含有纯虚函数。
纯虚函数在抽象类内部没有函数体
所以ABC正确
作为基类有构造函数和析构函数。D错误

发表于 2019-05-31 11:07:21 回复(0)
如果类A是含有纯虚函数f()的抽象类,类B继承类A,但没有覆盖f(),则类B也是抽象类,但它是类A的派生类。
发表于 2019-05-15 19:45:41 回复(0)
为什么不能使用抽象类定义对象
发表于 2018-05-16 07:41:59 回复(0)
求解答
发表于 2017-10-23 08:39:53 回复(0)
抽象类可用于继承但不能直接创建对象的情况
发表于 2017-07-11 10:23:58 回复(0)