多态性通过虚函数表来实现。
但对于一些比如形状这种抽象的类,这种代码是很难实现的。
class Shape {
public:
virtual void rotate(int);
virtual void draw();
virtual bool is_closed();
…
};
/* it is difficult to define rotate and draw operations for some general shapes */
更好的方法是将抽象类的虚函数声明为纯虚函数。 未定义纯虚函数,但使用 =0 表示法来指示它是纯虚拟的。 具有一个或多个纯虚函数的类是抽象类,抽象类是不需要构造函数的,只能作为接口或基类。
class Shape {
public:
virtual void rotate(int)=0;
virtual void draw()=0;
virtual bool is_closed()=0;
…
};
class Point { … };
class Circle : public Shape {
public:
void rotate(int) { }
void draw();
bool is_closed(){return true;}
Circle(Point p,int r);
private:
Point Center;
int radius;
};
抽象类旨在作为通过指针和引用访问的对象的接口(以保留多态行为)。 抽象类的一个重要用途是提供接口而不公开任何实现细节
派生类本身可以是基类,通过继承相关的一组类称为类层次结构,这样的层次结构可以用有向无环图(DAG)来表示。
一个类有不止一个基类的情况就叫做多态继承。
泛型程序设计(C++特点之一)
模板是参数化类型定义。 模板提供了一种简单的方法来表示各种一般概念,并提供了组合它们的简单方法。 模板提供对泛型编程的直接支持,使用类型作为参数。 两种类型的模板: 类模板 函数模板
例子:
什么是函数模板?什么是类模板?
先给大家一个简单的例子
比如说我们定义队列,队列中存放整数和字符串,我们用的都是最底层的表达方式,数据类型不一样,按照之前学的知识,就要写两个基本性质相同的类,是不是很繁琐?
所以,模板孕育而生,模板支持把类型名作为参数。
泛型程序设计优势就在节省重复代码的编写。