具有一个(或多个)虚纯函数的类是抽象的,不能用于创建新对象,因此它没有构造函数。
我正在阅读一本提供以下示例的书:
class Employee {
public:
Employee(const char*, const char*);
~Employee();
const char* getFirstName() const;
const char* getLastName() const;
virtual double earnings() const=0 // pure virtual => abstract class
virtual void print() const
private:
char* firstName, lastName;
};
如果类是抽象的,为什么我们有一个构造函数?它稍后会使用这个类(Boss
是从 Employee
派生的公共(public)的):
void Boss::Boss (const char* first, const char* last, double s)
: Employee (first, last)
最佳答案
当您说具有纯虚函数的类是抽象的并且不能被实例化时,您是对的。但是当你说它不能有构造函数时你就错了。
确实,正如您的示例所示,抽象类可以具有私有(private)成员,这些成员可以被此类的成员函数使用。并且这些成员必须被初始化。构造函数是一种方法(例如,在派生类中使用初始化列表,如您的第二个示例所示),在我看来比 init()
函数更好。
在答案中编辑我的评论:抽象类可以具有成员变量和潜在的非虚拟成员函数,因此从前者派生的每个派生类都实现特定功能。
那么,初始化这些成员变量的责任可能属于抽象类(至少总是私有(private)成员,因为派生类不能初始化它们,但可以使用一些可能使用/依赖这些成员的继承成员函数)。因此,抽象类实现构造函数是完全合理的。
关于C++ 抽象类 : constructor yes or no?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808667/