下面是C++的创造者的回答,供你参考
Bjarne Stroustrup:
我在对人们解释这个问题的过程中遇到了很多问题,而且我也一直不能理解为什么让人们理解这个问题是如此困难。自C++出现那天起,就存在着包含数据成员的类和不包含数据成员的类。在过去,人们强调利用一个最基础的设施以及该设施内部的东西来构造软件系统,而那个“最基本的设施”通常就是抽象基类。从80年代中叶到80年代末,那些仅由虚拟函数组合而成的类通常都被称为ABCs(Abstract Base Classes 抽象基类)。1987年,我在C++中加入了纯虚函数的概念,一个纯虚函数必须被其派生类重写。借助此概念,你可以在一个C++类中通过将其成员函数声明为纯虚函数的方法表明该类是一个纯接口类。从那以后,我就一直强调在C++中,有一种主要的使用类的方法就是让该类不包含任何状态,而仅仅作为一个接口。
从C++的角度来看,一个抽象类和一个接口之间没有任何区别。有时,我们习惯使用“纯抽象类”这个词来表示某个类仅仅只含有纯虚函数(不包含任何数据成员),它是抽象类的最常见的形式。当我试图向人们解释这个概念时,我发现如果我不先向他们介绍纯虚函数这个语言中被直接支持的概念,人们就很难接受它。有些人仅仅因为可以在基类中放入一些数据成员,就觉得他们必须这样做。他们这样做,就等于构造了经典的不稳定基类,当然同时也就招致该结构所带来的一切问题。当我向人们介绍C++中直接支持抽象基类的概念时,情况稍微好一些,不过仍然有许多人不能理解它。我认为这是由于我自身的原因所造成的教育上的失败 — 我低估了做这件事的难度。这与早些时候Simula社团在理解新概念上的失败异常相似。有些新概念难以理解,部分原因在于许多人并不是真的想去学习一些全新的东西,他们自以为自己已经知道了答案。而一旦以为自己已经知道了答案,再去学一些新东西就会变得非常困难了。在1991年的《The C++ Programming Language》第二版中,有几个例子描述了抽象类的概念,可不幸的是,我并没有在全书从头至尾都贯穿这个思想。
分享到:
相关推荐
1. 抽象类(Abstract Class): 抽象类是一种不能被实例化的类,它的主要目的是定义一个接口,即一组公共成员函数的签名,供派生类实现。通过声明为抽象类,程序员可以确保所有派生类都必须实现特定的方法,从而...
C++中没有内置的接口概念,但可以使用抽象类(abstract class)来模拟接口。抽象类至少包含一个纯虚函数(pure virtual function),不能被实例化,只能作为基类来使用。 在实际编程中,数据抽象还涉及到继承...
声明纯虚函数的目的是使基类成为一个抽象类(Abstract Class),不能被实例化。抽象类通常作为其他派生类的接口使用。纯虚函数声明如下: ```cpp class Base { public: virtual void func() = 0; // 纯虚函数 ...
再者,**抽象类(Abstract Classes)** 除了包含纯虚函数之外,还可以包含普通成员函数和数据成员。抽象类的主要作用是作为接口,规定了派生类必须遵循的规则,强制派生类实现某些功能。 最后,**动态绑定(Dynamic...
纯虚函数则更进一步,它在基类中定义了一个没有实现的函数,使得基类成为一个抽象类(Abstract Class)。抽象类不能实例化,但可以作为其他类的基类,提供统一的接口。纯虚函数的声明如下: ```cpp class Abstract...
纯虚函数(Pure Virtual Function)和抽象类(Abstract Class)是动态多态性的另一部分。一个纯虚函数没有实现,它的声明以`= 0` 结尾,使得包含纯虚函数的类成为抽象类。抽象类不能实例化,但可以作为基类被其他类...
在C++中,多态主要通过虚函数(virtual functions)和纯虚函数(pure virtual functions)以及抽象类(abstract class)来实现。 1. **虚函数**:虚函数是基类中声明的成员函数,用于实现动态绑定。当基类指针或...
抽象类(Abstract Class)含有至少一个纯虚函数,它们是其他类的基类,用于定义接口,强制子类实现纯虚函数。抽象类可以包含非虚函数和数据成员,但是不能被实例化。 在课件的代码示例中,郑莉老师展示了如何将“+...
后者依赖于虚函数(virtual function)和纯虚函数(pure virtual function),以及抽象类(abstract class)实现。 4. **抽象**:抽象是忽略不相关细节,只关注对象的主要特征。在C++中,抽象通常通过抽象类实现,...
首先,`pure virtual` 函数是 C++ 中抽象类(abstract class)的一部分。一个类如果含有至少一个纯虚函数(声明为 `= 0` 的虚函数),那么这个类就是抽象类,不能被实例化。纯虚函数不提供实现,而是留给子类去实现...
纯虚函数是一个只有声明没有定义的虚函数,它使得包含纯虚函数的类成为抽象类(Abstract Class),不能实例化。抽象类的作用是作为基类,提供接口供派生类继承和实现。例如: ```cpp class Shape { public: ...
**纯虚函数(Pure Virtual Function)和抽象类(Abstract Class)** 纯虚函数是在基类中声明但不提供具体实现的函数,它的声明形式为`virtual void func() = 0;`。含有纯虚函数的类称为抽象类,不能实例化,主要用于...
- **抽象类(Abstract Class)** - 抽象类至少包含一个纯虚函数,这意味着它不能被实例化。抽象类主要用于定义一个接口规范,让子类去实现。 - **接口(Interface)** - 接口也是一种抽象类型,它只定义了方法签名但...
在C++编程语言中,多态性...通过理解并正确使用虚函数、虚析构函数以及抽象类和纯虚函数,开发者可以构建出更加高效、健壮的面向对象系统。在实际编程中,合理利用这些特性可以显著提升代码的可维护性和可扩展性。
一个类如果含有纯虚函数,那么这个类就成了抽象类(abstract class),不能被实例化。抽象类的作用是作为其他类的基类,定义接口,强制子类实现纯虚函数,以保证多态性。 总的来说,C++的多态性是通过虚函数机制...
抽象类的作用主要是作为其他类的基类,提供统一的接口,但不提供具体的实现。这种方式常用于设计模式中的工厂方法、策略模式等,使得具体实现可以延迟到派生类中。 此外,C++11引入了`override`关键字,用于明确...
动态多态则依赖于虚函数(virtual function)和纯虚函数(pure virtual function),以及抽象类(abstract class)的概念。 C++还支持模板(Template),这是一种泛型编程技术,可以创建泛化的函数和类,允许它们...
含有纯虚函数的类称为抽象类(Abstract Class),不能被实例化,但可以作为其他类的基类。抽象类主要用于定义接口,规定派生类必须实现哪些虚函数。 综上所述,C++的多态性是通过函数重载、虚函数和继承等机制实现...
2. **动态多态**:通过虚函数(Virtual Function)和纯虚函数(Pure Virtual Function)以及抽象类(Abstract Class)实现。虚函数使得子类可以覆盖基类的函数,实现不同的行为。纯虚函数定义了一个接口,但没有提供...