为什么下面的程序会出现错误?#include <iostream> #include <string> using namespace std; class A { int a; public: virtual void func() = 0; }; class B: public A { public: void func(){ cout<<"Class B"<<endl; } }; int main(int argc, char const *argv[]) { A a; a.func(); return 0; }
时间: 2024-01-14 09:02:58 浏览: 69
使用include <iostream>时一定要加using namespace std
这段代码会出现错误,因为在main函数中创建了一个抽象类A的对象a,而抽象类是不能被实例化的。
抽象类中有一个或多个纯虚函数,这些函数没有实现,只是做了函数的声明。抽象类不能被实例化,只能作为基类,由其派生出子类,子类必须实现基类中的纯虚函数。
在这段代码中,类A是一个抽象类,它包含一个纯虚函数func,而类B是类A的子类,实现了func函数。在main函数中,创建了一个类A的对象a,但是由于类A是抽象类,无法被实例化,因此会导致编译错误。
正确的做法是创建类B的对象,然后调用其func函数,如下所示:
```
int main(int argc, char const *argv[]) {
B b;
b.func();
return 0;
}
```
阅读全文