首页 > 试题广场 >

有以下类定义#include u...

[不定项选择题]
有以下类定义
#include <iostream>
using namespace std;
class shape {
public:
    virtual int area()=0;
};
class rectangle:public shape {
public:
    int a, b;
    void setLength (int x, int y) {a=x;b=y;}
    int area() {return a*b;}
};
若有语句定义rectangle r; r.setLength(3,5); 则编译时无语法错误的语句是(      )
  • shape *s1=&r;
  • shape &s2=r;
  • shape s3=r;
  • shape s4[3];
题目是有错误的,抽象类不能实例化对象,但抽象类的指针或引用可以指向派生类,A,B选项本质上是一样的,只是不能调用派生类独有的成员函数,可以调用被派生类重写的函数
发表于 2020-09-06 12:37:05 回复(1)
发表于 2020-09-21 14:59:03 回复(0)
shape类包含一个纯虚函数,这使得shape成为一个抽象类: 1.抽象类不可实例化对象 2.派生类未重定义基类中纯虚函数接口,则派生类也会成为抽象类,在这里有重新实现area()方法 B: 引用为实例化对象的一个别名 C:实例化一个抽象类对象,并用派生类对象赋值 D:一个未初始化的抽象类对象数组,在创建时会调用其默认构造函数 因此,选项B、C、D违背第1点 以上为个人看法,如有错误,欢迎大佬指正
发表于 2020-08-23 12:18:19 回复(1)
cd错误的原因在于抽象类无法实例化
发表于 2023-03-05 10:58:52 回复(0)
a,b都是对的,code过
发表于 2020-11-09 23:33:12 回复(0)
引用、指针都能使用多态特性
发表于 2021-03-23 08:19:35 回复(0)
抽象类无法实例化
发表于 2023-06-12 09:51:39 回复(0)