多选题
C++中被称为抽象类的类具有哪些特性?
A
使用基类指针
B
使用基类对象
C
使用私有权限
D
基类中有相同的方法
答案解析
正确答案:AB
解析:
好的,让我们来详细解析这道多选题。
题目:C++中被称为抽象类的类具有哪些特性?
选项:
A. 使用基类指针
B. 使用基类对象
C. 使用私有权限
D. 基类中有相同的方法
正确答案:A 和 B
### 解析:
1. **抽象类的定义**:
- 抽象类是包含一个或多个纯虚函数的类。纯虚函数是在基类中声明但没有实现的虚函数,其目的是要求派生类必须实现这些函数。
- 抽象类不能直接实例化,只能作为基类被派生类继承。
2. **选项分析**:
**A. 使用基类指针**
- 抽象类的一个重要特性是可以使用基类指针指向派生类对象。这是多态性的基础,允许通过基类指针调用派生类的实现。
- 示例:
```cpp
class Base {
public:
virtual void show() = 0; // 纯虚函数
};
class Derived : public Base {
public:
void show() override {
std::cout << "Derived show" << std::endl;
}
};
int main() {
Base* ptr = new Derived(); // 使用基类指针指向派生类对象
ptr->show(); // 调用派生类的实现
delete ptr;
return 0;
}
```
- 因此,选项 A 是正确的。
**B. 使用基类对象**
- 抽象类不能直接实例化,因此不能创建抽象类的对象。但是,可以创建派生类的对象,并将其赋值给基类引用或指针。
- 示例:
```cpp
class Base {
public:
virtual void show() = 0; // 纯虚函数
};
class Derived : public Base {
public:
void show() override {
std::cout << "Derived show" << std::endl;
}
};
int main() {
Base obj; // 错误:不能实例化抽象类
Base& ref = *new Derived(); // 使用基类引用指向派生类对象
ref.show(); // 调用派生类的实现
delete &ref;
return 0;
}
```
- 因此,选项 B 是正确的。
**C. 使用私有权限**
- 私有权限(private)与抽象类的特性无关。私有成员只能在类内部访问,但这并不影响类是否为抽象类。
- 示例:
```cpp
class Base {
private:
int privateVar; // 私有成员
public:
virtual void show() = 0; // 纯虚函数
};
```
- 因此,选项 C 是错误的。
**D. 基类中有相同的方法**
- 基类中有相同的方法并不意味着该类是抽象类。抽象类的关键在于包含纯虚函数。
- 示例:
```cpp
class Base {
public:
virtual void show() {} // 普通虚函数
};
class Derived : public Base {
public:
void show() override {
std::cout << "Derived show" << std::endl;
}
};
```
- 因此,选项 D 是错误的。
### 总结:
- 正确答案是 A 和 B。
- 抽象类的主要特性是包含纯虚函数,不能直接实例化,但可以通过基类指针或引用指向派生类对象,实现多态性。
