从 C 向 C++ 进阶系列导航
1. 抽象类与纯虚函数
抽象类为无实例的类,提出抽象类的意义是满足现实中一些概念的定义,例如:图形、人、动物等。抽象类不能用于创建对象,只能用于作为父类继承。抽象类通过纯虚函数实现,凡拥有纯虚函数的类均称为抽象类。
纯虚函数是指只声明函数原型不定义实现的成员函数,声明方法为:
virtual void fun() = 0;
其中“= 0”是用于告诉编译器当前是声明纯虚函数,不需要定义函数体。
特殊的,当纯虚函数为抽象类的析构函数时,仍需定义函数体。
抽象类与纯虚函数的关系:
- 抽象类只能用作父类被继承。
- 子类必须实现纯虚函数的具体功能。如果子类没有实现纯虚函数,则子类便成为抽象类
- 纯虚函数被实现后成为虚函数。
- 实验:
class Parent
{
public:
virtual void Print() = 0;
};
class Child : public Parent
{
public:
virtual void Print()
{
cout << "in Child" << endl;
}
};
int main(int argc, char *argv[])
{
// Parent parent_obj; // error: cannot declare variable ‘parent_obj’ to be of abstract type ‘Parent’
Child child_obj;
}
2. 接口
接口为特殊的抽象类,遵循以下规则:
- 类中无任何成员变量。
- 所有成员函数为公有属性。
- 所有成员函数为纯虚函数。
- 示例:
class Channel
{
public:
virtual bool open() = 0;
virtual void close() = 0;
virtual bool send(char* buf, int len) = 0;
virtual int recive(char* buf, int len) = 0;
};